c - 识别 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。有人能知道我做错了什么吗?
解决方案
推荐阅读
- python-3.x - 找不到程序时关闭 cmd 的批处理文件
- firebase - 不受支持的 Firebase Functions 服务?
- laravel - 致命:无法创建临时文件'/home/vagrant/ProjectsTest/.git/objects/pack/tmp_pack_XXXXXX':权限被拒绝
- php - 如何将 CSV 文件流式传输到 JSON 并在 Laravel 5.8 中查看
- r - ggplot条形图将多个组与参考组进行比较
- xml - xml输出格式不合理的原因
- javascript - 角度通用和翻译
- r - 在R中的数据表中按降序重新标记集群(列)
- oracle - 存储过程中的 REGEXP_SUBSTR 函数
- matlab - 有没有办法优化我的代码以从数组转换为二维坐标系?