我有一些这样的代码:
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
,但是结果是相同的。我究竟做错了什么?
最佳答案
解决了。问题在于TBBUTTONINFO
结构包含指针,在64位进程中该指针的大小是其两倍。我创建了自己的结构,将指针替换为int64,并使用此结构SendMessage正常工作。感谢大家的帮助。
关于c++ - TB_GETBUTTONINFO在Windows 7上失败,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22526991/