获取系统托盘图标的坐标及文本
#include <iostream> #include <windows.h> #include <tchar.h> #include <commctrl.h> using namespace std; int _tmain(int argc, TCHAR* argv[], TCHAR* envp[]) { int nRetCode = 0; SIZE_T len = 256; TCHAR * ptb = new TCHAR[256]; TCHAR * buf = new TCHAR[256]; SIZE_T size; HWND hwnd = FindWindow(_T("Shell_TrayWnd"),NULL); hwnd = FindWindowEx(hwnd,NULL,_T("TrayNotifyWnd"),NULL); hwnd = FindWindowEx(hwnd,NULL,_T("SysPager"),NULL); hwnd = FindWindowEx(hwnd,NULL,_T("ToolbarWindow32"),NULL); HWND tool = (HWND)0x0004007C; RECT rccc; GetWindowRect(hwnd,&rccc); DWORD proID; GetWindowThreadProcessId(tool, &proID); HANDLE hPro = OpenProcess(PROCESS_VM_OPERATION | PROCESS_VM_READ | PROCESS_VM_WRITE , NULL, proID); PVOID pBun = VirtualAllocEx(hPro, NULL, len, MEM_COMMIT, PAGE_EXECUTE_READWRITE); PVOID pText = VirtualAllocEx(hPro, NULL, len, MEM_COMMIT, PAGE_EXECUTE_READWRITE); UINT buffer = len; for(int j=0;j<9;j++) { DWORD si = SendMessage(tool, TB_GETRECT, (WPARAM)j, (LPARAM)pBun); si = SendMessage(tool, TB_GETBUTTONTEXT , (WPARAM)j, (LPARAM)pText); ReadProcessMemory(hPro, pBun, (LPVOID)ptb, len, &size); ReadProcessMemory(hPro, pText, (LPVOID)buf, len,&size); LPRECT pRect = (LPRECT)ptb; OffsetRect(pRect,rccc.left,rccc.top); cout<<buf<<endl; cout<<(*pRect).left<<endl<<(*pRect).top<<endl<<(*pRect).right<<endl<<(*pRect).bottom<<endl; } VirtualFreeEx(hPro, pBun, len, MEM_DECOMMIT); VirtualFreeEx(hPro,pText,len,MEM_COMMIT); delete ptb; return nRetCode; }
win问题: http://blog.csdn.net/hzy694358/article/details/7400284