我有一个关键的监听器来处理按键并对其进行操作。例如,CTRL + ALT + 1在键监听器中执行某个功能。当我打开远程桌面会话时,一些关键事件将由远程桌面直接处理。
对于我的应用程序来说,即使用户正在远程桌面会话中工作,每个关键事件都要处理也很重要。
澄清:
PC1:
PC2:
当我按下PC1上的某个键时,我希望能够对其进行操作,因此,键盘挂钩应用程序。这工作正常,直到我的远程桌面会话具有焦点。在这种情况下,“某些”键由远程桌面直接处理,而不将事件传递给我的键盘钩子应用程序。
是否有解决方案在将关键事件发送到远程桌面之前捕获它们?
我到目前为止的关键钩子应用程序:
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
}