如何记录按键?

时间:2011-07-21 02:14:52

标签: c# console

基本上我想记录每次按键(包括keydown / keyup和鼠标点击)以及它们何时发生,以便我可以创建一个宏。

我发现了很多关于按键和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,但必须重点关注输入文本字段。当我在游戏中时,我宁愿能够记录击键,因此问题是:)

6 个答案:

答案 0 :(得分:1)

查看SetWindowsHookEx功能。这可用于监视整个系统的击键。

答案 1 :(得分:1)

据我所知,为了实现这一点,您需要挂钩到Win32 API。

project可能会帮助您入门。

答案 2 :(得分:1)

只是一个建议,你应该仔细看看键盘低级挂钩,它们(大部分)在控制台和winforms之间工作。 这可能也有一些帮助:http://blogs.msdn.com/b/toub/archive/2006/05/03/589423.aspx

答案 3 :(得分:1)

试试这个

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

答案 4 :(得分:1)

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

http://www.codeproject.com/KB/cs/CSLLKeyboardHook.aspx

答案 5 :(得分:1)

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

一个窗口,其中 HwndSource 表示Win32窗口中的WPF内容

然后AddHook方法用于添加名为 CallBackMethod 的回调方法,

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

HwndSource windowSpecificOSMessageListener = HwndSource.FromHwnd(new 
WindowInteropHelper(this).Handle);
windowSpecificOSMessageListener.AddHook(new HwndSourceHook(CallBackMethod));

在回调方法中,接收此窗口特定的所有OS消息。

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
}