在Windows 7上TB_GETBUTTONINFO失败 [英] TB_GETBUTTONINFO fails on Windows 7

查看:1071
本文介绍了在Windows 7上TB_GETBUTTONINFO失败的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一些这样的代码:

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 ,但结果是一样的。

where hwnd - is a toolbar handle. This handle is correct, other messages(like TB_BUTTONCOUNT or TB_GETBUTTON) work fine. So, this code is working correctly under Windows XP, but when I try to execute it under Windows 7 x64 SendMessage returns -1, which means an error. I tried to use GETBUTTONINFOA instead of GETBUTTONINFO, but result is the same.

我做错了什么?

推荐答案

解决了。问题是 TBBUTTONINFO 结构包含指针,它在64位进程中占用双倍大小。我做了我自己的结构,用int64替换指针,并与此结构SendMessage工作正常。感谢大家的帮助。

Solved it. Problem was that TBBUTTONINFO structure contains pointers, which take double size in 64-bit processes. I made my own structure, replacing pointers with int64, and with this structure SendMessage work as expected. Thanks to everyone for help.

这篇关于在Windows 7上TB_GETBUTTONINFO失败的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