2012-03-05 2 views
5

я использую:Как получить дескриптор кнопки «Пуск» в Windows 7?

Hwnd hStart = ::FindWindow ("Shell_TrayWnd",NULL); // get HWND of taskbar first 
hStart = ::FindWindowEx (hStart, NULL,"BUTTON", NULL); // get HWND of start button 

, чтобы начать ручку кнопки. Он работает правильно в Windows XP, , но в Windows 7 ::FindWindowEx (hStart, NULL,"BUTTON", NULL) всегда возвращает 0, а GetLastError() также возвращает 0.

Почему?

+2

Я полагаю, что кнопка запуска на Windows 7 больше не имеет класс 'BUTTON', но я могу ошибаться. Вы можете проверить со Spy ++ то, что сейчас, но я настоятельно рекомендую вам не вмешиваться в основные элементы пользовательского интерфейса, такие как кнопка «Пуск». Чего вы пытаетесь достичь? –

+5

Что бы вы сделали с ручкой кнопки «Пуск», даже если у вас ее есть? – Gabe

+0

Гейб, я просто изучаю ХОК. :) – Fish

ответ

7

В Windows 7 кнопка запуска, которая имеет имя класса "Button", является дочерним элементом окна рабочего стола. В вашем коде предполагается, что кнопка запуска - это дочерний элемент окна с именем "Shell_TrayWnd", который действительно выглядит так, как панель задач и меню запуска были реализованы на XP.

для Windows-вы хотите использовать что-то вроде этого:

hStart = ::FindWindowEx(GetDesktopWindow(), NULL, "Button", NULL); 

Хотя я думаю, что было бы лучше искать его по имени, чтобы убедиться, что вы получите правую кнопку.

hStart = ::FindWindowEx(GetDesktopWindow(), NULL, "Button", "Start"); 

Я не уверен, как Vista реализует панель задач и меню «Пуск», но вы можете использовать Spy ++ для поиска.

Сказав все это, было бы намного лучше, если бы вы могли найти способ достижения своих целей, не выкапывая в таких конкретных случаях реализации.

+10

И не забывайте, что в Windows 8 все будет совершенно иначе. –

+5

@Mark Да, теперь было бы прекрасное время, чтобы убрать дом и отказаться от таких хаков –

+0

Спасибо! Я пробовал 'hWnd = :: FindWindow (« Button »,« Start »);', он работает в Windows 7, а в XP он просто возвращает NULL. Я думаю, что кнопка запуска является дочерним окном панели задач в XP, а в Windows 7 это независимое окно. :) – Fish

-2

:: FindWindow (L "Shell_TrayWnd", NULL);

этот код для полной панели задач

Смежные вопросы