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