我用:
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。
为什么?
答案 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);
此代码适用于完整的任务栏