cpueblo's
Programming

Google
 
Programming | Tools | Money | Blog | ±âÁ¸ ÀÚ·á½Ç ¹æ¸í·Ï | About Me | English | °Ë»ö   
¾ð¾îº°:


ÁÖÁ¦º°:


Àüü Ç׸ñº°


±âŸ


±¤ÈñÀÇ ÀÚÀÛÅø

cpueblo's Library

 

¾²·¹±â Æ®·¹ÀÌ ¾ÆÀÌÄÜ »èÁ¦

µî·ÏÀÚ : À¯±¤Èñ, 06-09-13 09:09:50


¼Ò°³

½© Æ®·¹À̸¦ ÀÌ¿ëÇÏ´Â S/W ¸¦ °³¹ßÇϰųª, ÀÌ¿ëÇÏ´Â ÀÔÀå¿¡¼­

ÇÁ·Î¼¼½º°¡ Á×¾úÀ½¿¡µµ Æ®·¹ÀÌ ¿µ¿ª¿¡ ³²¾Æ ÀÖ´Â ¾ÆÀÌÄÜÀ» Á¦°ÅÇϱâ À§ÇØ ¸¸µç ÇÔ¼ö ÀÔ´Ï´Ù !


½© Æ®·¹ÀÌ ¾ÆÀÌÄÜ ?


À§Ã³·³ ¾î´À À©µµ¿ì¿¡¼­³ª º¼¼ö ÀÖ´Â ½© Æ®·¹ÀÌ´Â Toolbar ÄÁÆ®·Ñ·Î¼­ ¾îÇø®ÄÉÀÌ¼Ç ¾ÆÀÌÄÜÀ» Æ®·¹ÀÌ

¿µ¿ª¿¡ »ý¼ºÇÏ¿© À̺¥Æ®¸¦ ó¸®ÇÏ´Â ¿µ¿ªÀÔ´Ï´Ù.

MSDN - Toolbar Controls


¾²·¹±â Tray ¾ÆÀÌÄÜÀ̶õ ?

< ActiveSync °¡ °­Á¦ Á¾·áµÇ¾î ¾²·¹±â ¾ÆÀÌÄÜÀÌ 3°³³ª º¸Àδ٠>

Æ®·¹ÀÌ¿¡ ¾ÆÀÌÄÜÀ» »ý¼ºÇصРÇÁ·Î±×·¥ÀÌ °­Á¦·Î Á¾·áµÇ¾úÀ»¶§, ¸¸µé¾îÁø Æ®·¹ÀÌ ¾ÆÀÌÄÜÀ»
»èÁ¦ÇÏÁö ¸øÇϰí Á¾·áµÈ °æ¿ì ÀÔ´Ï´Ù.

°³¹ßÀÚ Ãø¿¡¼­´Â Æ®·¹ÀÌ ¾ÆÀÌÄÜÀ» »ý¼ºÇÏ´Â ±â´ÉÀÌ µé¾î°¥ °æ¿ì ¾²·¹±â¿Í ´õºÒ¾î
ÁöÀúºÐÇØÁø Æ®·¹ÀÌ ¾ÆÀÌÄÜÀÌ °°ÀÌ º¸ÀÌ°Ô µÇ´Âµ¥ ÀÌ·¯ÇÑ Çö»óÀ» ¾ø¾Ö±â À§ÇØ 1ȸ Á¤µµ ¾Æ·¡ÀÇ ÇÔ¼ö¸¦ ½ÇÇàÇÏ¿©
±ò²ûÇÑ Æ®·¹À̸¦ À¯ÁöÇÏ´Â ¹æ¹ýÀÔ´Ï´Ù

¾²·¹±â ¾ÆÀÌÄÜÀÇ Á¦°Å´Â ¾î¶»°Ô ?

