// Token: 0x0600032E RID: 814 RVA: 0x0000F4EC File Offset: 0x0000D6EC internal static void TryGetCharFromKeyboardState(int virtualKeyCode, int fuState, out char[] chars) { IntPtr activeKeyboard = KeyboardNativeMethods.GetActiveKeyboard(); int scanCode = KeyboardNativeMethods.MapVirtualKeyEx(virtualKeyCode, 0, activeKeyboard); KeyboardNativeMethods.TryGetCharFromKeyboardState(virtualKeyCode, scanCode, fuState, activeKeyboard, out chars); }
// Token: 0x06000332 RID: 818 RVA: 0x0000F6D0 File Offset: 0x0000D8D0 private static IntPtr GetActiveKeyboard() { IntPtr foregroundWindow = ThreadNativeMethods.GetForegroundWindow(); int num; int windowThreadProcessId = ThreadNativeMethods.GetWindowThreadProcessId(foregroundWindow, out num); return(KeyboardNativeMethods.GetKeyboardLayout(windowThreadProcessId)); }
// Token: 0x06000331 RID: 817 RVA: 0x0000F698 File Offset: 0x0000D898 private static void ClearKeyboardBuffer(int vk, int sc, IntPtr hkl) { StringBuilder stringBuilder = new StringBuilder(10); int num; do { byte[] lpKeyState = new byte[255]; num = KeyboardNativeMethods.ToUnicodeEx(vk, sc, lpKeyState, stringBuilder, stringBuilder.Capacity, 0, hkl); }while (num < 0); }
// Token: 0x06000330 RID: 816 RVA: 0x0000F534 File Offset: 0x0000D734 internal static void TryGetCharFromKeyboardState(int virtualKeyCode, int scanCode, int fuState, IntPtr dwhkl, out char[] chars) { StringBuilder stringBuilder = new StringBuilder(64); KeyboardState current = KeyboardState.GetCurrent(); byte[] nativeState = current.GetNativeState(); bool flag = false; if (current.IsDown(Keys.ShiftKey)) { nativeState[16] = 128; } if (current.IsToggled(Keys.Capital)) { nativeState[20] = 1; } switch (KeyboardNativeMethods.ToUnicodeEx(virtualKeyCode, scanCode, nativeState, stringBuilder, stringBuilder.Capacity, fuState, dwhkl)) { case -1: flag = true; KeyboardNativeMethods.ClearKeyboardBuffer(virtualKeyCode, scanCode, dwhkl); chars = null; break; case 0: chars = null; break; case 1: if (stringBuilder.Length > 0) { chars = new char[] { stringBuilder[0] }; } else { chars = null; } break; default: if (stringBuilder.Length > 1) { chars = new char[] { stringBuilder[0], stringBuilder[1] }; } else { chars = new char[] { stringBuilder[0] }; } break; } if (KeyboardNativeMethods.lastVirtualKeyCode != 0 && KeyboardNativeMethods.lastIsDead) { if (chars != null) { StringBuilder stringBuilder2 = new StringBuilder(5); KeyboardNativeMethods.ToUnicodeEx(KeyboardNativeMethods.lastVirtualKeyCode, KeyboardNativeMethods.lastScanCode, KeyboardNativeMethods.lastKeyState, stringBuilder2, stringBuilder2.Capacity, 0, dwhkl); KeyboardNativeMethods.lastIsDead = false; KeyboardNativeMethods.lastVirtualKeyCode = 0; } return; } KeyboardNativeMethods.lastScanCode = scanCode; KeyboardNativeMethods.lastVirtualKeyCode = virtualKeyCode; KeyboardNativeMethods.lastIsDead = flag; KeyboardNativeMethods.lastKeyState = (byte[])nativeState.Clone(); }