Совет 1: Как эмулировать мышь

Манипулятор типа «мышь» - необходимый атрибут любого компьютера. Без него невозможно представить управление или навигацию по приложениям. Данный манипулятор активно взаимодействует с пользователем посредствам отображения на экране его действий (перемещений, кликов, прокрутки). Для некоторых задач программирования, может потребоваться программная эмуляция мыши.
Вам понадобится
  • - среда разработки Microsoft Visual C++ .Net (не ниже 2003).
Инструкция
1
Установите Microsoft Visual C++ .Net (не ниже 2003). Существует несколько версий данной среды разработки- платная и бесплатная. Их можно скачать с сайта разработчика. После установки, создайте новый проект и подключите System.Windows.Forms и System.Drawing, как показано ниже: using System.Windows.Forms; using System.Drawing;
2
Для перемещения мыши по экрану в операционных системах семейства Windows применяйте функции, которые устанавливают непосредственно позицию курсора на экране. Используйте, например, следующий код:Cursor.Position = new Point(x,y);Данная строка переместит курсор в позицию, указанную в конструкторе класса Point(x,y) (где x и y – координаты позиции в которую следует установить курсор). Если необходимо устанавливать позицию курсора неоднократно, создайте один экземпляр класса Point и для него применяйте метод изменяющий координаты. Это позволит сэкономить память: Point point = new Point(0,0); Cursor.Position = point.Offset ( 20 , 100 ) ; Cursor.Position = point.Offset(40,-20); Данный код создает объект класса Point() с координатами 0,0. Вторая строчка смещает точку Point на 20 пикселей по Х и на 100 пикселей по Y. Текущая координата, на которую указывает объект point, равна 20, 100. В третьей строке снова происходит смещение Point на указанное количество пикселей (40 и -20 соответственно). Текущая координата равна 60 (20+40) по X и 80 (100-20) по Y.
3
Для эмуляции нажатия клавиши мыши используйте функции Win32 SendInput() или mouse_event(). Например, чтобы программно имитировать клик правой кнопки используйте следующий код://импортируйте mouse_event():[DllImport("User32.dll")]static extern void mouse_event(MouseFlags dwFlags, int dx, int dy, int dwData, UIntPtr dwExtraInfo);//для удобства использования создайте перечисление с необходимыми константами (флагами), //которые определяют действия мыши:[Flags]enum MouseFlags{Move = 0x0001, LeftDown = 0x0002, LeftUp = 0x0004, RightDown = 0x0008,RightUp = 0x0010, Absolute = 0x8000};//использование - клик по координатам, установленным ниже:const int x = 39000; //координаты по Хconst int y = 12000; //координаты по Ymouse_event(MouseFlags.Absolute | MouseFlags.Move, x, y, 0, UIntPtr.Zero);mouse_event(MouseFlags.Absolute | MouseFlags.RightDown, x, y, 0, UIntPtr.Zero);mouse_event(MouseFlags.Absolute | MouseFlags.RightUp, x, y, 0, UIntPtr.Zero);
4
Эмулируйте нажатие кнопки мыши посредствам посылки сообщений WM_LBUTTONDOWN и WM_LBUTTONUP, при помощи функции Win API SendMessage(). Например, как показано ниже:void OnBtPerformClick(object sender, EventArgs e){SendMessage(btDemo.Handle, Messages.WM_LBUTTONDOWN, MK_LBUTTON, IntPtr.Zero);SendMessage(btDemo.Handle, Messages.WM_LBUTTONUP, MK_LBUTTON, IntPtr.Zero);}

Совет 2: Как эмулировать нажатие

Иногда сценарий работы скрипта или программы требует имитации некоторых действий пользователя - например, нажатие клавиши или щелчок мышью по какому-либо элементу. Реализовать это можно либо встроенными средствами того языка программирования, на котором пишется программа, либо с использованием специального интерфейса операционной системы. Такой интерфейс предназначен для взаимодействия прикладных программ с системными и называется API - Application Programming Interfaces.
Инструкция
1
Выясните, предусмотрены ли в используемом для написания программы или скрипта языке встроенные средства эмуляции нажатия клавиши. Например, в языке JavaScript нажатие левой кнопки мыши имитируется с помощью метода, привязанного к конкретным элементам пользовательского интерфейса. Скажем, чтобы эмулировать нажатие левой клавиши мыши при нахождении курсора над кнопкой с именем autoClkButton, помещенной в форму с именем autoClkForm, надо использовать конструкцию document.autoClkButton.autoClkForm.click(). В этом языке свойство click() имеют не только кнопки (button, reset, submit), но и элементы выбора - checkbox и radio.
2
Задействуйте внешнюю функцию keybd_event, если в используемом языке нет нужных вам встроенных средств, которые делают все необходимое автоматически. Это функция Win32 API, поэтому чтобы иметь возможность из программы обращаться к ним, вам следует поместить в начале кода блок, импортирующий функции внешней библиотеки. Сделать это следует в соответствии с синтаксисом используемой программной среды. Например, в языке программирования терминалов для биржевой торговли MQL (MetaQuotes Language) для вызова функций, помещенных в системную библиотеку user32.dll в начале кода следует поместить такие строки:#import "user32.dll"bool keybd_event(int bVk, int bScan);#importПосле этого станет возможным использование объявленной в блоке импортирования функции keybd_event.
3
Keybd_event имеет четыре параметра. Первый (bVk, тип данных BYTE) может принимать одно из 255 значений и указывает на клавишу, нажатие которой будет имитироваться. Какое из этих значений значение присвоено нужной вам клавише выясните на этой странице - http://msdn.microsoft.com/en-us/library/windows/desktop/dd375731(v=vs.85).aspx. Второй параметр (bScan, тип BYTE) - это «скан-код», который генерируется при нажатии выбранной клавиши. Третий (dwFlags, тип DWORD) может принимать одно или оба предусмотренных для него значения (KEYEVENTF_EXTENDEDKEY и KEYEVENTF_KEYUP). Первое указывает, что будет сформирован расширенный код клавиши, а второй означает, что кнопка была нажата, а затем отпущена. Четвертый параметр (dwExtraInfo, тип ULONG_PTR) может содержать дополнительные флаги, индивидуальные для каждой клавиши.
Поиск
Совет полезен?
Добавить комментарий к статье
Осталось символов: 500