是否有WinAPI函数来检索任务栏的句柄?
目的是确定任务栏对接设置(ABE_LEFT,ABE_RIGHT,ABE_BOTTOM,ABE_TOP)。函数SHAppBarMessage
需要任务栏句柄来检索停靠信息。除非有另一种方法来确定任务栏停靠设置而不需要句柄吗?
我知道这种方法可行,但我不确定它适用于所有Windows版本:
HWND taskBar = FindWindow("Shell_TrayWnd", NULL);
答案 0 :(得分:1)
这似乎是一个文档错误。在调用APPBARDATA 1)时,您无需在ABM_GETTASKBARPOS SHAppBarMessage结构中提供窗口句柄。
以下代码正确返回任务栏的位置(在Windows 10 x64上测试):
#include <shellapi.h>
#pragma comment(lib, "Shell32.lib")
#include <stdexcept>
RECT GetTaskbarPos() {
APPBARDATA abd = { 0 };
abd.cbSize = sizeof( abd );
if ( !::SHAppBarMessage( ABM_GETTASKBARPOS, &abd ) ) {
throw std::runtime_error( "SHAppBarMessage failed." );
}
return abd.rc;
}
更新:问题实际上是要求对接枚举值。这也是返回的:
#include <shellapi.h>
#pragma comment(lib, "Shell32.lib")
#include <stdexcept>
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即可。