Ist*_*tel 7 .net c# keystroke capture keystrokes
我需要捕获我在键盘上键入的所有内容,然后以多种方式存储它.我更喜欢用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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
对于那些正在寻找更健壮和更干净的东西的人,我创建了一个 API,使它变得容易。你只需要这样做:
api.CreateKeyboardHook((character) => { Console.Write(character); });
Run Code Online (Sandbox Code Playgroud)
更多细节在这里:https : //github.com/fabriciorissetto/KeystrokeAPI