首页 > 解决方案 > 识别 UIelement 的窗口句柄和窗口名称的问题

问题描述

目标:当用户单击该窗口的一个元素时,我正在使用库 Uiautomation.h 来检索窗口句柄 (hwnd) 和窗口名称。我需要一个纯 C 的解决方案。

示例:如果用户点击窗口计算器的按钮 8,我需要识别窗口句柄和名称,如下所示:

在此处输入图像描述

当用户单击 Windows 计算器的元素时,我没有检索到任何窗口:hwnd = 0 窗口名称 = 无

我总是检索 0 作为 hwnd。但是,当我单击窗口的标题时,我可以将 hwnd 和窗口名称检索为“计算器”。这是我的纯 C 代码的一部分:

UIA_HWND hwnd;
PWSTR win_name = NULL;
static int win_len;
POINT pt;
IUIAutomation *pAutomation = NULL;
IUIAutomationElement *element = NULL;

CoInitialize(NULL);
EXTERN_C const CLSID CLSID_CUIAutomation;
EXTERN_C const IID IID_IUIAutomation;

HRESULT hr = CoCreateInstance(&CLSID_CUIAutomation,NULL, CLSCTX_INPROC_SERVER,&IID_IUIAutomation,(void**)&pAutomation);

GetCursorPos(&pt);
hr = IUIAutomation_ElementFromPoint(pAutomation, pt, &element);
if(SUCCEEDED(hr) && element != NULL){
  IUIAutomationElement_get_CurrentNativeWindowHandle(element,&hwnd);
  win_len = GetWindowTextLengthW(hwnd);
  if(win_len > 0) {     
      win_name = (PWSTR) malloc(sizeof(wchar_t) * win_len + 1);
      GetWindowTextW(hwnd, win_name, win_len + 1);
  }
}

我也使用了这个函数hwnd = GetForegroundWindow();,但我仍然得到相同的值 0。有人能知道我做错了什么吗?

标签: ccomui-automation

解决方案


推荐阅读