private void SendKey(Win32APIImports.VirtualKeys key, KeyState keyState) { const uint KEYEVENTF_KEYUP = 0x0002; var isExtended = false; uint flags = 0; if (keyState == KeyState.Up) flags = KEYEVENTF_KEYUP; if (key == Win32APIImports.VirtualKeys.RightMenu || key == Win32APIImports.VirtualKeys.RightControl || key == Win32APIImports.VirtualKeys.Insert || key == Win32APIImports.VirtualKeys.Delete || key == Win32APIImports.VirtualKeys.Home || key == Win32APIImports.VirtualKeys.End || key == Win32APIImports.VirtualKeys.Prior || key == Win32APIImports.VirtualKeys.Next || key == Win32APIImports.VirtualKeys.Up || key == Win32APIImports.VirtualKeys.Left || key == Win32APIImports.VirtualKeys.Down || key == Win32APIImports.VirtualKeys.Right ) { isExtended = true; } if (isExtended) flags |= 1; Win32APIImports.keybd_event((byte)key, Win32APIImports.MapVirtualKey((byte)key, 0), flags, UIntPtr.Zero); }
public static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, Win32APIImports.SetWindowPosFlags uFlags);
public void SendText(string text, Win32APIImports.ModifierKey modifierKey) { IntPtr keyboardLayout = Win32APIImports.GetKeyboardLayout(0); while (!string.IsNullOrEmpty(text)) { Win32APIImports.ModifierKey modKey = modifierKey; var vKey = Win32APIImports.VkKeyScanEx(text[0], keyboardLayout); //Hi-byte indicates the pressed modifier key(s) var highByte = (byte)(vKey >> 8); var lowByte = (byte)(vKey & 0xFF); if ((highByte & 1) == 1) modKey |= Win32APIImports.ModifierKey.Shift; if ((highByte & 2) == 2) modKey |= Win32APIImports.ModifierKey.Control; if ((highByte & 4) == 4) modKey |= Win32APIImports.ModifierKey.Alt; if (modKey.HasFlag(Win32APIImports.ModifierKey.Shift)) SendKey(Win32APIImports.VirtualKeys.Shift, KeyState.Down); if (modKey.HasFlag(Win32APIImports.ModifierKey.Windows)) SendKey(Win32APIImports.VirtualKeys.LeftWindows, KeyState.Down); if (modKey.HasFlag(Win32APIImports.ModifierKey.Control)) SendKey(Win32APIImports.VirtualKeys.Control, KeyState.Down); if (modKey.HasFlag(Win32APIImports.ModifierKey.Alt)) SendKey(Win32APIImports.VirtualKeys.LeftMenu, KeyState.Down); if (modKey.HasFlag(Win32APIImports.ModifierKey.AltGr)) SendKey(Win32APIImports.VirtualKeys.RightMenu, KeyState.Down); SendKey(lowByte, KeyState.Down); SendKey(lowByte, KeyState.Up); if (modKey.HasFlag(Win32APIImports.ModifierKey.Shift)) SendKey(Win32APIImports.VirtualKeys.Shift, KeyState.Up); if (modKey.HasFlag(Win32APIImports.ModifierKey.Windows)) SendKey(Win32APIImports.VirtualKeys.LeftWindows, KeyState.Up); if (modKey.HasFlag(Win32APIImports.ModifierKey.Control)) SendKey(Win32APIImports.VirtualKeys.Control, KeyState.Up); if (modKey.HasFlag(Win32APIImports.ModifierKey.Alt)) SendKey(Win32APIImports.VirtualKeys.LeftMenu, KeyState.Up); if (modKey.HasFlag(Win32APIImports.ModifierKey.AltGr)) SendKey(Win32APIImports.VirtualKeys.RightMenu, KeyState.Up); if (text.Length > 0) text = text.Remove(0, 1); else text = string.Empty; } }
public static extern bool GetMenuItemInfo(IntPtr hMenu, uint uItem, bool fByPosition, ref Win32APIImports.MENUITEMINFO lpmii);