我需要捕捉我在键盘上键入的所有内容,然后以多种方式存储它。我更喜欢用C#编写.Net,但任何事情都会真的。 我写这个“键盘记录器”的理由很简单:
最近,我成了Peregrine游戏手套的拥有者。这是一个非常酷的东西,它允许你通过用手指做出手势来发出命令,同时,它是一个非常薄的手套,所以你可以用那只手轻轻打字。
此外,我找到了一个名为AutoHotkey的好程序,可以通过为任何操作制作宏来严重提高您的工作效率。您可以将任何键绑定到任何其他键或一系列键或命令。
问题是,你不能说它就像“我正在做的最多”和“这是我很少使用的东西”。真的,你能说出你使用更多的键,页面向下还是向下?你更频繁地使用alt + tab逃脱或布局切换(ctrl-shift或alt-shift)?我说不出来。在没有统计数据的情况下,我不知道应该自动切换哪些动作或切换到更简单的界面。
所以我想写一个程序在后台运行并记录我输入的所有内容。然后该程序将存储我的动作的第一,第二和第三顺序直方图(例如,它将存储我按下任何一个键的次数,例如输入,我按下连续两个键的次数,例如alt和then tab,多少次我按下了三个键的连续,比如ctrl,alt然后删除或者ctrl,shift然后转义)
然后,经过一段时间的工作/游戏/任何事情,我将获得有关我应该尝试绑定到该界面(手套)的哪种操作或使用AutoHotkey程序自动执行的信息,以提高与之交互的速度一台电脑。
换句话说,简单的科学实验,只是为了好玩和进步:)。
答案 0 :(得分:6)
您需要一个全局键盘处理程序。
如果这是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
答案 1 :(得分:3)
老问题但是......
在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;
}
}
}
对于那些正在寻找更强大和更清洁的东西的人,我已经创建了一个简单易用的API。你只需要这样做:
api.CreateKeyboardHook((character) => { Console.Write(character); });