如何获取Windows 7中“开始”按钮的句柄?

时间:2012-03-05 15:50:35

标签: c++ winapi 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 个答案:

答案 0 :(得分:8)

在Windows 7中,具有类名"Button"的开始按钮是桌面窗口的子项。您的代码假定开始按钮是名为"Shell_TrayWnd"的窗口的子项,它确实看起来像是在XP上实现任务栏和开始菜单的方式。

对于Windows 7,您希望使用以下内容:

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

虽然我认为最好通过名称搜索它,以确保你得到正确的按钮。

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

我不确定Vista如何实现其任务栏和开始菜单,但您可以使用Spy ++来查找。

说完所有这些之后,如果你能找到一种方法来实现你的目标,而不是在这些具体实施细节中徘徊,那就更好了。

答案 1 :(得分:-2)

:: FindWindow(L“Shell_TrayWnd”,NULL);

此代码适用于完整的任务栏