Как получить размер панели быстрого запуска в Windows XP?

Я хочу получить размер панели быстрого запуска, но мой код возвращает 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

Решение

Проблема с LPARAM в RB_GETBANDINFOW. Адрес отправляемой структуры действителен только в вашем собственном адресном пространстве, а не в Explorer. К счастью, Explorer обнаруживает это и терпит неудачу вместо взрыва.

Один из способов решить эту проблему — использовать VirtualAllocEx для выделения REBARBANDINFOW в памяти Explorer, использовать WriteProcessMemory для его инициализации, отправить сообщение и, наконец, вызвать ReadProcessMemory для чтения результата.

Я успешно использовал эту технику в скрипте Python для автоматической установки размера быстрого запуска.

1

Другие решения

Вы пытаетесь получить слишком много информации. Место prbi.fMask = 32; или же prbi.fMask = 64;,

0

По вопросам рекламы [email protected]