获取任务栏的句柄
是否有WinAPI函数来检索任务栏的句柄?
目的是确定任务栏对接设置(ABE_LEFT,ABE_RIGHT,ABE_BOTTOM,ABE_TOP)。 SHAppBarMessage
函数需要任务栏句柄来检索停靠信息。 除非有另一种方法来确定任务栏对接设置而不需要手柄?
我知道这个方法工作正常,但我不确定它是否适用于所有Windows版本:
HWND taskBar = FindWindow("Shell_TrayWnd", NULL);
这似乎是一个文档错误。 调用SHAppBarMessage 1时,您不需要在ABM_GETTASKBARPOS的APPBARDATA结构中提供窗口句柄。
以下代码正确返回任务栏的位置(在Windows 10 x64上测试):
#include #pragma comment(lib, "Shell32.lib") #include RECT GetTaskbarPos() { APPBARDATA abd = { 0 }; abd.cbSize = sizeof( abd ); if ( !::SHAppBarMessage( ABM_GETTASKBARPOS, &abd ) ) { throw std::runtime_error( "SHAppBarMessage failed." ); } return abd.rc; }
更新:问题是真的要求对接枚举值。 那也是返回的:
#include #pragma comment(lib, "Shell32.lib") #include UINT GetTaskbarDockingEdge() { APPBARDATA abd = { 0 }; abd.cbSize = sizeof( abd ); if ( !::SHAppBarMessage( ABM_GETTASKBARPOS, &abd ) ) { throw std::runtime_error( "SHAppBarMessage failed." ); } return abd.uEdge; }
1) 如果您需要任务栏的隐藏式窗口句柄来发送此消息,那将会很尴尬。 如果你已经有了窗口句柄,你可以简单地调用GetWindowRect 。