当键盘日志记录不可用时,如何记录击键? 使用C++特定的键盘日志挂钩(WHJEJEALL RealStand)设置C++应用程序,我们发现它不运行在Vista上,除非运行为具有UIAccess的管理员。p>

当键盘日志记录不可用时,如何记录击键? 使用C++特定的键盘日志挂钩(WHJEJEALL RealStand)设置C++应用程序,我们发现它不运行在Vista上,除非运行为具有UIAccess的管理员。p>,c++,windows-vista,journaling,C++,Windows Vista,Journaling,我们希望以友好的方式记录来自用户的密钥序列,稍后将重复该序列。用户按下记录按钮,将显示一个对话框,其中包含停止按钮和记录的按键 使用日志钩子的一个优点是,你只会得到一些有作用的击键。按住shift键不会报告100个shift键,但会在您点击一个字母时报告使用情况。 另一个优点是,您可以将焦点设置到应用程序之外的区域,比如另一个应用程序窗口,并在用户交互时记录操作 除了让现有应用程序的键盘捕获部分成为一个单独的可执行文件(以管理员身份使用uiAccess运行)之外,我正在寻找其他关于如何在wind

我们希望以友好的方式记录来自用户的密钥序列,稍后将重复该序列。用户按下记录按钮,将显示一个对话框,其中包含停止按钮和记录的按键

使用日志钩子的一个优点是,你只会得到一些有作用的击键。按住shift键不会报告100个shift键,但会在您点击一个字母时报告使用情况。 另一个优点是,您可以将焦点设置到应用程序之外的区域,比如另一个应用程序窗口,并在用户交互时记录操作

除了让现有应用程序的键盘捕获部分成为一个单独的可执行文件(以管理员身份使用uiAccess运行)之外,我正在寻找其他关于如何在windows上记录2K、2K3、2K8、XP和Vista的击键的想法

编辑:我知道记录任何东西都会带来安全问题,很明显,如果你可以在用户没有注意到的情况下做这样的事情,你就可以使用典型的击键记录器进行黑客攻击。sooooo


有没有办法让这个用户和他们的应用程序以相同的级别(或更低的级别)运行并捕获击键?弹出“vista安全性”对话框可以吗,但进程不能用uiAccess标记(否则它将无法与系统的其余部分正常交互),在98%的情况下,它将由没有权限提升为管理员的用户运行。

即使可以,在下一个补丁中,您可能会发现Microsoft正在修复该漏洞。Vista中的更改是有意的,并且有一个明确的方法(uiAccess==true)仍然可以做您想做的事情。

我们使用SetWindowsHook解决了主要问题

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

回调现在必须管理击键信息并将其转换为可用的序列-即当按下ctrl+键时,不要记录多次按下ctrl键。

现有建议修复的问题是,您需要同时使用admin和uiAccess运行,在大多数情况下,这是一个用户应用程序,将无法在管理模式下运行。用户将无权这样做。