Как записывать нажатия клавиш, когда журналирование клавиатуры недоступно? - PullRequest
0 голосов
/ 07 января 2009

Первоначально установив приложение C ++, используя подключаемый журнал MS для клавиатуры (WH_JOURNALRECORD), мы обнаруживаем, что оно не работает в Vista, если не запущено от имени администратора с включенным uiAccess. MSDN Вопрос - ведение журнала в Vista?

Мы хотим записать последовательность клавиш пользователя дружественным способом, который будет повторен позднее. Пользователь нажимает кнопку записи, отображается диалоговое окно с кнопкой остановки и записанными клавишами.

Одним из преимуществ использования журналирующего крючка было то, что вы получали только нажатия клавиш, которые что-то делали. Удержание клавиши «Shift» не показывало 100 клавиш «Shift», но сообщало об использовании, когда вы нажимали букву. Еще одним преимуществом было то, что вы могли установить фокус на область вне приложения, скажем, в другом окне приложения, и записать действие, когда пользователь взаимодействовал.

Помимо того, что клавиатура захватывает часть существующего приложения в виде отдельного исполняемого файла, который запускается от имени администратора с помощью uiAccess, я ищу другие идеи о том, как записывать нажатия клавиш, которые работают на окнах для 2K, 2K3, 2K8, XP, Vista.

Редактировать: Я знаю, что существует проблема безопасности с простой записью чего-либо, очевидно, если бы вы могли сделать это без замечаний пользователей, у вас есть типичный регистратор нажатий клавиш для взлома. Soooooo .....

Есть ли способ заставить журналирование работать для этого пользователя и его приложений, работающих на одном уровне (или ниже), и регистрировать нажатия клавиш? если он отображается во всплывающем окне, вы уверены, что с диалоговым окном все будет в порядке, но этот процесс нельзя пометить с помощью uiAccess (иначе он не будет правильно взаимодействовать с остальной частью системы), и в 98% случаев он будет запускаться пользователями без права повышать до администратора.

Ответы [ 2 ]

1 голос
/ 08 января 2009

Даже если бы вы могли, вы, вероятно, обнаружили бы, что Microsoft исправит эту ошибку в следующем патче. Изменения в Vista были преднамеренными, и есть четкий способ (uiAccess == true) делать то, что вы хотите.

0 голосов
/ 03 февраля 2009

Мы обошли основные проблемы, используя вместо этого SetWindowsHook.

const HMODULE hDLL = ::GetModuleHandle(DLL_NAME);
::SetWindowsHookEx(WH_KEYBOARD_LL, myKeyboardProcCallback, hDLL, 0);

Функция обратного вызова теперь должна управлять информацией о нажатии клавиш и переводить ее в пригодные для использования последовательности - т.е. не записывать несколько нажатий Ctrl при нажатии на клавишу Ctrl +.

...