C#后台处理时的关键操作

C#后台处理时的关键操作,c#,C#,我制作了一个表单,添加了几个按钮。 但是,您希望按ctrl+NumpadKey1来执行按钮所能执行的操作。 因此,我需要在后台访问程序 有人有什么想法吗? 我已经得到了表单位于前面时的代码。尝试使用全局钩子。解释如何做到这一点。简而言之,您必须设置钩子: [DllImport(“user32.dll”, CharSet = CharSet.Auto, SetLastError = true)] private static extern IntPtr SetWindowsHookEx(int i

我制作了一个表单,添加了几个按钮。 但是,您希望按ctrl+NumpadKey1来执行按钮所能执行的操作。 因此,我需要在后台访问程序

有人有什么想法吗? 我已经得到了表单位于前面时的代码。

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

[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);
}

请在你被否决之前进行编辑或删除。如果问题得到解决,我将删除,如果问题没有解决,我将进行编辑,谢谢@RustamUmarov