c++ - 获取光标位置和权限

标签 c++ c winapi mfc mousemove

我有一个方法,可以使用 GetCursorPos() 和 ScreenToClient() 检索光标位置并获取特定窗口上的坐标。 除了一件奇怪的事情之外,一切都很完美。

如果目标窗口在管理员权限下运行,而我的应用程序在当前用户权限下运行,则在我的应用程序窗口位于目标上方之前我无法获取坐标。

如果我以管理员身份运行应用程序并且目标在当前用户下运行,也会发生同样的情况。

为什么?

编辑:

问题不是获取光标的坐标,而是当窗口的权限和我的应用程序不同时获取坐标。

发现问题(未解决):原因是“用户界面权限隔离 (UIPI)”

最佳答案

你可以获取窗口的客户区矩形(GetClientRect)并用鼠标位置减去客户区的左上角位置,它与ScreenToClient()基本相同

代码:

POINT screen_cursor_pos;
RECT client_rect;
int cursor_x,cursor_y;

GetCursorPos(&screen_cursor_pos);
GetClientRect(hwnd,&client_rect);

cursor_x=screen_cursor_pos.x-client_rect.left;
cursor_y=screen_cursor_pos.y-client_rect.top;

关于c++ - 获取光标位置和权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11181659/

相关文章:

python - 地址清理 Boost.Python 模块

c++ - 编译器生成的复制构造函数的线程安全

c++如何使用新的标准输入和标准输出启动进程

c - 从单链表打印结构数据

c - 如何在 WinLDAP 中使用 ldap_sasl_bind?

c++ - 在 Windows 10 上尝试获取默认 Web 浏览器路径失败

security - 如果从 Windows 8 RTM 中设置的提升进程和非默认浏览器运行,ShellExecute 会失败

c++ - 在可变参数模板中使用大括号括起来的初始值设定项列表?

c - 如何将recvfrom()中的缓冲区值保存到数组中?

c# - FlashWindowEx FLASHW_STOP 仍然保持任务栏彩色