private static int KeyboardHookProc(int nCode, int wParam, IntPtr lParam) {
if (nCode >= 0) {
var khs = (User32.KeyboardHookStruct)Marshal.PtrToStructure(lParam, typeof(User32.KeyboardHookStruct));
switch (wParam) {
case User32.WM_KEYDOWN:
case User32.WM_SYSKEYDOWN:
if (Subscribed.Any(x => x.RaiseKeyDown(khs.VirtualKeyCode))) {
return -1;
}
break;
case User32.WM_KEYUP:
case User32.WM_SYSKEYUP:
if (Subscribed.Any(x => x.RaiseKeyUp(khs.VirtualKeyCode))) {
return -1;
}
break;
}
}
return User32.CallNextHookEx(_hookHandle, nCode, wParam, lParam);
}