/* Capture Events */ public static IntPtr KeyboardCB(int nCode, IntPtr wParam, IntPtr LParam) { KeyMsg km = new KeyMsg(); unsafe { KBDLLHOOKSTRUCT *kp = (KBDLLHOOKSTRUCT *)LParam.ToPointer(); km.VirtualKey = (VirtualKeyShort)kp->vkCode; switch (wParam.ToInt32()) { case 260: //Console.WriteLine(km.VirtualKey.ToString() + ": Pressed - System"); km.Pressed = true; break; case (int)ButtonEvent.WM_KEYUP: //Console.WriteLine(km.VirtualKey.ToString() + ": Released"); km.Pressed = false; break; case (int)ButtonEvent.WM_KEYDOWN: //Console.WriteLine(km.VirtualKey.ToString() + ": Pressed"); km.Pressed = true; break; default: return(new IntPtr(1)); } if (km.VirtualKey == VirtualKeyShort.LMENU) { ALT = km.Pressed; } if (km.VirtualKey == VirtualKeyShort.LCONTROL) { CTRL = km.Pressed; } if (CTRL) { if ((km.VirtualKey == VirtualKeyShort.KEY_C || km.VirtualKey == VirtualKeyShort.KEY_X) && km.Pressed) { _Host.EnqueueCBMsg(); } if (ALT) { if (km.VirtualKey == VirtualKeyShort.KEY_V && km.Pressed) { _Host.SendCB(); } // HOT KEY HOST if (km.VirtualKey == _hostHK && km.Pressed) { WindowsAPI.UnhookWindowsHookEx(KEYhook); WindowsAPI.UnhookWindowsHookEx(MOUSEhook); _Host.EnqueueEventMsg(new KeyMsg(VirtualKeyShort.LMENU, false)); _Host.EnqueueEventMsg(new KeyMsg(VirtualKeyShort.LCONTROL, false)); _Host.EnqueueEventMsg(new StopComm(-1)); return(new IntPtr(1)); } for (int k = 0; k < 4; k++) { if ((km.VirtualKey == _sp[k].hk) && (km.Pressed)) { _Host.EnqueueEventMsg(new KeyMsg(VirtualKeyShort.LMENU, false)); _Host.EnqueueEventMsg(new KeyMsg(VirtualKeyShort.LCONTROL, false)); _Host.EnqueueEventMsg(new StopComm(k)); _Host.EnqueueEventMsg(new InitComm(k)); return(new IntPtr(1)); } } } } /* no hotkey identyfied , enqueing message */ _Host.EnqueueEventMsg(km); return(new IntPtr(1)); } }
public override void Update() { base.Update(); if (_obj is StopComm) { Server.State = new AuthenticatedState(); } else if (_obj is KeyMsg) { KeyMsg kMsg = (KeyMsg)_obj; INPUT[] inputs = new INPUT[1]; inputs[0].type = (uint)InputType.INPUT_KEYBOARD; inputs[0].U.ki.wVk = kMsg.VirtualKey; Console.WriteLine(kMsg.VirtualKey); Console.WriteLine(kMsg.Pressed); if (!kMsg.Pressed) { inputs[0].U.ki.dwFlags = KEYEVENTF.KEYUP; } else { inputs[0].U.ki.dwFlags = 0; } inputs[0].U.ki.time = 0; inputs[0].U.ki.dwExtraInfo = (UIntPtr)(UInt64)0; WindowsAPI.SendInput(1, inputs, System.Runtime.InteropServices.Marshal.SizeOf(inputs[0])); } else if (_obj is MouseMsg) { MouseMsg mMsg = (MouseMsg)_obj; INPUT[] inputs = new INPUT[1]; inputs[0].type = (uint)InputType.INPUT_MOUSE; inputs[0].U.mi.dx = mMsg.Dx; inputs[0].U.mi.dy = mMsg.Dy; MOUSEEVENTF dwFlags = 0; if ((mMsg.Flags & (int)MouseEventFlags.LeftButtonDown) != 0) { dwFlags |= MOUSEEVENTF.LEFTDOWN; } if ((mMsg.Flags & (int)MouseEventFlags.LeftButtonUp) != 0) { dwFlags |= MOUSEEVENTF.LEFTUP; } if ((mMsg.Flags & (int)MouseEventFlags.RightButtonDown) != 0) { dwFlags |= MOUSEEVENTF.RIGHTDOWN; } if ((mMsg.Flags & (int)MouseEventFlags.RightButtonUp) != 0) { dwFlags |= MOUSEEVENTF.RIGHTUP; } if ((mMsg.Flags & (int)MouseEventFlags.MiddleButtonDown) != 0) { dwFlags |= MOUSEEVENTF.MIDDLEDOWN; } if ((mMsg.Flags & (int)MouseEventFlags.MiddleButtonUp) != 0) { dwFlags |= MOUSEEVENTF.MIDDLEUP; } if ((mMsg.Flags & (int)MouseEventFlags.Wheel) != 0) { dwFlags |= MOUSEEVENTF.WHEEL; } if ((mMsg.Flags & (int)MouseEventFlags.HWheel) != 0) { dwFlags |= MOUSEEVENTF.HWHEEL; } if ((mMsg.Flags & (int)MouseEventFlags.MouseMoved) != 0) { dwFlags |= MOUSEEVENTF.MOVE; } inputs[0].U.mi.dwFlags = dwFlags; inputs[0].U.mi.mouseData = mMsg.MouseData; inputs[0].U.mi.time = 0; inputs[0].U.mi.dwExtraInfo = (UIntPtr)(UInt64)0; WindowsAPI.SendInput(1, inputs, System.Runtime.InteropServices.Marshal.SizeOf(inputs[0])); } }