GetCursorPos и привилегии
У меня есть метод получения позиции курсора и получения координаты в конкретном окне, используя GetCursorPos() и ScreenToClient(). Все работает отлично, кроме странной вещи.
Если целевое окно запускается с правами администратора, а мое приложение запускается с правами текущего пользователя, я не могу получить координаты, пока окно моего приложения не окажется над целью.
То же самое происходит, если я запускаю свое приложение от имени администратора, а цель запускается под текущим пользователем.
Зачем?
Редактировать:
Проблема не в том, чтобы получить координату курсора, а в том, чтобы получить координату, когда привилегии окна и моего приложения различны.
Обнаружена проблема (не решена): причина - "Изоляция привилегий пользовательского интерфейса (UIPI)"
1 ответ
Вы можете получить прямоугольник клиентской области окна (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;