¾²·¹±â Æ®·¹ÀÌ ¾ÆÀÌÄÜ »èÁ¦
µî·ÏÀÚ : À¯±¤Èñ, 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 ;
#include
//=========================================================
// ±¸Á¶Ã¼ Á¤ÀÇ
//=========================================================
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
À¯±¤Èñ
|