【发布时间】:2014-03-20 08:11:04
【问题描述】:
我有一些这样的代码:
TBBUTTONINFO mtbbi;
HWND hwnd;
HANDLE hProc;
DWORD dwProcessID;
void* lpData;
.....
GetWindowThreadProcessId(hwnd, &dwProcessID);
hProc = OpenProcess(PROCESS_ALL_ACCESS, 0, dwProcessID);
lpData = VirtualAllocEx(hProc , 0, sizeof(TBBUTTONINFO), MEM_COMMIT, PAGE_READWRITE);
memset(&mtbbi,0,sizeof(mtbbi));
mtbbi.cbSize=sizeof(TBBUTTONINFO);
mtbbi.dwMask=TBIF_BYINDEX|TBIF_LPARAM;
WriteProcessMemory(hProc,lpData,&mtbbi,sizeof(TBBUTTONINFO),&dwBytesRead);
SendMessage(hwnd, TB_GETBUTTONINFO, 0, (LPARAM)lpData);
ReadProcessMemory(hProc, lpData, &mtbbi, sizeof(TBBUTTONINFO), &dwBytesRead);
其中hwnd - 是工具栏句柄。这个句柄是正确的,其他消息(如TB_BUTTONCOUNT 或TB_GETBUTTON)工作正常。
因此,这段代码在 Windows XP 下可以正常工作,但是当我尝试在 Windows 7 x64 下执行它时 SendMessage 返回 -1,这意味着错误。我尝试使用GETBUTTONINFOA 而不是GETBUTTONINFO,但结果是一样的。
我做错了什么?
【问题讨论】:
-
在罗马时,表现得像个罗马人。如果你正在破解的那个程序正在运行提升,那么你也必须运行提升。如果它是 64 位进程,那么您也必须是 64 位进程。不要破解任务栏,这是不合时宜的做法。
-
从表面上看:错误的结构大小、错误的 hwnd、错误的按钮索引。也许你应该做一个完整的复制案例,包括一条有效的消息。我相信有人会调试它。
标签: c++ windows winapi visual-c++ windows-messages