C# 如何录制按下的按键?

C# 如何录制按下的按键?,c#,console,C#,Console,基本上,我想记录每次按键(包括向下键/向上键和鼠标单击)以及它们发生的时间,以便我可以用它们创建一个宏 我找到了很多关于按键、WinForms或WPF的东西,但我并不真的需要GUI,我只想在处理完它之后将它转储到控制台 那么,即使我的控制台窗口没有焦点,我如何记录所有按键 样本输出: Send {q down} Sleep 98 Send {q up} Sleep 4 Send {f down} Sleep 102 Send {f up} Sleep 43 Send {a down} Slee

基本上,我想记录每次按键(包括向下键/向上键和鼠标单击)以及它们发生的时间,以便我可以用它们创建一个宏

我找到了很多关于按键、WinForms或WPF的东西,但我并不真的需要GUI,我只想在处理完它之后将它转储到控制台

那么,即使我的控制台窗口没有焦点,我如何记录所有按键


样本输出:

Send {q down}
Sleep 98
Send {q up}
Sleep 4
Send {f down}
Sleep 102
Send {f up}
Sleep 43
Send {a down}
Sleep 26
Send {s down}
Sleep 111
Send {a up}
Sleep 18
Send {s up}
Sleep 17
Send {a down}
Sleep 62
Send {space down}
Sleep 72
Send {a up}
Sleep 5
Send {space up}

目前正在使用WPF,但必须关注输入文本字段。我希望能够在游戏中记录击键,因此问题是:)

看看函数。这可以用来监视整个系统中的击键。

据我所知,为了实现这一点,您需要连接到Win32 API


这可能会帮助您入门。

只是一个建议,您应该仔细查看键盘低级挂钩,它们(大部分)在控制台和winforms之间工作。 这可能也会有所帮助:

试试这个

[DllImport("user32.dll")]
static extern IntPtr SetWindowsHookEx
    (int idHook, keyboardHookProc callback, IntPtr hInstance, uint threadId);

我也在寻找这个-找到了这个链接,它提供了一个类来完成所有的工作:)

您可以使用HwndSource.FromHwnd方法返回

HwndSource表示Win32窗口中WPFcontent的窗口

然后使用AddHook方法添加一个名为CallBackMethod的回调方法

将接收窗口的所有消息。为此,使用了以下代码:

HwndSource windowSpecificOSMessageListener = HwndSource.FromHwnd(new 
WindowInteropHelper(this).Handle);
windowSpecificOSMessageListener.AddHook(new HwndSourceHook(CallBackMethod));
在回调方法中,接收此特定窗口的所有操作系统消息

private IntPtr CallBackMethod(IntPtr hwnd,
int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
{
    // msg can be WM_KEYDOWN = 0x0100, WM_KEYUP = 0x0101 and so forth.
    // Add you code
}

这可能会有帮助:@Jesus:我想它符合键盘记录器的资格,是的。@Saher:不……那又是winforms。我所有的谷歌搜索结果都是这样出现的,但我甚至没有任何“控件”可以听。我只想在全球范围内获取所有关键事件,不管谁或什么人拥有焦点。下面是一个C#键盘记录程序示例,它至少应该让您走上正确的道路。它也是一个winforms应用程序,但不管哪个应用程序有焦点,它都使用全局钩子记录按键:@Jesus:注意Mark指定按键记录将在控制台中并用于宏。