public static void KeybdEvent(KeybdEventFlags evt) { switch (evt) { case KeybdEventFlags.ShiftKeyDown: keybd_event(KEYBDEVENTF_SHIFTVIRTUAL, KEYBDEVENTF_SHIFTSCANCODE, KEYBDEVENTF_KEYDOWN, 0); break; case KeybdEventFlags.ShiftKeyUp: keybd_event(KEYBDEVENTF_SHIFTVIRTUAL, KEYBDEVENTF_SHIFTSCANCODE, KEYBDEVENTF_KEYUP, 0); break; } }
private MSG SendKeyboardInput (VirtualKeys vkey, int scan, int keycode, KeybdEventFlags dw_flags, int time) { Msg message; if ((dw_flags & KeybdEventFlags.KeyUp) != 0) { bool sys_key = (key_state_table [(int) VirtualKeys.VK_MENU] & 0x80) != 0 && ((key_state_table [(int) VirtualKeys.VK_CONTROL] & 0x80) == 0); key_state_table [(int) vkey] &= unchecked ((byte) ~0x80); message = (sys_key ? Msg.WM_SYSKEYUP : Msg.WM_KEYUP); } else { if ((key_state_table [(int) vkey] & 0x80) == 0) { key_state_table [(int) vkey] ^= 0x01; } key_state_table [(int) vkey] |= 0x80; bool sys_key = (key_state_table [(int) VirtualKeys.VK_MENU] & 0x80) != 0 && ((key_state_table [(int) VirtualKeys.VK_CONTROL] & 0x80) == 0); message = (sys_key ? Msg.WM_SYSKEYDOWN : Msg.WM_KEYDOWN); } MSG msg = new MSG (); msg.message = message; msg.wParam = (IntPtr) vkey; msg.lParam = GenerateLParam (msg, keycode); return msg; }