C++ 如何在Windows 7中获得“开始”按钮的句柄?

C++ 如何在Windows 7中获得“开始”按钮的句柄?,c++,winapi,windows-7,C++,Winapi,Windows 7,我使用: 获取开始按钮的句柄。它在Windows XP上正常运行, 但在Windows7中,::FindWindowEx(hStart,NULL,“BUTTON”,NULL)始终返回0,GetLastError()也返回0 为什么会这样?在Windows 7中,具有类名的“开始”按钮是桌面窗口的子窗口。您的代码假定“开始”按钮是名为“”Shell\u TrayWnd”的窗口的子窗口,该窗口看起来确实是XP上实现任务栏和开始菜单的方式 对于Windows 7,您希望使用如下内容: Hwnd hSt

我使用:

获取开始按钮的句柄。它在Windows XP上正常运行, 但在Windows7中,
::FindWindowEx(hStart,NULL,“BUTTON”,NULL)
始终返回0,
GetLastError()
也返回0


为什么会这样?

在Windows 7中,具有类名的“开始”按钮是桌面窗口的子窗口。您的代码假定“开始”按钮是名为“
”Shell\u TrayWnd”
的窗口的子窗口,该窗口看起来确实是XP上实现任务栏和开始菜单的方式

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

Hwnd hStart = ::FindWindow ("Shell_TrayWnd",NULL);  // get HWND of taskbar first
hStart = ::FindWindowEx (hStart, NULL,"BUTTON", NULL); // get HWND of start button
虽然我认为最好是按名字搜索,以确保你得到了正确的按钮

hStart = ::FindWindowEx(GetDesktopWindow(), NULL, "Button", NULL);
我不确定Vista是如何实现其任务栏和开始菜单的,但您可以使用Spy++来找到答案

说了所有这些,如果你能找到一种实现目标的方法,而不涉及这些具体实施细节,那就更好了。

::FindWindow(L“Shell_TrayWnd”,NULL)


此代码用于完整的任务栏

我想Windows 7上的“开始”按钮不再具有class
按钮
,但我可能错了。您可以使用Spy++检查它现在是什么,但我强烈建议您不要弄乱基本的UI元素,如开始按钮。你想达到什么目的?如果你有一个启动按钮手柄,你会怎么做?加布,我只是在学习挂钩。:)作为参考,Windows 8预览版上根本没有“开始”按钮:),而且不要忘记,在Windows 8中,一切都将完全不同。@标记“是”,现在将是清理房间和放弃此类黑客手帕的最佳时机!我试过了
hWnd=::FindWindow(“按钮”,“开始”),它在Windows 7中工作,而在XP中它只返回NULL。我猜开始按钮在XP中确实是任务栏的子窗口,而在Windows 7中它是一个独立窗口。:)这在Windows 10上似乎不起作用,你知道如何使它再次相关吗?@YoavFeuerstein使用WinSpy或Spy++之类的工具。看起来它可能有标题
“Start”
和类名
“Start”
hStart = ::FindWindowEx(GetDesktopWindow(), NULL, "Button", "Start");