private void SendKeyUpdate(KeySym keysym, bool pressed) { if (this.client != null && this.AllowInput) { this.client.SendKeyEvent(keysym, pressed); } }
public static int XLookupString(ref XKeyEvent event_struct, byte[] buf, out KeySym keysym, IntPtr status) { unsafe { fixed(byte *p = buf) { return(XLookupString(ref event_struct, (IntPtr)p, buf.Length, out keysym, status)); } } }
protected virtual void RfbKbdAddEventHook(byte down, KeySym keySym, IntPtr cl) { RfbClientRecPtr client = new RfbClientRecPtr(cl, false); this.logger.LogInformation($"Pressed button {keySym}"); this.keyboard?.HandleKeyEvent( this, new KeyChangedEventArgs( keysym: keySym, pressed: down == 1)); }
public void SendKeyEvent(KeySym keysym, bool pressed) { var p = new byte[8]; p[0] = (byte)4; p[1] = (byte)(pressed ? 1 : 0); VncUtility.EncodeUInt32BE(p, 4, (uint)keysym); if (this.IsConnected) { this.c.Send(p); } }
/// <summary> /// Converts a <see cref="KeySym"/> value to its <see cref="char"/> equivalent. /// </summary> /// <param name="key"> /// The <see cref="KeySym"/> value to convert. /// </param> /// <returns> /// The equivalent <see cref="char"/> value. /// </returns> public static char ToChar(KeySym key) { if (key >= KeySym.Space && key <= KeySym.AsciiTilde) { return((char)(byte)key); } // Unicode values have the 0x1000000 flag set if (((uint)key & 0x1000000) == 0x1000000) { return((char)((ushort)key & 0xFFFF)); } throw new ArgumentOutOfRangeException(nameof(key)); }
public static bool IsPrivateKeypadKey(KeySym keysym) => (keysym >= (KeySym)(0x11000000)) && (keysym <= (KeySym)(0x1100FFFF));
public static bool IsKeypadKey(KeySym keysym) => (keysym >= (KeySym)(XK_KP_Space)) && (keysym <= (KeySym)(XK_KP_Equal));
/// <summary> /// Determines whether a <see cref="KeySym"/> value represents an ASCII character. /// </summary> /// <param name="key"> /// The <see cref="KeySym"/> key for which to determine whether it is an ASCII character. /// </param> /// <returns> /// <see langword="true"/> if <paramref name="key"/> represents an ASCII character; /// otherwise, <see langword="false"/>. /// </returns> public static bool IsAscii(KeySym key) { return(key >= KeySym.Space && key <= KeySym.AsciiTilde); }
public static bool IsModifierKey(KeySym keysym) => ((keysym >= (KeySym)(XK_Shift_L)) && (keysym <= (KeySym)(XK_Hyper_R))) || ((keysym >= (KeySym)(XK_ISO_Lock)) && (keysym <= (KeySym)(XK_ISO_Level5_Lock))) || (keysym == (KeySym)(XK_Mode_switch)) || (keysym == (KeySym)(XK_Num_Lock));
public static bool IsFunctionKey(KeySym keysym) => (keysym >= (KeySym)(XK_F1)) && (keysym <= (KeySym)(XK_F35));
public static extern KeyCode XKeysymToKeycode(IntPtr display, KeySym keysym);
public static extern uint XKeysymToKeycode(Display display, KeySym keysym);
public static extern string XKeysymToString(KeySym keysym);
/// <summary>A /// Callback function for mouse updates. /// </summary> /// <param name="sender">Sender</param> /// <param name="e">EventArgs</param> public void OnKeyboardUpdate(object sender, KeyChangedEventArgs e) { KeySym newState = e.Keysym; /* 키보드 모든 키 */ if (e.Pressed) { switch (newState) { // 상수 : bvk파라메터 case KeySym.A: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.B: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.C: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.D: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.E: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.F: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.G: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.H: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.I: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.J: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.K: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.L: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.M: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.N: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.O: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.P: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.Q: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.R: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.S: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.T: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.U: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.V: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.W: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.X: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.Y: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.Z: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.a: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.b: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.c: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.d: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.e: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.f: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.g: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.h: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.i: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.j: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.k: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.l: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.m: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.n: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.o: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.p: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.q: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.r: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.s: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.t: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.u: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.v: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.w: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.x: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.y: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.z: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.Backspace: User32.Keybd_event(8, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.Tab: User32.Keybd_event(9, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.LineFeed: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.Clear: User32.Keybd_event(12, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.Return: User32.Keybd_event(13, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.Pause: User32.Keybd_event(19, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.ScrollLock: User32.Keybd_event(145, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.SysReq: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.Escape: User32.Keybd_event(27, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.Delete: User32.Keybd_event(46, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.Home: User32.Keybd_event(36, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.Left: User32.Keybd_event(37, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.Up: User32.Keybd_event(38, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.Right: User32.Keybd_event(39, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.Down: User32.Keybd_event(40, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.PageUp: User32.Keybd_event(33, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.PageDown: User32.Keybd_event(34, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.End: User32.Keybd_event(35, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.Begin: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.Select: User32.Keybd_event(41, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.Print: User32.Keybd_event(44, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.Execute: User32.Keybd_event(43, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.Insert: User32.Keybd_event(45, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.Undo: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.Redo: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.Menu: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.Find: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.Cancel: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.Help: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.Break: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.ModeSwitch: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.Num_Lock: User32.Keybd_event(144, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.NumPadSpace: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.NumPadTab: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.NumPadEnter: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.NumPadF1: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.NumPadF2: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.NumPadF3: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.NumPadF4: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.NumPadHome: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.NumPadLeft: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.NumPadUp: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.NumPadRight: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.NumPadDown: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.NumPadPageUp: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.NumPadPageDown: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.NumPadEnd: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.NumPadBegin: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.NumPadInsert: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.NumPadDelete: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.NumPadEqual: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.NumPadMultiply: User32.Keybd_event(106, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.NumPadAdd: User32.Keybd_event(107, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.NumPadSeparator: User32.Keybd_event(108, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.NumPadSubtract: User32.Keybd_event(109, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.NumPadDecimal: User32.Keybd_event(110, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.NumPadDivide: User32.Keybd_event(111, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.NumPad0: User32.Keybd_event(96, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.NumPad1: User32.Keybd_event(97, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.NumPad2: User32.Keybd_event(98, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.NumPad3: User32.Keybd_event(99, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.NumPad4: User32.Keybd_event(100, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.NumPad5: User32.Keybd_event(101, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.NumPad6: User32.Keybd_event(102, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.NumPad7: User32.Keybd_event(103, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.NumPad8: User32.Keybd_event(104, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.NumPad9: User32.Keybd_event(105, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.F1: User32.Keybd_event(112, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.F2: User32.Keybd_event(113, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.F3: User32.Keybd_event(114, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.F4: User32.Keybd_event(115, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.F5: User32.Keybd_event(116, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.F6: User32.Keybd_event(117, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.F7: User32.Keybd_event(118, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.F8: User32.Keybd_event(119, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.F9: User32.Keybd_event(120, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.F10: User32.Keybd_event(121, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.F11: User32.Keybd_event(122, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.F12: User32.Keybd_event(123, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.F13: User32.Keybd_event(124, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.F14: User32.Keybd_event(125, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.F15: User32.Keybd_event(126, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.F16: User32.Keybd_event(127, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.F17: User32.Keybd_event(128, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.F18: User32.Keybd_event(129, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.F19: User32.Keybd_event(130, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.F20: User32.Keybd_event(131, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.F21: User32.Keybd_event(132, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.F22: User32.Keybd_event(133, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.F23: User32.Keybd_event(134, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.F24: User32.Keybd_event(135, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.ShiftLeft: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.ShiftRight: // 왼쪽 쉬프트 User32.Keybd_event(16, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.ControlLeft: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.ControlRight: // 왼쪽 컨트롤 User32.Keybd_event(17, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.CapsLock: User32.Keybd_event(20, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.ShiftLock: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.MetaLeft: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.MetaRight: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.AltLeft: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.AltRight: User32.Keybd_event(18, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.SuperLeft: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.SuperRight: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.HyperLeft: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.HyperRight: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.Space: User32.Keybd_event(32, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.Exclamation: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.Quote: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.NumberSign: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.Dollar: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.Percent: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.Ampersand: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.Apostrophe: User32.Keybd_event(222, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.Plus: User32.Keybd_event(187, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.Comma: User32.Keybd_event(188, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.Minus: User32.Keybd_event(189, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.Period: User32.Keybd_event(190, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.Slash: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.D0: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.D1: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.D2: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.D3: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.D4: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.D5: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.D6: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.D7: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.D8: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.D9: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.Colon: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.Semicolon: User32.Keybd_event(186, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.Less: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.Equal: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.Greater: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.Question: User32.Keybd_event(191, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.At: User32.Keybd_event((uint)newState, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.Hangul: User32.Keybd_event(21, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.Hanja: User32.Keybd_event(25, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.AsciiTilde: //물결표시 User32.Keybd_event(192, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.BracketLeft: //대괄호 열기 User32.Keybd_event(219, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.Bracketright: //대괄호 닫기 User32.Keybd_event(221, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; case KeySym.Backslash: //역슬래시 User32.Keybd_event(220, 0, (int)WinApiKeyEventFlags.KEYDOWN, 0); break; } } else { switch (newState) //keyup { case KeySym.ShiftRight: User32.Keybd_event(16, 0, (int)(WinApiKeyEventFlags.KEYUP | WinApiKeyEventFlags.KEYDOWN), 0); break; case KeySym.ControlRight: User32.Keybd_event(17, 0, (int)(WinApiKeyEventFlags.KEYUP | WinApiKeyEventFlags.KEYDOWN), 0); break; case KeySym.AltRight: User32.Keybd_event(18, 0, (int)(WinApiKeyEventFlags.KEYUP | WinApiKeyEventFlags.KEYDOWN), 0); break; case KeySym.CapsLock: User32.Keybd_event(20, 0, (int)(WinApiKeyEventFlags.KEYUP | WinApiKeyEventFlags.KEYDOWN), 0); break; } } }
public static bool IsCursorKey(KeySym keysym) => (keysym >= (KeySym)(XK_Home)) && (keysym < (KeySym)(XK_Select));
public static bool IsPFKey(KeySym keysym) => (keysym >= (KeySym)(XK_KP_F1)) && (keysym <= (KeySym)(XK_KP_F4));
public RCode HandleSystemEvent() { while (Xlib.XPending(display) > 0) { Xlib.XNextEvent(display, ev); XAnyEvent xevent = Marshal.PtrToStructure <XAnyEvent>(ev); switch (xevent.type) { case (int)Event.ClientMessage: XClientMessageEvent xClientMessageEvent = Marshal.PtrToStructure <XClientMessageEvent>(ev); if (xClientMessageEvent.data == (IntPtr)deleteWindowMessage) { PixelGameEngine.Instance.Terminate(); } break; case (int)Event.KeyPress: case (int)Event.KeyRelease: XKeyEvent xKeyEvent = Marshal.PtrToStructure <XKeyEvent>(ev); KeySym sym = XlibExt.XLookupKeysym(new XKeyEvent[] { xKeyEvent }, 0); pge.Input.UpdateKeyState((int)mapKeys[(long)sym], xevent.type == (int)Event.KeyPress); break; case (int)Event.ButtonPress: case (int)Event.ButtonRelease: XButtonEvent xButtonEvent = Marshal.PtrToStructure <XButtonEvent>(ev); bool pressed = xevent.type == (int)Event.ButtonPress; switch (xButtonEvent.button) { case 1: case 2: case 3: pge.Input.UpdateMouseState((int)xButtonEvent.button - 1, pressed); break; case 4: pge.Input.UpdateMouseWheel(120); break; case 5: pge.Input.UpdateMouseWheel(-120); break; case 6: case 7: case 8: case 9: pge.Input.UpdateMouseState((int)xButtonEvent.button - 3, pressed); break; } break; case (int)Event.MotionNotify: XMotionEvent xMotionEvent = Marshal.PtrToStructure <XMotionEvent>(ev); pge.Input.UpdateMouse(xMotionEvent.x, xMotionEvent.y); break; case (int)Event.EnterNotify: pge.Input.UpdateMouseFocus(true); break; case (int)Event.LeaveNotify: pge.Input.UpdateMouseFocus(false); break; case (int)Event.FocusIn: pge.Input.UpdateKeyFocus(true); break; case (int)Event.FocusOut: pge.Input.UpdateKeyFocus(false); break; } } return(RCode.OK); }
public static bool IsMiscFunctionKey(KeySym keysym) => (keysym >= (KeySym)(XK_Select)) && (keysym <= (KeySym)(XK_Break));
private static Key NoesisKey(KeySym k) { switch (k) { case KeySym.XK_Cancel: return(Key.Cancel); case KeySym.XK_BackSpace: return(Key.Back); case KeySym.XK_Tab: return(Key.Tab); case KeySym.XK_Linefeed: return(Key.LineFeed); case KeySym.XK_Clear: return(Key.Clear); case KeySym.XK_Return: return(Key.Return); case KeySym.XK_Pause: return(Key.Pause); case KeySym.XK_Caps_Lock: return(Key.CapsLock); case KeySym.XK_Escape: return(Key.Escape); case KeySym.XK_space: return(Key.Space); case KeySym.XK_Page_Up: return(Key.PageUp); case KeySym.XK_Page_Down: return(Key.PageDown); case KeySym.XK_End: return(Key.End); case KeySym.XK_Home: return(Key.Home); case KeySym.XK_Left: return(Key.Left); case KeySym.XK_Up: return(Key.Up); case KeySym.XK_Right: return(Key.Right); case KeySym.XK_Down: return(Key.Down); case KeySym.XK_Select: return(Key.Select); case KeySym.XK_Execute: return(Key.Execute); case KeySym.XK_Print: return(Key.PrintScreen); case KeySym.XK_Insert: return(Key.Insert); case KeySym.XK_Delete: return(Key.Delete); case KeySym.XK_Help: return(Key.Help); case KeySym.XK_0: return(Key.D0); case KeySym.XK_1: return(Key.D1); case KeySym.XK_2: return(Key.D2); case KeySym.XK_3: return(Key.D3); case KeySym.XK_4: return(Key.D4); case KeySym.XK_5: return(Key.D5); case KeySym.XK_6: return(Key.D6); case KeySym.XK_7: return(Key.D7); case KeySym.XK_8: return(Key.D8); case KeySym.XK_9: return(Key.D9); case KeySym.XK_a: return(Key.A); case KeySym.XK_b: return(Key.B); case KeySym.XK_c: return(Key.C); case KeySym.XK_d: return(Key.D); case KeySym.XK_e: return(Key.E); case KeySym.XK_f: return(Key.F); case KeySym.XK_g: return(Key.G); case KeySym.XK_h: return(Key.H); case KeySym.XK_i: return(Key.I); case KeySym.XK_j: return(Key.J); case KeySym.XK_k: return(Key.K); case KeySym.XK_l: return(Key.L); case KeySym.XK_m: return(Key.M); case KeySym.XK_n: return(Key.N); case KeySym.XK_o: return(Key.O); case KeySym.XK_p: return(Key.P); case KeySym.XK_q: return(Key.Q); case KeySym.XK_r: return(Key.R); case KeySym.XK_s: return(Key.S); case KeySym.XK_t: return(Key.T); case KeySym.XK_u: return(Key.U); case KeySym.XK_v: return(Key.V); case KeySym.XK_w: return(Key.W); case KeySym.XK_x: return(Key.X); case KeySym.XK_y: return(Key.Y); case KeySym.XK_z: return(Key.Z); case KeySym.XK_KP_0: return(Key.NumPad0); case KeySym.XK_KP_1: return(Key.NumPad1); case KeySym.XK_KP_2: return(Key.NumPad2); case KeySym.XK_KP_3: return(Key.NumPad3); case KeySym.XK_KP_4: return(Key.NumPad4); case KeySym.XK_KP_5: return(Key.NumPad5); case KeySym.XK_KP_6: return(Key.NumPad6); case KeySym.XK_KP_7: return(Key.NumPad7); case KeySym.XK_KP_8: return(Key.NumPad8); case KeySym.XK_KP_9: return(Key.NumPad9); case KeySym.XK_KP_Multiply: return(Key.Multiply); case KeySym.XK_KP_Add: return(Key.Add); case KeySym.XK_KP_Separator: return(Key.Separator); case KeySym.XK_KP_Subtract: return(Key.Subtract); case KeySym.XK_KP_Decimal: return(Key.Decimal); case KeySym.XK_KP_Divide: return(Key.Divide); case KeySym.XK_F1: return(Key.F1); case KeySym.XK_F2: return(Key.F2); case KeySym.XK_F3: return(Key.F3); case KeySym.XK_F4: return(Key.F4); case KeySym.XK_F5: return(Key.F5); case KeySym.XK_F6: return(Key.F6); case KeySym.XK_F7: return(Key.F7); case KeySym.XK_F8: return(Key.F8); case KeySym.XK_F9: return(Key.F9); case KeySym.XK_F10: return(Key.F10); case KeySym.XK_F11: return(Key.F11); case KeySym.XK_F12: return(Key.F12); case KeySym.XK_F13: return(Key.F13); case KeySym.XK_F14: return(Key.F14); case KeySym.XK_F15: return(Key.F15); case KeySym.XK_F16: return(Key.F16); case KeySym.XK_F17: return(Key.F17); case KeySym.XK_F18: return(Key.F18); case KeySym.XK_F19: return(Key.F19); case KeySym.XK_F20: return(Key.F20); case KeySym.XK_F21: return(Key.F21); case KeySym.XK_F22: return(Key.F22); case KeySym.XK_F23: return(Key.F23); case KeySym.XK_F24: return(Key.F24); case KeySym.XK_Num_Lock: return(Key.NumLock); case KeySym.XK_Scroll_Lock: return(Key.Scroll); case KeySym.XK_Shift_L: return(Key.LeftShift); case KeySym.XK_Shift_R: return(Key.RightShift); case KeySym.XK_Control_L: return(Key.LeftCtrl); case KeySym.XK_Control_R: return(Key.RightCtrl); case KeySym.XK_Alt_L: return(Key.LeftAlt); case KeySym.XK_Alt_R: return(Key.RightAlt); } return(Key.None); }
public KeyChangedEventArgs(KeySym keysym, bool pressed) { this.Keysym = keysym; this.Pressed = pressed; }
public override void EnterMessageLoop(bool runInBackground) { IntPtr e = System.Runtime.InteropServices.Marshal.AllocHGlobal(24 * sizeof(long)); bool running = true; while (running) { while (XPending(_display) != 0) { XNextEvent(_display, e); if (XFilterEvent(e, IntPtr.Zero)) { continue; } XAnyEvent anyEvent = (XAnyEvent)System.Runtime.InteropServices.Marshal.PtrToStructure(e, typeof(XAnyEvent)); switch ((Event)anyEvent.type) { case Event.ClientMessage: { running = false; break; } case Event.ConfigureNotify: { XConfigureEvent configureEvent = (XConfigureEvent)System.Runtime.InteropServices.Marshal.PtrToStructure(e, typeof(XConfigureEvent)); LocationChanged?.Invoke(this, configureEvent.x, configureEvent.y); SizeChanged?.Invoke(this, configureEvent.width, configureEvent.height); break; } case Event.FocusIn: { Activated?.Invoke(this); break; } case Event.FocusOut: { Deactivated?.Invoke(this); break; } case Event.MotionNotify: { XMotionEvent motionEvent = (XMotionEvent)System.Runtime.InteropServices.Marshal.PtrToStructure(e, typeof(XMotionEvent)); MouseMove?.Invoke(this, motionEvent.x, motionEvent.y); break; } case Event.ButtonPress: { XButtonEvent buttonEvent = (XButtonEvent)System.Runtime.InteropServices.Marshal.PtrToStructure(e, typeof(XButtonEvent)); switch ((Button)buttonEvent.button) { case Button.Button1: { MouseButtonDown?.Invoke(this, buttonEvent.x, buttonEvent.y, MouseButton.Left); break; } case Button.Button2: { MouseButtonDown?.Invoke(this, buttonEvent.x, buttonEvent.y, MouseButton.Middle); break; } case Button.Button3: { MouseButtonDown?.Invoke(this, buttonEvent.x, buttonEvent.y, MouseButton.Right); break; } case Button.Button4: { MouseWheel?.Invoke(this, buttonEvent.x, buttonEvent.y, 120); break; } case Button.Button5: { MouseWheel?.Invoke(this, buttonEvent.x, buttonEvent.y, -120); break; } } break; } case Event.ButtonRelease: { XButtonEvent buttonEvent = (XButtonEvent)System.Runtime.InteropServices.Marshal.PtrToStructure(e, typeof(XButtonEvent)); switch ((Button)buttonEvent.button) { case Button.Button1: { MouseButtonUp?.Invoke(this, buttonEvent.x, buttonEvent.y, MouseButton.Left); break; } case Button.Button2: { MouseButtonUp?.Invoke(this, buttonEvent.x, buttonEvent.y, MouseButton.Middle); break; } case Button.Button3: { MouseButtonUp?.Invoke(this, buttonEvent.x, buttonEvent.y, MouseButton.Right); break; } } break; } case Event.KeyPress: { XKeyEvent keyEvent = (XKeyEvent)System.Runtime.InteropServices.Marshal.PtrToStructure(e, typeof(XKeyEvent)); KeySym ks = XLookupKeysym(ref keyEvent, 0); Key key = NoesisKey(ks); if (key != Key.None) { KeyDown?.Invoke(this, key); } if (_xic != IntPtr.Zero) { Status status = 0; byte[] buffer = new byte[256]; KeySym ret_ks = (KeySym)0; int size = Xutf8LookupString(_xic, e, buffer, 255, ref ret_ks, ref status); if (size > 0 && ((int)status == XLookupChars || (int)status == XLookupBoth)) { buffer[size] = 0; Decoder decoder = _utf8.GetDecoder(); char[] text = new char[256]; int bytesUsed = 0; int charsUsed = 0; bool completed = false; decoder.Convert(buffer, 0, size, text, 0, 255, true, out bytesUsed, out charsUsed, out completed); for (int i = 0; i < charsUsed; ++i) { Char?.Invoke(this, text[i]); } } } break; } case Event.KeyRelease: { XKeyEvent keyEvent = (XKeyEvent)System.Runtime.InteropServices.Marshal.PtrToStructure(e, typeof(XKeyEvent)); KeySym ks = XLookupKeysym(ref keyEvent, 0); Key key = NoesisKey(ks); if (key != Key.None) { KeyUp?.Invoke(this, key); } break; } } } Render?.Invoke(this); } System.Runtime.InteropServices.Marshal.FreeHGlobal(e); }
public static extern int Xutf8LookupString(IntPtr ic, IntPtr @event, byte[] buffer_return, int bytes_buffer, ref KeySym keysym_return, ref Status status_return);
public static extern int XLookupString(ref XKeyEvent event_struct, IntPtr buf, int bytes_buffer, out KeySym keysym, IntPtr status);