SetCursorPos и ​​GetCursorPos не работают на экране входа? - PullRequest
2 голосов
/ 26 декабря 2009

Когда я пытаюсь использовать SetCursorPos на экране входа в Windows Vista / 7, возвращается true, что сначала заставило меня подумать, что оно работает. Однако, когда я звоню GetCursorPos, это дает мне:

-858993460,-858993460

Есть мысли почему? Это «функция безопасности» или я использую ее неправильно? Код отлично работает на рабочем столе, не входящем в систему (то есть обычном).

Ответы [ 3 ]

4 голосов
/ 26 декабря 2009

На экране входа в систему и в окне безопасности вы не можете отправлять события мыши или клавиатуры. Это мера безопасности для Windows, чтобы предотвратить несанкционированный доступ из разных программ.

4 голосов
/ 26 декабря 2009

С MSDN :

Рабочий стол ввода должен быть текущим рабочим столом при вызове GetCursorPos. Вызовите OpenInputDesktop, чтобы определить, является ли текущий рабочий стол входным рабочим столом. Если это не так, вызовите SetThreadDesktop с HDESK, возвращенным OpenInputDesktop, чтобы переключиться на этот рабочий стол.

Эта страница (откуда я получил приведенную выше цитату), которая задает вопрос "GetCursorPos не работает, если рабочий стол заблокирован", содержит следующую информацию:

Вы не можете получить эту информацию, пока рабочий стол заблокирован. В то время как рабочий стол заблокирован, подсистема безопасности вступает во владение, и ваш рабочий стол Запрещено.

В этот момент вам придется подключиться к O / S (люди сделали это заменив GINA.dll, но вы не можете сделать это в управляемом коде и поверх то, что вы не можете сделать это в Vista, так как у нее другая модель).

Пока рабочий стол заблокирован, вам придется обходиться без курсора информация, если вы используете управляемый код.

1 голос
/ 27 декабря 2009

Альтернативное решение: Можно (но очень сложно) использовать mouse_event (что работает на экране входа в систему) вместо SetCursorPos. У меня нет времени отправлять код сейчас, но если меня спросят, я могу обновить этот ответ ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...