获取任务栏的句柄

是否有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 。