Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » VBA - Как заставить на VB 6 мышь имитировать нажатие?

Ответить
Настройки темы
VBA - Как заставить на VB 6 мышь имитировать нажатие?

Новый участник


Сообщения: 2
Благодарности: 0

Профиль | Отправить PM | Цитировать


Мне нужно чтобы мышь вне рабочей формы, имитировала нажатие кнопки. т.е. если есть Form.exe открываем и мышь имитирует нажатие ЛКМ. не только в самой форме но и на рабочем столе куда не передвинешь мышь, она постоянно кликает (надеюсь достпуно изложил суть. )

Отправлено: 16:45, 16-04-2012

 

Старожил


Сообщения: 169
Благодарности: 27

Профиль | Сайт | Отправить PM | Цитировать


Будет более понятно, если вы изложите практическую цель такой имитиации. Т.е. смысл, для чего это нужно.

-------
Microsoft Visual C++ | Realtek Ethernet Drivers | .NET Framework 4.0


Отправлено: 17:15, 16-04-2012 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 2
Благодарности: 0

Профиль | Отправить PM | Цитировать


приведу такой пример:
включается компьютер и выходит обычное извещение об ошибке, прочитав нажимаете "ОК", окошко закрывается.
Но через 5 мин оно опять выходит, и для того чтобы его закрыть вам нужно нажать "ОК" (после чего как вы догадываетесь процедура повториться).
Вот мне и нужно (очень нужно) чтобы мышь, вне окна name.exe (созданный в VB 6) имитировала мои клики.
(т.е. я оставлю комп влюченым, курсор мыши будет стоять на том месте где как раз появиться окошко с кнопкой "ОК" и будет кликать. )

Отправлено: 17:37, 16-04-2012 | #3


Аватара для ferget

Разный


Сообщения: 1294
Благодарности: 359

Профиль | Отправить PM | Цитировать


Возьмите AutoIt, в комплекте идет программа Au3Record, для записи действий

ждете окно ошибки, включаете запись, нажимаете кнопку, получаете скрипт и делаете действие в бесконечном цикле

Отправлено: 02:34, 17-04-2012 | #4


Старожил


Сообщения: 169
Благодарности: 27

Профиль | Сайт | Отправить PM | Цитировать


Да, такое возможно. Делал в свое время подобную программу, но исходников уже нет. Средствами VBA этого не сделать, нужно использовать API Windows. Алгоритм примерно следующий:


Создаете в своей программе таймер с интервалом ~100 мс.

В таймере срабатывает функция, которая ищет нужное вам окно по уникальному заголовку (если он есть) или по имени его класса. Получаете его Хэндел.


Если окно найдено, по его Хэнделу ищите в нем дочернее окно (кнопку) по имени класса и определяете его Хэндел. Имя класса окна можно определить любым оконным шпионом, оно в отличие от Хендла всегда неизменно.
Затем имея Хэндел кнопки, можно определить ее координаты на экране монитора X и Y. Имея координаты окна, переносим на него мышь и имитируем клик.

Если код будет использоваться на одном ПК, окно выскакивает в одном и том же месте и разрешение монитора меняться не будет, значения X и Y можно не искать а жестко прописать в коде программы, предварительно определив их оконным шпионом.


Вот сам код имитации клика, написано на VB6


Код: Выделить весь код
Для имитации нажатия на клавишу мыши служит API-функция mouse_event

 Private Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)

 dwFlags - означает, какое событие в данный момент должно происходит
 dx,dy - величины, характеризующие перемещение курсора от текущего положения курсора
 dx - перемещение по горизонтали (если значение положительное - перемещение идет вправо, если отрицательно - влево)
 dy - перемещение по вертикали (если значение положительное - перемещение идет вниз, если отрицательно - вверх).

 Пример использования функции: неоходимо переместить курсор из текущей точки нахождения курсора в точку с координатами (851,143) и в этой точке имитировать нажатие левой клавиши мыши

 Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
 Private Type POINTAPI
 x As Long
 y As Long
 End Type
 Dim z As POINTAPI
 Private Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)
 Const MOUSEEVENTF_ABSOLUTE = &H8000
 Const MOUSEEVENTF_LEFTDOWN = &H2
 Const MOUSEEVENTF_LEFTUP = &H4
 Const MOUSEEVENTF_MIDDLEDOWN = &H20
 Const MOUSEEVENTF_MIDDLEUP = &H40
 Const MOUSEEVENTF_MOVE = &H1
 Const MOUSEEVENTF_RIGHTDOWN = &H8
 Const MOUSEEVENTF_RIGHTUP = &H10
 Private Sub Form_Load()
 GetCursorPos z 'получить текущее значение местоположения курсора
 zx = (851 - z.x) / 2 'необходимо разделить полученное значение на 2. С чем это связано, я не знаю. А вы?
 zy = (143 - z.y) / 2
 mouse_event MOUSEEVENTF_MOVE, zx, zy, 0&, 0& 'перемещение курсора
 mouse_event MOUSEEVENTF_LEFTDOWN, 0&, 0&, 0&, 0& 'нажатие на левую клавишу мыши
 mouse_event MOUSEEVENTF_LEFTUP, 0&, 0&, 0&, 0& 'отпускание левой клавиши мыши
 End Sub 

 'Примеры использования

 Private Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)
 Const MOUSEEVENTF_ABSOLUTE = &H8000
 Const MOUSEEVENTF_LEFTDOWN = &H2
 Const MOUSEEVENTF_LEFTUP = &H4
 Const MOUSEEVENTF_MIDDLEDOWN = &H20
 Const MOUSEEVENTF_MIDDLEUP = &H40
 Const MOUSEEVENTF_MOVE = &H1
 Const MOUSEEVENTF_RIGHTDOWN = &H8
 Const MOUSEEVENTF_RIGHTUP = &H10

 'Имитация клика:
 mouse_event MOUSEEVENTF_LEFTDOWN, lpPoint.x, lpPoint.y, 0&, 0&
 mouse_event MOUSEEVENTF_LEFTUP, lpPoint.x, lpPoint.y, 0&, 0&

Последний раз редактировалось softter, 17-04-2012 в 13:27.


Отправлено: 13:20, 17-04-2012 | #5



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » VBA - Как заставить на VB 6 мышь имитировать нажатие?

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[решено] Как симулировать нажатие этои кнопки ? Drsmog AutoIt 2 23-06-2011 11:13
http/web - [решено] как имитировать запрет доступа к сайту Vowan Сетевые технологии 8 01-09-2010 14:38
Как эмулировать нажатие ALT ? twinzzz75 AutoIt 1 27-02-2010 11:11
[решено] Реально ли заставить комп, повторять какие-либо действия\нажатие клавиш? SimPbl4 Хочу все знать 13 29-03-2009 15:53
как передать параметром нажатие кнопки ок. qpa3ep Microsoft Windows NT/2000/2003 1 04-05-2006 18:00




 
Переход