15,979
社区成员
发帖
与我相关
我的任务
分享
BOOL IsWindowOnTray(HWND hWnd)
{
HWND hWndTray, hWndPaper;
DWORD dwProcessId;
int nButtonCount;
HANDLE hProcess;
LPVOID lpAddress;
TBBUTTON tb;
TRAYDATA trayData;
BOOL bResult = FALSE;
hWndTray = FindWindow(TEXT("Shell_TrayWnd"), NULL);
hWndTray = FindWindowEx(hWndTray, 0, TEXT("TrayNotifyWnd"), NULL);
hWndPaper = FindWindowEx(hWndTray, 0, TEXT("SysPager"), NULL);
if(!hWndPaper)
hWndTray = FindWindowEx(hWndTray, 0, TEXT("ToolbarWindow32"), NULL);
else
hWndTray = FindWindowEx(hWndPaper, 0, TEXT("ToolbarWindow32"), NULL);
GetWindowThreadProcessId(hWndTray, &dwProcessId);
hProcess = OpenProcess(PROCESS_ALL_ACCESS
|PROCESS_VM_OPERATION
|PROCESS_VM_READ
|PROCESS_VM_WRITE,
0,
dwProcessId);
lpAddress = VirtualAllocEx(hProcess,0, 0x4096, MEM_COMMIT, PAGE_READWRITE);
nButtonCount = SendMessage(hWndTray, TB_BUTTONCOUNT, 0, 0);
for(int i = 0 ; i < nButtonCount - 1; i++)
{
SendMessage(hWndTray, TB_GETBUTTON, i, (LPARAM)lpAddress);
ReadProcessMemory(hProcess, lpAddress, &tb, sizeof(TBBUTTON), 0);
ReadProcessMemory(hProcess, (LPVOID)tb.dwData, &trayData, sizeof(TRAYDATA), 0);
if (trayData.hwnd == hWnd)
{
bResult = TRUE;
break;
}
}
VirtualFreeEx(hProcess, lpAddress, 0x4096, MEM_RELEASE);
CloseHandle(hProcess);
return bResult;
}
BOOL IsWindowOnTray(HWND hWnd)
{
HWND hWnd,hWndPaper;
DWORD dwProcessId;
int nButtonCount;
HANDLE hProcess;
LPVOID lpAddress;
TBBUTTON tb;
TRAYDATA trayData;
BOOL bResult = FALSE;
hWnd = FindWindow(TEXT("Shell_TrayWnd"), NULL);
hWnd = FindWindowEx(hWnd, 0, TEXT("TrayNotifyWnd"), NULL);
hWndPaper = FindWindowEx(hWnd, 0, TEXT("SysPager"), NULL);
if(!hWndPaper)
hWnd = FindWindowEx(hWnd, 0, TEXT("ToolbarWindow32"), NULL);
else
hWnd = FindWindowEx(hWndPaper, 0, TEXT("ToolbarWindow32"), NULL);
GetWindowThreadProcessId(hWnd, &dwProcessId);
hProcess = OpenProcess(PROCESS_ALL_ACCESS
|PROCESS_VM_OPERATION
|PROCESS_VM_READ
|PROCESS_VM_WRITE,
0,
dwProcessId);
lpAddress = VirtualAllocEx(hProcess,0, 0x4096, MEM_COMMIT, PAGE_READWRITE);
nButtonCount = SendMessage(hWnd, TB_BUTTONCOUNT, 0, 0);
for(int i = 0 ; i < nButtonCount - 1; i++)
{
SendMessage(hWnd, TB_GETBUTTON, i, (LPARAM)lpAddress);
ReadProcessMemory(hProcess, lpAddress, &tb, sizeof(TBBUTTON), 0);
ReadProcessMemory(hProcess, (LPVOID)tb.dwData, &trayData, sizeof(TRAYDATA), 0);
if (trayData.hwnd == hWnd)
{
bResult = TRUE;
break;
}
}
VirtualFreeEx(hProcess, lpAddress, 0x4096, MEM_RELEASE);
CloseHandle(hProcess);
return bResult;
}