1. À©µµ¿ì¿¡¼­ Æ®·¹ÀÌ ¾ÆÀÌÄÜÀÇ À©µµ¿ì ÇÚµéÀ» ã´Â´Ù
2. ÇØ´ç À©µµ¿ì¿¡¼­ Toolbar ÄÁÆ®·ÑÀ» ã´Â´Ù
3. ÄÁÆ®·Ñ¿¡¼­ Æ®·¹ÀÌ ¾ÆÀÌÄÜÀÇ °³¼ö¸¦ ¾ò´Â´Ù
4. TB_BUTTONCOUNT À» ÀÌ¿ëÇÏ¿© ÇöÀç Æ®·¹ÀÌ¿¡ µî·ÏµÈ ¾ÆÀÌÄÜÀÇ °³¼ö¸¦ ¾ò´Â´Ù
5. ÇØ´ç °³¼ö¸¸Å­ TB_GETBUTTON À» Åø¹Ù À©µµ¿ì¿¡ ¿äûÇϱâ À§ÇÏ¿©
5.1 ÇØ´ç ÇÁ·Î¼¼¼­ÀÇ PID ¸¦ ±¸ÇÑ´Ù
5.2 ÇØ´ç ÇÁ·Î¼¼¼­ ³»¿¡ °¡»ó ¸Þ¸ð¸®¸¦ »ý¼º
5.3 TB_GETBUTTON ¿¡¼­ ¸®ÅϹÞÀ» ¸Þ¸ð¸®¸¦ TRAY ÇÁ·Î¼¼¼­ÀÇ °¡»ó ¸Þ¸ð¸®¿¡ ÇÒ´çÇÑ´Ù
5.4 TB_GETBUTTON ¿äûÇÏ¿© TRAYDATA ¶ó´Â ±¸Á¶Ã¼¿¡ ³Ö´Â´Ù

6. TRAY ±¸Á¶Ã¼ ³»¿¡ ProcessID °¡ NULL ÀÏ °æ¿ì ÇØ´ç ¾ÆÀÌÄÜÀ» »èÁ¦

7. 5ÀÇ À§Ä¡·Î ¾ÆÀÌÄܸ¸Å­ ¹Ýº¹ 8. °¡»ó ¸Þ¸ð¸® ÇØÁ¦ ¹× ³¡

°¡»ó ¸Þ¸ð¸®´Â ¿Ö ?

½Ã½ºÅÛ Æ®·¹ÀÌ ¾ÆÀÌÄÜÀÌ À§Ä¡ÇÑ À©µµ¿ì Çڵ鵵 ÇϳªÀÇ ÇÁ·Î¼¼½º ³»¿¡ À§Ä¡ÇÕ´Ï´Ù
TB_BUTTONCOUNT ´Â ¸®ÅÏÀÌ int ÇüÀ̶ó °ü·ÃÀÌ ¾øÁö¸¸
TB_GETBUTTON ¿Í °°Àº µ¥ÀÌÅÍÀÇ ¸®ÅϰªÀ» ºÐ¼®ÇØ¾ß ÇÒ Çʿ䰡 ÀÖ´Â ¸Þ¼¼Áö´Â
ÇØ´ç ÇÁ·Î¼¼¼­³»ÀÇ ¸Þ¸ð¸®¿¡¼­ »ý¼ºµÈ °ªÀ¸·Î ¸®ÅÏ¹Þ¾Æ¾ß ÇÕ´Ï´Ù.
¿Ö.. ¼­·Î ´Ù¸¥ ÇÁ·Î¼¼¼­³¢¸®´Â ÀϹÝÀûÀÎ º¯¼ö³ª ÇÒ´çÇÑ ¸Þ¸ð¸®´Â °øÀ¯°¡ ¾ÈµÇ±â¿¡.. (´Ùµé ¾ËÁÒ?)
±×¸®ÇÏ¿© ÇØ´ç ÇÁ·Î¼¼¼­¸¦ ÀÌ¿ëÇÏ¿© °¡»óÀÇ ¸Þ¸ð¸®¸¦ ¸¸µé¾î ÇØ´ç µ¥ÀÌÅ͸¦ ¸®ÅÏ¹Þ°Ô µË´Ï´Ù.

