using System; using System.Drawing; using System.Windows.Forms; using WindowsInput.Native; using System.Collections.Generic; namespace WindowsInputSimulator { class InputSimulator { private Size screen; private const int max = 65535; private WindowsInput.InputSimulator input = new WindowsInput.InputSimulator(); public InputSimulator() { this.screen = GetMaxSize(); } //http://msdn.microsoft.com/en-us/library/dd375731(VS.85).aspx public void KeyPress(VirtualKeyCode keyCode, int delay = 0) { if (delay > 0) this.input.Keyboard.Sleep(delay); this.input.Keyboard.KeyPress(keyCode); } public void KeyDown(VirtualKeyCode keyCode, int delay = 0) { if (delay > 0) this.input.Keyboard.Sleep(delay); this.input.Keyboard.KeyDown(keyCode); } public void KeyUp(VirtualKeyCode keyCode, int delay = 0) { if (delay > 0) this.input.Keyboard.Sleep(delay); this.input.Keyboard.KeyUp(keyCode); } public void TextEntry(string text, int delay = 0) { if (delay > 0) this.input.Keyboard.Sleep(delay); this.input.Keyboard.TextEntry(text); } public void TextEntry(char chr, int delay = 0) { if (delay > 0) this.input.Keyboard.Sleep(delay); this.input.Keyboard.TextEntry(chr); } public void ModifiedKeyStroke(VirtualKeyCode modifierKeyCode, VirtualKeyCode keyCode, int delay = 0) { if (delay > 0) this.input.Keyboard.Sleep(delay); this.input.Keyboard.ModifiedKeyStroke(modifierKeyCode, keyCode); } public void ModifiedKeyStroke(IEnumerable modifierKeyCodes, IEnumerable keyCodes, int delay = 0) { if (delay > 0) this.input.Keyboard.Sleep(delay); this.input.Keyboard.ModifiedKeyStroke(modifierKeyCodes, keyCodes); } public void ModifiedKeyStroke(VirtualKeyCode modifierKeyCode, IEnumerable keyCodes, int delay = 0) { if (delay > 0) this.input.Keyboard.Sleep(delay); this.input.Keyboard.ModifiedKeyStroke(modifierKeyCode, keyCodes); } public void ModifiedKeyStroke(IEnumerable modifierKeyCodes, VirtualKeyCode keyCode, int delay = 0) { if (delay > 0) this.input.Keyboard.Sleep(delay); this.input.Keyboard.ModifiedKeyStroke(modifierKeyCodes, keyCode); } public void MoveMouseTo(int x, int y, int delay = 0) { if (delay > 0) this.input.Mouse.Sleep(delay); this.input.Mouse.MoveMouseToPositionOnVirtualDesktop(AbsoluteX(x), AbsoluteY(y)); } public void MoveMouseBy(int pixelDeltaX, int pixelDeltaY, int delay = 0) { if (delay > 0) this.input.Mouse.Sleep(delay); this.input.Mouse.MoveMouseBy(pixelDeltaX, pixelDeltaY); } public void XButtonClick(int buttonId, int delay = 0) { if (delay > 0) this.input.Mouse.Sleep(delay); this.input.Mouse.XButtonClick(buttonId); } public void XButtonDoubleClick(int buttonId, int delay = 0) { if (delay > 0) this.input.Mouse.Sleep(delay); this.input.Mouse.XButtonDoubleClick(buttonId); } public void XButtonDown(int buttonId, int delay = 0) { if (delay > 0) this.input.Mouse.Sleep(delay); this.input.Mouse.XButtonDown(buttonId); } public void XButtonUp(int buttonId, int delay = 0) { if (delay > 0) this.input.Mouse.Sleep(delay); this.input.Mouse.XButtonUp(buttonId); } public void HorizontalScroll(int scrollAmountInClicks, int delay = 0) { if (delay > 0) this.input.Mouse.Sleep(delay); this.input.Mouse.HorizontalScroll(scrollAmountInClicks); } public void VerticalScroll(int scrollAmountInClicks, int delay = 0) { if (delay > 0) this.input.Mouse.Sleep(delay); this.input.Mouse.VerticalScroll(scrollAmountInClicks); } public void LeftButtonClick(int delay = 0) { if (delay > 0) this.input.Mouse.Sleep(delay); this.input.Mouse.LeftButtonClick(); } public void LeftButtonDoubleClick(int delay = 0) { if (delay > 0) this.input.Mouse.Sleep(delay); this.input.Mouse.LeftButtonDoubleClick(); } public void LeftButtonDown(int delay = 0) { if (delay > 0) this.input.Mouse.Sleep(delay); this.input.Mouse.LeftButtonDown(); } public void LeftButtonUp(int delay = 0) { if (delay > 0) this.input.Mouse.Sleep(delay); this.input.Mouse.LeftButtonUp(); } public void RightButtonDoubleClick(int delay = 0) { if (delay > 0) this.input.Mouse.Sleep(delay); this.input.Mouse.RightButtonDoubleClick(); } public void RightButtonClick(int delay = 0) { if (delay > 0) this.input.Mouse.Sleep(delay); this.input.Mouse.RightButtonClick(); } public void RightButtonDown(int delay = 0) { if (delay > 0) this.input.Mouse.Sleep(delay); this.input.Mouse.RightButtonDown(); } public void RightButtonUp(int delay = 0) { if (delay > 0) this.input.Mouse.Sleep(delay); this.input.Mouse.RightButtonUp(); } protected double AbsoluteX(int x) { return x * max / screen.Width; } protected double AbsoluteY(int y) { return y * max / screen.Height; } protected Size GetMaxSize() { Rectangle bounds; int left_min, top_min, right_max, bottom_max; left_min = 0; top_min = 0; right_max = 0; bottom_max = 0; foreach (var screen in Screen.AllScreens) { bounds = screen.Bounds; left_min = Math.Min(left_min, bounds.Left); right_max = Math.Max(right_max, bounds.Right); top_min = Math.Min(top_min, bounds.Top); bottom_max = Math.Max(bottom_max, bounds.Bottom); } return new Size(right_max - left_min, bottom_max - top_min); } } }