我想快速启动条形码,但我的代码返回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);
答案 0 :(得分:1)
问题在于RB_GETBANDINFOW的LPARAM。您发送的结构的地址仅在您自己的地址空间中有效,而不是在Explorer的地址空间中有效。幸运的是,资源管理器检测到这一点并且优雅地失败而不是炸毁。
解决此问题的一种方法是使用VirtualAllocEx在Explorer的内存中分配REBARBANDINFOW,使用WriteProcessMemory初始化它,发送消息,最后调用ReadProcessMemory来读取结果。
我在Python脚本中成功使用了这种技术来自动设置Quick Launch的大小。
答案 1 :(得分:0)
您正试图获取太多信息。放置prbi.fMask = 32;
或prbi.fMask = 64;
。