C# 在远程桌面会话中处理之前处理关键事件

C# 在远程桌面会话中处理之前处理关键事件,c#,keyboard,remote-desktop,C#,Keyboard,Remote Desktop,我有一个按键监听器,它可以处理按键并执行操作。例如,CTRL+ALT+1在键侦听器中执行某个函数。当我打开远程桌面会话时,一些关键事件直接由远程桌面处理 对于我的应用程序来说,每个关键事件都必须得到处理才能正常工作,即使用户正在远程桌面会话中工作 澄清: PC1: 运行键盘钩子应用程序 运行一些应用程序 其中一个应用程序是到PC2的远程桌面会话 PC2: 这台电脑正在做什么 当我按下PC1上的一个键时,我希望能够对其进行操作,从而实现键盘挂钩应用程序。这很好,直到我的远程桌面会话有焦点为

我有一个按键监听器,它可以处理按键并执行操作。例如,CTRL+ALT+1在键侦听器中执行某个函数。当我打开远程桌面会话时,一些关键事件直接由远程桌面处理

对于我的应用程序来说,每个关键事件都必须得到处理才能正常工作,即使用户正在远程桌面会话中工作

澄清:

PC1:

  • 运行键盘钩子应用程序
  • 运行一些应用程序
  • 其中一个应用程序是到PC2的远程桌面会话
PC2:

  • 这台电脑正在做什么
当我按下PC1上的一个键时,我希望能够对其进行操作,从而实现键盘挂钩应用程序。这很好,直到我的远程桌面会话有焦点为止。在这种情况下,远程桌面直接处理“某些”键,而不将事件传递给我的键盘挂钩应用程序

是否有解决方案在关键事件发送到远程桌面之前捕获它们

到目前为止,我拥有的key hook应用程序:

    private const int WH_KEYBOARD_LL = 13;
    private const int WM_KEYDOWN = 0x0100;
    private const int WM_KEYUP = 0x0101;
    private static LowLevelKeyboardProc _proc = HookCallback;
    private static IntPtr _hookID = IntPtr.Zero;

    public static void Main()
    {
        keyMapper = new KeyMapper();

        _hookID = SetHook(_proc);
        Application.Run();
        UnhookWindowsHookEx(_hookID);
    }

    private static IntPtr SetHook(LowLevelKeyboardProc proc)
    {
        using (Process curProcess = Process.GetCurrentProcess())
        using (ProcessModule curModule = curProcess.MainModule)
        {
            return SetWindowsHookEx(WH_KEYBOARD_LL, proc,
                GetModuleHandle(curModule.ModuleName), 0);
        }
    }

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

    private static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam)
    {
        // handle key events
    }