如何在Windows XP中快速启动条形图?

时间:2012-11-07 11:22:49

标签: c++ winapi user32

我想快速启动条形码,但我的代码返回false,问题出在哪里?

REBARBANDINFOW prbi;
memset(&prbi, 0, sizeof(REBARBANDINFOW));

prbi.cbSize = sizeof(REBARBANDINFOW);
prbi.fMask = 892;

HWND hWndTray = ::FindWindow(L"Shell_TrayWnd", 0);
HWND hRebar = ::FindWindowEx(hWndTray, NULL, L"ReBarWindow32", 0);
int i = ::SendMessage(hRebar, RB_GETBANDINFOW, 0, (LPARAM)(LPREBARBANDINFOW)&prbi);

2 个答案:

答案 0 :(得分:1)

问题在于RB_GETBANDINFOW的LPARAM。您发送的结构的地址仅在您自己的地址空间中有效,而不是在Explorer的地址空间中有效。幸运的是,资源管理器检测到这一点并且优雅地失败而不是炸毁。

解决此问题的一种方法是使用VirtualAllocEx在Explorer的内存中分配REBARBANDINFOW,使用WriteProcessMemory初始化它,发送消息,最后调用ReadProcessMemory来读取结果。

我在Python脚本中成功使用了这种技术来自动设置Quick Launch的大小。

答案 1 :(得分:0)

您正试图获取太多信息。放置prbi.fMask = 32;prbi.fMask = 64;