我想做一个在后台工作的应用程序并读取用户按下的所有键并将其保存在文件中。我开始在 Win 表单中编写它并使用键 Pressed 事件,但是当表单聚焦时它可以工作:/
这是另一种方法吗?我听说过 Windows 服务,但我从不使用它:/
After doing a lot of research looking for a good code to use to achieve this, I've decided to create my own C# Keylogger API. It's very simple and clean:
api.CreateKeyboardHook((character) => { Console.Write(character); });
You just need to pass a callback and the API will return the key pressed by the user, among other things like: the screen the user was in that moment. Obviously, it works in background.
More details here: https://github.com/fabriciorissetto/KeystrokeAPI
我假设您想拦截所有窗口的所有关键事件:
我不会为此推荐 C#。您需要使用 Win32/64 API,这可以完成,但您最好使用 Visual C++ / 没有辅助轮的东西。
有几种方法可以做到这一点。到目前为止,最简单的方法是为键盘事件注册一个钩子。实现基本服务并在主循环/事件处理程序中处理按键事件。您也可以在紧密的轮询循环中强制键盘状态,但这会使 CPU 哭泣。
有 1,000,001 种方法可以在没有管理员权限的情况下安装您自己的键盘驱动程序,但假设您走这条路,您将需要自己找到一个。
我严重怀疑stackoverflow上的任何人都会帮助您创建键盘记录器。您将需要深入了解 Win32 API 的内部,并且很可能需要自己弄清楚。如果你有扎实的 C 背景并不难。Windows 的“安全性”只不过是烟雾和镜子。