Я хочу получить размер панели быстрого запуска, но мой код возвращает 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);
Проблема с LPARAM в RB_GETBANDINFOW. Адрес отправляемой структуры действителен только в вашем собственном адресном пространстве, а не в Explorer. К счастью, Explorer обнаруживает это и терпит неудачу вместо взрыва.
Один из способов решить эту проблему — использовать VirtualAllocEx для выделения REBARBANDINFOW в памяти Explorer, использовать WriteProcessMemory для его инициализации, отправить сообщение и, наконец, вызвать ReadProcessMemory для чтения результата.
Я успешно использовал эту технику в скрипте Python для автоматической установки размера быстрого запуска.
Вы пытаетесь получить слишком много информации. Место prbi.fMask = 32;
или же prbi.fMask = 64;
,