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はこれを検出し、爆発する代わりに正常に失敗します。

これを解決する1つの方法は、VirtualAllocExを使用してエクスプローラのメモリにREBARBANDINFOWを割り当て、WriteProcessMemoryを使用して初期化し、メッセージを送信し、最後にReadProcessMemoryを呼び出して結果を読み取ることです。

Pythonスクリプトでこの手法を使用して、クイック起動のサイズを自動的に設定しました。

于 2012-11-07T11:51:17.217 に答える
0

あまりにも多くの情報を取得しようとしています。prbi.fMask = 32;またはを配置しprbi.fMask = 64;ます。

于 2012-11-07T11:44:04.363 に答える