0

最初使用 MS 特定的键盘日志挂钩 (WH_JOURNALRECORD) 设置 C++ 应用程序后,我们发现它无法在 Vista 上运行,除非以管理员身份运行并启用 uiAccess。MSDN 问题 - Vista 上的日志挂钩?

我们希望以一种友好的方式记录来自用户的键序列,该序列将在以后重复。用户按下录制按钮,将显示一个带有停止按钮和录制键的对话框。

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

除了将现有应用程序的键盘捕获部分作为单独的可执行文件以管理员身份使用 uiAccess 运行之外,我还在寻求其他想法,了解如何记录在 2K、2K3、2K8、XP、Vista 的 Windows 上工作的击键。

编辑:我知道仅记录任何内容都会存在安全问题,显然,如果您可以在没有用户注意到的情况下执行此类操作,则您拥有用于黑客攻击的典型击键记录器。呜呜呜……

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

4

2 回答 2

1

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

于 2009-01-08T12:26:53.613 回答
0

我们已经通过使用 SetWindowsHook 解决了主要问题。

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

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

于 2009-02-03T07:26:03.940 回答