获取任务栏的句柄

时间:2016-05-15 23:49:30

标签: c winapi

是否有WinAPI函数来检索任务栏的句柄?

目的是确定任务栏对接设置(ABE_LEFT,ABE_RIGHT,ABE_BOTTOM,ABE_TOP)。函数SHAppBarMessage需要任务栏句柄来检索停靠信息。除非有另一种方法来确定任务栏停靠设置而不需要句柄吗?

我知道这种方法可行,但我不确定它适用于所有Windows版本:

HWND taskBar = FindWindow("Shell_TrayWnd", NULL);

1 个答案:

答案 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即可。