You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取鼠标光标下窗口的HWND以用于UIAutomation开发

解决方法

你已经通过GetCursorPos拿到了鼠标的屏幕坐标,直接调用Win32原生API WindowFromPoint传入坐标即可获取对应位置的窗口HWND。如果需要获取更精准的子窗口句柄(比如忽略禁用、隐藏窗口),可以搭配RealChildWindowFromPoint使用。

以下是可直接运行的修改后代码:

#include <windows.h>
#include <UIAutomation.h>
#include <atlbase.h>
#include <atlcom.h>

int main()
{
    // 使用IAccessible需要先初始化COM环境
    CoInitialize(NULL);
    {
        POINT p;
        // 获取鼠标当前屏幕坐标
        GetCursorPos(&p);
        // 直接获取坐标对应的窗口HWND
        HWND hwnd = WindowFromPoint(p);
        
        // 可选替代逻辑:获取更精准的子窗口句柄
        /*
        HWND rootHwnd = WindowFromPoint(p);
        POINT clientPt = p;
        ScreenToClient(rootHwnd, &clientPt);
        HWND hwnd = RealChildWindowFromPoint(rootHwnd, clientPt);
        */

        CComPtr<IAccessible> pAcc;
        VARIANT varChild;
        if (SUCCEEDED(AccessibleObjectFromWindow(hwnd, 
            OBJID_WINDOW,IID_IAccessible, reinterpret_cast<void**>(&pAcc))))
        {
            CComBSTR bstrName, bstrValue, bstrDescription;
            varChild.vt = VT_I4;
            varChild.lVal = CHILDID_SELF;
            if (SUCCEEDED(pAcc->get_accName(varChild, &bstrName))) {
                auto name = bstrName.m_str;
                // 此处可添加名称的后续处理逻辑
            }

            if (SUCCEEDED(pAcc->get_accValue(varChild, &bstrValue))) {
                auto value = bstrValue.m_str;
                // 此处可添加值的后续处理逻辑
            }

            // 原代码此处接口调用错误,获取描述需调用get_accDescription
            if (SUCCEEDED(pAcc->get_accDescription(varChild, &bstrDescription))) {
                auto description = bstrDescription.m_str;
                // 此处可添加描述的后续处理逻辑
            }
        }
    }
    CoUninitialize();
    return 0;
}

注意事项

  • 原代码获取窗口描述的接口调用错误,重复调用了两次get_accValue,已修正为get_accDescription
  • 若返回的HWND为空,说明鼠标指向桌面空白区域,可调用GetDesktopWindow获取桌面窗口句柄兜底

内容的提问来源于stack exchange,提问作者user14881255

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 13:54:00