°ü·Ã ±¸Á¶Ã¼¼Ò½º

TBBUTTON(commctrl.h)

typedef struct _TBBUTTON {
    int	 iBitmap; 
    int	 idCommand; 
    BYTE     fsState; 
    BYTE     fsStyle; 
#ifdef _WIN64
    BYTE     bReserved[6]     // padding for alignment
#elif defined(_WIN32)
    BYTE     bReserved[2]     // padding for alignment
#endif
    DWORD_PTR   dwData; 
	INT_PTR	  iString; 
} TBBUTTON, NEAR *PTBBUTTON *LPTBBUTTON;

NOTIFYICONDATA(shellapi.h)

typedef struct _NOTIFYICONDATA {
    DWORD cbSize;
    HWND hWnd;
    UINT uID;
    UINT uFlags;
    UINT uCallbackMessage;
    HICON hIcon;
    TCHAR szTip[64];
    DWORD dwState;
    DWORD dwStateMask;
    TCHAR szInfo[256];
    union {
	UINT uTimeout;
	UINT uVersion;
    };
    TCHAR szInfoTitle[64];
    DWORD dwInfoFlags;
    GUID guidItem;
    HICON hBalloonIcon;
} NOTIFYICONDATA, *PNOTIFYICONDATA;

¼Ò½º

