GetCursorPos和Privileges

时间:2012-06-24 22:20:13

标签: c++ c winapi mfc mousemove

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

如果目标窗口在管理员权限下运行,而我的应用程序在当前用户的权限下运行,我无法获取坐标,直到我的应用程序窗口超过目标。

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

为什么?

编辑:

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

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

1 个答案:

答案 0 :(得分:0)

您可以获取窗口的客户区矩形(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;