Как получить дескриптор кнопки «Пуск» в Windows 7? - PullRequest
5 голосов
/ 05 марта 2012

Я использую:

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 ]

8 голосов
/ 05 марта 2012

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

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

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

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

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

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

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

0 голосов
/ 03 сентября 2013

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...