/******************************************************************* FileName: TeleShellTrayRefresh.cpp Description: »ç¶óÁø Æ®·¹ÀÌ ¾ÆÀÌÄÜÀ» Á¤¸®ÇÑ´Ù! CREATED: 2006-09-12 LAST MODIFIED 2006-09-12 BY: KwangHee Yoo cpueblo@cpueblo.com, yurchi@hanmail.net http://www.cpueblo.com ***********************************************************************/ //========================================================= // INCLUDE Çì´õ Á¤ÀÇ. MFC ¿ë°ú ºô´õ¿ë, ¶Ç´Â ÀÚ½ÅÀÇ Preheader ÇØ´õ ÆÄÀÏ·Î ´ëü //========================================================= #include <StdAfx.h>; #include <TeleShellTrayRefresh.h> //========================================================= // ±¸Á¶Ã¼ Á¤ÀÇ //========================================================= struct TRAYDATA { HWND hwnd; UINT uID; UINT uCallbackMessage; DWORD Reserved[2]; HICON hIcon; }; //========================================================= // Tray ¾ÆÀÌÄÜÀÇ ÇÁ·Î¼¼½º À̸§À» ¾ò±â À§ÇØ À©µµ¿ì ÇÚµéÀ» ¾ò´Â ÇÔ¼ö //========================================================= static HWND FindTrayToolbarWindow() { HWND hWnd_ToolbarWindow32 = NULL; HWND hWnd_ShellTrayWnd; hWnd_ShellTrayWnd = ::FindWindow(_T("Shell_TrayWnd"), NULL); if(hWnd_ShellTrayWnd) { HWND hWnd_TrayNotifyWnd = ::FindWindowEx(hWnd_ShellTrayWnd,NULL,_T("TrayNotifyWnd"), NULL); if(hWnd_TrayNotifyWnd) { HWND hWnd_SysPager = ::FindWindowEx(hWnd_TrayNotifyWnd,NULL,_T("SysPager"), NULL); // WinXP // WinXP ¿¡¼­´Â SysPager ±îÁö ÃßÀû if(hWnd_SysPager) { hWnd_ToolbarWindow32 = ::FindWindowEx(hWnd_SysPager, NULL,_T("ToolbarWindow32"), NULL); } // Win2000 ÀÏ °æ¿ì¿¡´Â SysPager °¡ ¾øÀÌ TrayNotifyWnd -> ToolbarWindow32 ·Î ³Ñ¾î°£´Ù else { hWnd_ToolbarWindow32 = ::FindWindowEx(hWnd_TrayNotifyWnd, NULL,_T("ToolbarWindow32"), NULL); } } } return hWnd_ToolbarWindow32; } //========================================================= // »ý¼ºÀÚ //========================================================= TeleShellTrayRefresh::TeleShellTrayRefresh() { } //========================================================= // ¼Ò¸êÀÚ //========================================================= TeleShellTrayRefresh::~TeleShellTrayRefresh() { } //========================================================= // Refresh ÀÇ ¸ÞÀÎ //========================================================= bool TeleShellTrayRefresh::Refresh() { try { HANDLE m_hProcess; LPVOID m_lpData; TBBUTTON tb; TRAYDATA tray; DWORD dwTrayPid; int TrayCount; // Tray ÀÇ À©µµ¿ì ÇÚµé ¾ò±â HWND m_hTrayWnd = FindTrayToolbarWindow(); if (m_hTrayWnd == NULL) return false; // Tray ÀÇ °³¼ö¸¦ ±¸Çϰí TrayCount = (int)::SendMessage(m_hTrayWnd, TB_BUTTONCOUNT, 0, 0); // Tray À©µµ¿ì ÇÚµéÀÇ PID ¸¦ ±¸ÇÑ´Ù GetWindowThreadProcessId(m_hTrayWnd, &dwTrayPid); // ÇØ´ç Tray ÀÇ Process ¸¦ ¿­¾î¼­ ¸Þ¸ð¸®¸¦ ÇÒ´çÇÑ´Ù m_hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwTrayPid); if (!m_hProcess) return false; // ÇØ´ç ÇÁ·Î¼¼½º ³»¿¡ ¸Þ¸ð¸®¸¦ ÇÒ´ç m_lpData = VirtualAllocEx(m_hProcess, NULL, sizeof (TBBUTTON), MEM_COMMIT, PAGE_READWRITE); if (!m_lpData) return false; // Tray ¸¸Å­ »±»±ÀÌ for(int i = 0; i < TrayCount; i++) { ::SendMessage(m_hTrayWnd, TB_GETBUTTON, i, (LPARAM)m_lpData); // TBBUTTON ÀÇ ±¸Á¶Ã¼¿Í TRAYDATA ÀÇ ³»¿ëÀ» ¾ò±â ReadProcessMemory(m_hProcess, m_lpData, (LPVOID)&tb, sizeof (TBBUTTON), NULL); ReadProcessMemory(m_hProcess, (LPCVOID)tb.dwData, (LPVOID)&tray, sizeof (tray), NULL); // °¢°¢ Æ®·¹ÀÌÀÇ ÇÁ·Î¼¼½º ¹øÈ£¸¦ ¾ò¾î¼­ DWORD dwProcessId = 0; GetWindowThreadProcessId(tray.hwnd, &dwProcessId); // Process °¡ ¾ø´Â °æ¿ì TrayIcon À» »èÁ¦ÇÑ´Ù if (dwProcessId == 0) { NOTIFYICONDATA icon; icon.cbSize = sizeof(NOTIFYICONDATA); icon.hIcon = tray.hIcon; icon.hWnd = tray.hwnd; icon.uCallbackMessage = tray.uCallbackMessage; icon.uID = tray.uID; Shell_NotifyIcon(NIM_DELETE, &icon); } } // °¡»ó ¸Þ¸ð¸® ÇØÁ¦¿Í ÇÁ·Î¼¼½º ÇÚµé ´Ý±â VirtualFreeEx(m_hProcess, m_lpData, NULL, MEM_RELEASE); CloseHandle(m_hProcess); return true; } catch (...) { return false; } }

°ü·Ã ¸µÅ©

MSDN - TB_BUTTONCOUNT
MSDN - TB_GETBUTTON

¿¹Á¦¿Í ¼Ò½º ´Ù¿î·Îµå

´Ù¿î·Îµå

ÀÛ¼ºÀÚ

http://cpueblo.com

À¯±¤Èñ


World of World. http://cpueblo.com by À¯±¤Èñ. mail to cpueblocpueblo.com