捕获任何类型的击键(也称为键盘记录),最好是c#.net,但任何类型都可以

我需要捕获我在键盘上键入的所有内容,然后以多种方式存储它。 我更喜欢用C#编写.Net,但任何事情都会真的。 我写这个“键盘记录器”的理由很简单:

最近我成了Peregrine游戏手套的拥有者。 这是一个非常酷的事情,它允许你通过用手指做出手势来发出命令,同时,它是一个非常薄的手套,所以你可以用那只手轻轻打字。

此外,我找到了一个名为AutoHotkey的好程序,它可以通过为任何操作制作宏来严重提高您的工作效率。 您可以将任何键绑定到任何其他键或一系列键或命令。

问题是,你不能说它就像“这就是我正在做的最多”和“这是我很少使用的东西”。 真的,你能告诉你哪些键更多,页面向下或向下? 你是否更频繁地使用alt + tab逃脱或布局切换(ctrl-shift或alt-shift)? 我说不出来。 在没有统计数据的情况下,我无法分辨哪些操作应该自动化或切换到更简单的界面。

所以我想写一个程序在后台运行并记录我输入的所有内容。 然后该程序将存储我的动作的第一,第二和第三阶段直方图(例如,它将存储我按下任何一个键的次数,例如输入,我按下两个键的连续次数,例如alt和then tab,多少次我按下一连串的三个键,比如ctrl,alt然后删除或者ctrl,shift然后转义)

然后,经过一段时间的工作/播放/无论如何,我将获得有关我应该尝试绑定到该界面(手套)的哪种操作或使用AutoHotkey程序自动执行的信息,以提高与PC交互的速度。

换句话说,简单的科学实验,只是为了好玩和进步:)

您需要一个全局键盘处理程序。

如果这是Windows,则必须使用Windows API并使用以下命令:

SetWndowsHookEx

UnhookWindowsHookEx

CallNextHookEx方法

您需要设置一个全局“挂钩”来监听键盘和鼠标事件。

我有一个C#类来执行此操作并引发.Net键盘和鼠标事件参数,但我不打算在线发布代码,因为这种类型的活动可以用于恶意手段。

我们为什么这样做? 我们将powerpoint嵌入到我们的应用程序中,但是我们不希望用户在查看它们时编辑powerpoint幻灯片,因此我们从C#应用程序中设置了一个钩子来监视并拦截鼠标和键盘事件(如果它们在powerpoint控件中)。 工作得很好,但我们必须确保:

它们在我们的应用程序中处于控制状态,我们的应用程序处于活动状态等等。一旦设置了挂钩,它就会监听/捕获包括其他应用程序在内的所有内容,因为我们取消了特定的键盘操作,我们只在需要时才想要它。

这是一个API链接。

http://msdn.microsoft.com/en-us/library/ff468842(v=VS.85).aspx

老问题但……

在Windows中,您可以使用user32.dll的API。

对于一个非常简单的键盘记录器,您可以使用方法GetAsyncKeyState()检查是否按下了ASCII表的每个字符。

控制台应用程序中编写的非常简单和愚蠢的键盘记录器的整个代码将是:

 [DllImport("user32.dll")] public static extern int GetAsyncKeyState(Int32 i); static void Main(string[] args) { while (true) { Thread.Sleep(100); for (int i = 0; i < 255; i++) { int keyState = GetAsyncKeyState(i); if (keyState == 1 || keyState == -32767) { Console.WriteLine((Keys)i); break; } } } 

KeystrokeAPI

对于那些正在寻找更强大和更清洁的东西的人,我已经创建了一个简单易用的API。 你只需要这样做:

 api.CreateKeyboardHook((character) => { Console.Write(character); }); 

更多细节: https : //github.com/fabriciorissetto/KeystrokeAPI