0

我想获得快速启动栏的大小,但我的代码返回 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);
4

2 回答 2

1

问题出在 RB_GETBANDINFOW 的 LPARAM 上。您发送的结构的地址仅在您自己的地址空间中有效,在 Explorer 中无效。幸运的是,Explorer 检测到了这一点并优雅地失败而不是崩溃。

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

我已经在 Python 脚本中成功地使用了这种技术来自动设置快速启动的大小。

于 2012-11-07T11:51:17.217 回答
0

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

于 2012-11-07T11:44:04.363 回答