C#在后台进程时的关键动作

时间:2016-12-08 06:54:07

标签: c#

我制作了一个表格并添加了几个按钮。 但是想要按ctrl + NumpadKey1来完成按钮的功能。 因此,我需要在后台访问该程序。

有没有人有任何想法? 我已经获得了表单在前面的代码。

1 个答案:

答案 0 :(得分:1)

尝试使用全局挂钩。 This article解释了如何做到这一点。简而言之,你必须设置钩子:

[DllImport(“user32.dll”, CharSet = CharSet.Auto, SetLastError = true)]
private static extern IntPtr SetWindowsHookEx(int idHook, LowLevelKeyboardProc lpfn, IntPtr hMod, uint dwThreadId);

最后你必须解开:

[DllImport(“user32.dll”, CharSet = CharSet.Auto, SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool UnhookWindowsHookEx(IntPtr hhk);

这就是你可以创建处理程序的方法:

private static LowLevelKeyboardProc _proc = HookCallback;

private delegate IntPtr LowLevelKeyboardProc(int nCode, IntPtr wParam, IntPtr lParam);

private static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam) {
    if (nCode >= 0 && wParam == (IntPtr)WM_KEYDOWN) {
        int vkCode = Marshal.ReadInt32(lParam);
        Console.WriteLine((Keys)vkCode);
    }

    return CallNextHookEx(_hookID, nCode, wParam, lParam);
}