最初使用MS特定的键盘日记钩子(WH_JOURNALRECORD)设置C ++应用程序后,我们发现除非在启用uiAccess的情况下以管理员身份运行,否则它在Vista上不起作用。 MSDN Question - Journaling hooks on Vista?
我们希望以友好的方式记录来自用户的键序列,该序列将在稍后的某个日期重复出现。用户按下记录按钮,显示一个带有停止按钮和记录键的对话框。
使用日记钩子的一个优点是你只能做一些按键操作。按住班次没有报告100个班次键,但是在你写了一封信时报告了使用情况。 另一个优点是您可以将焦点设置到应用程序之外的区域,比如另一个应用程序窗口,并在用户交互时记录操作。
除了使键盘捕获现有应用程序的一部分作为管理员使用uiAccess运行的单独可执行文件之外,我正在寻找关于如何记录在2K,2K3,2K8,XP,Vista的Windows上工作的击键的其他想法。
编辑:我知道只是录制任何东西都存在安全问题,显然如果你可以做这样的事情,而用户没有注意到你有典型的击键记录器用于黑客目的。 Soooooo .....
有没有办法让这个用户和他们的应用程序在同一级别(或更低级别)运行并捕获按键的日志工作?让它弹出vista安全性你确定对话框是好的,但是这个过程不能用uiAccess标记(否则它将无法与系统的其他部分正常交互)并且它将在98%的情况下由用户运行提升为管理员的权利。
答案 0 :(得分:1)
即使你可以,你可能会发现微软在下一个补丁中修复了这个bug。 Vista中的变化是故意的,并且有一种明确的方式(uiAccess == true)仍然可以做你想要的。
答案 1 :(得分:0)
我们通过使用SetWindowsHook解决了主要问题。
const HMODULE hDLL = ::GetModuleHandle(DLL_NAME);
::SetWindowsHookEx(WH_KEYBOARD_LL, myKeyboardProcCallback, hDLL, 0);
回调现在必须管理按键信息并将其转换为可用的序列 - 即在按下按下ctrl +键时不记录多个ctrl按下。