C++ AccessibleObjectFromPoint()返回不正确的对象
我正在创建一个程序,该程序使用AccessibleObjectFromPoint()通过鼠标光标选择对象,但它会产生错误的结果 以下是我的示例代码:C++ AccessibleObjectFromPoint()返回不正确的对象,c++,winapi,com,C++,Winapi,Com,我正在创建一个程序,该程序使用AccessibleObjectFromPoint()通过鼠标光标选择对象,但它会产生错误的结果 以下是我的示例代码: #include <windows.h> #include <oleacc.h> #include <cstdio> #include <iostream> #include <string> #pragma comment(lib, "oleacc.lib") HRESULT Se
#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;
}
#包括
#包括
#包括
#包括
#包括
#pragma注释(lib,“oleacc.lib”)
HRESULT SelectItemAtPoint(点-点)
{
变异变异体;
IAccessible*pAcc;
HRESULT hr=可访问对象frompoint(point、pAcc和varItem);
如果((hr==S_正常))
{
hr=pAcc->accSelect((SELFLAG_TAKEFOCUS | SELFLAG_TAKESELECTION),变量);
VariantClear(&varItem);
pAcc->Release();
}
返回人力资源;
}
int main()
{
共初始化(空);
while(true)
{
点pt;
GetCursorPos(&pt);
printf(“x:%d y:%d”,第x部分,第y部分);
选择项目点(pt);
睡眠(50);
}
返回0;
}
在图像中,我在虚幻引擎上悬停,但程序选择了MATLAB。
我还检查了光标点。
有没有办法解决这个问题
编辑:我正在使用Windows 10 Home和Visual Studio 2017,引自Microsoft文档: Microsoft活动辅助功能不使用逻辑坐标。这个 以下方法和函数返回物理坐标或 把它们作为参数
IAccessible::accHitTest
IAccessible::accLocation
AccessibleObjectFromPoint
AccessibleObjectFromPoint
以获取
光标
解决方案分为两部分:
- 使客户端应用程序“dpi感知”。要执行此操作,请致电
启动时的功能。此函数使整个 进程dpi感知,意味着属于该进程的所有窗口 没有标度SetProcessDPIAware
- 使用支持dpi的功能。例如,获得
光标坐标,调用
函数。不要使用getPhysicalCalcuorSorpos
;它在支持dpi的应用程序中的行为尚未定义GetCursorPos
物理点的物理坐标
和
逻辑物理点
功能
因此,将
GetCursorPos()
更改为GetPhysicalCalcuorSorpos()
解决了我的问题。在调用AccessibleObjectFromPoint()
之前,您可能没有将光标坐标转换为屏幕坐标。GetCursorPos()
是否已经在屏幕坐标中?也许UnrealEngine不想玩球。或者这可能是因为DPI缩放。在DPI缩放中,如何修复它?我在调用函数时注意到有一个偏移量。@DavidHeffernan我终于找到了解决方法。感谢DPI缩放提示。