【发布时间】:2019-08-21 15:25:45
【问题描述】:
我正在创建一个程序,该程序使用 AccessibleObjectFromPoint() 通过鼠标光标选择对象,但是它会产生不正确的结果。
I hovered the mouse at this icon but it selects a different icon instead.
这是我的示例代码:
#include <windows.h>
#include <oleacc.h>
#include <cstdio>
#include <iostream>
#include <string>
#pragma comment(lib, "oleacc.lib")
HRESULT SelectItemAtPoint(POINT point)
{
VARIANT varItem;
IAccessible* pAcc;
HRESULT hr = AccessibleObjectFromPoint(point, &pAcc, &varItem);
if ((hr == S_OK))
{
hr = pAcc->accSelect((SELFLAG_TAKEFOCUS | SELFLAG_TAKESELECTION), varItem);
VariantClear(&varItem);
pAcc->Release();
}
return hr;
}
int main()
{
CoInitialize(NULL);
while (true)
{
POINT pt;
GetCursorPos(&pt);
printf("x: %d y: %d", pt.x, pt.y);
SelectItemAtPoint(pt);
Sleep(50);
}
return 0;
}
在图像中,我将鼠标悬停在虚幻引擎上,但程序选择了 MATLAB。 我还检查了光标点。 有什么办法可以解决这个问题?
编辑:我正在使用带有 Visual Studio 2017 的 Windows 10 Home
【问题讨论】:
-
您可能错过了在调用
AccessibleObjectFromPoint()之前将光标坐标转换为屏幕坐标。 -
GetCursorPos()不是已经在屏幕坐标中了吗? -
也许 UnrealEngine 不想打球。或者这可能是因为 DPI 缩放。
-
在 DPI 缩放中,如何解决?我注意到调用函数时有一个偏移量。
-
@DavidHeffernan 我终于想出了如何解决它。感谢您提供 DPI 缩放提示。