private static void UpdateFrame() { keyUpStack.Clear(); keyDownStack.Clear(); for (int i = activeKeyList.Count - 1; i >= 0; i--) { WinKey key = activeKeyList[i]; bool onHold = GetAsyncKeyStateHoldWinKey(key); if (keyHoldList.Contains(key)) { if (!onHold) { keyUpStack.Push(key); keyHoldList.RemoveAll(x => x == key); } } else { if (onHold) { keyDownStack.Push(key); keyHoldList.Add(key); } } } }
public static bool GetKeyText(WinKey key) { RegisterActiveKey(key); if (!CheckCondition()) { return(false); } if (keyDownStack.Contains(key)) { currentTextKey = key; textKeyTimer = TextKeyDelayMillisec; return(true); } else { if (key == currentTextKey && keyHoldList.Contains(key)) { if (textKeyTimer <= 0) { textKeyTimer = TextKeyFireDelayMillisec; return(true); } else { textKeyTimer -= ownerCore.DeltaMilliseconds; return(false); } } } return(false); }
private static void RegisterActiveKey(WinKey key) { if (!activeKeyList.Contains(key)) { activeKeyList.Add(key); } }
public static bool GetKeyDown(WinKey key) { RegisterActiveKey(key); if (!CheckCondition()) { return(false); } return(keyDownStack.Contains(key)); }
public static bool GetKeyUp(WinKey key) { RegisterActiveKey(key); if (!CheckCondition()) { return(false); } if (keyUpStack.Contains(key)) { return(true); } else if (!keyHoldList.Contains(key)) { if (GetAsyncKeyState(GetVKCode(key)) != 0) { keyHoldList.Add(key); keyDownStack.Push(key); } } return(false); }
private static bool GetAsyncKeyStateHoldWinKey(WinKey key) { return(GetAsyncKeyStateAuto(GetVKCode(key))); }
private static int GetVKCode(WinKey key) { switch (key) { case WinKey.MouseLeft: return(0x01); case WinKey.MouseRight: return(0x02); case WinKey.MouseMiddle: return(0x04); case WinKey.MouseX1: return(0x05); case WinKey.MouseX2: return(0x06); case WinKey.MouseUndefined: return(0x07); case WinKey.A: case WinKey.B: case WinKey.C: case WinKey.D: case WinKey.E: case WinKey.F: case WinKey.G: case WinKey.H: case WinKey.I: case WinKey.J: case WinKey.K: case WinKey.L: case WinKey.M: case WinKey.N: case WinKey.O: case WinKey.P: case WinKey.Q: case WinKey.R: case WinKey.S: case WinKey.T: case WinKey.U: case WinKey.V: case WinKey.W: case WinKey.X: case WinKey.Y: case WinKey.Z: return(0x41 + ((int)key - (int)WinKey.A)); case WinKey.Backspace: return(0x08); case WinKey.Tab: return(0x09); case WinKey.Clear: return(0x0C); case WinKey.Return: return(0x0D); case WinKey.Pause: return(0x13); case WinKey.Escape: return(0x1B); case WinKey.Space: return(0x20); case WinKey.Exclaim: return(0x31); case WinKey.DoubleQuote: return(0xDE); case WinKey.Hash: return(0x33); case WinKey.Dollar: return(0x34); case WinKey.Ampersand: return(0x37); case WinKey.Quote: return(0xDE); case WinKey.LeftParen: return(0x39); case WinKey.RightParen: return(0x30); case WinKey.Asterisk: return(0x13); case WinKey.Equals: case WinKey.Plus: return(0xBB); case WinKey.Less: case WinKey.Comma: return(0xBC); case WinKey.Underscore: case WinKey.Minus: return(0xBD); case WinKey.Greater: case WinKey.Period: return(0xBE); case WinKey.Question: case WinKey.Slash: return(0xBF); case WinKey.Alpha0: case WinKey.Alpha1: case WinKey.Alpha2: case WinKey.Alpha3: case WinKey.Alpha4: case WinKey.Alpha5: case WinKey.Alpha6: case WinKey.Alpha7: case WinKey.Alpha8: case WinKey.Alpha9: return(0x30 + ((int)key - (int)WinKey.Alpha0)); case WinKey.Colon: case WinKey.Semicolon: return(0xBA); case WinKey.At: return(0x32); case WinKey.LeftBracket: return(0xDB); case WinKey.Backslash: return(0xDC); case WinKey.RightBracket: return(0xDD); case WinKey.Caret: return(0x36); case WinKey.BackQuote: return(0xC0); case WinKey.Delete: return(0x2E); case WinKey.Keypad0: case WinKey.Keypad1: case WinKey.Keypad2: case WinKey.Keypad3: case WinKey.Keypad4: case WinKey.Keypad5: case WinKey.Keypad6: case WinKey.Keypad7: case WinKey.Keypad8: case WinKey.Keypad9: return(0x60 + ((int)key - (int)WinKey.Keypad0)); case WinKey.KeypadPeriod: return(0x6E); case WinKey.KeypadDivide: return(0x6F); case WinKey.KeypadMultiply: return(0x6A); case WinKey.KeypadMinus: return(0x6D); case WinKey.KeypadPlus: return(0x6B); case WinKey.KeypadEnter: return(0x6C); case WinKey.UpArrow: return(0x26); case WinKey.DownArrow: return(0x28); case WinKey.RightArrow: return(0x27); case WinKey.LeftArrow: return(0x25); case WinKey.Insert: return(0x2D); case WinKey.Home: return(0x24); case WinKey.End: return(0x23); case WinKey.PageUp: return(0x21); case WinKey.PageDown: return(0x22); case WinKey.F1: case WinKey.F2: case WinKey.F3: case WinKey.F4: case WinKey.F5: case WinKey.F6: case WinKey.F7: case WinKey.F8: case WinKey.F9: case WinKey.F10: case WinKey.F11: case WinKey.F12: case WinKey.F13: case WinKey.F14: case WinKey.F15: return(0x70 + ((int)key - (int)WinKey.F1)); case WinKey.Numlock: return(0x90); case WinKey.CapsLock: return(0x14); case WinKey.ScrollLock: return(0x91); case WinKey.RightShift: return(0xA1); case WinKey.LeftShift: return(0xA0); case WinKey.RightControl: return(0xA3); case WinKey.LeftControl: return(0xA2); case WinKey.RightAlt: return(0xA5); case WinKey.LeftAlt: return(0xA4); case WinKey.Help: return(0xE3); case WinKey.Print: return(0x2A); case WinKey.SysReq: return(0x2C); case WinKey.Break: return(0x03); case WinKey.Kor_Eng: return(0x21); case WinKey.LeftWindows: case WinKey.LeftApple: return(0x5b); } return(0); }