|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » VBA - Как заставить на VB 6 мышь имитировать нажатие? |
|
VBA - Как заставить на VB 6 мышь имитировать нажатие?
|
Новый участник Сообщения: 2 |
Мне нужно чтобы мышь вне рабочей формы, имитировала нажатие кнопки. т.е. если есть Form.exe открываем и мышь имитирует нажатие ЛКМ. не только в самой форме но и на рабочем столе куда не передвинешь мышь, она постоянно кликает (надеюсь достпуно изложил суть.
![]() |
|
Отправлено: 16:45, 16-04-2012 |
Старожил Сообщения: 169
|
Профиль | Сайт | Отправить PM | Цитировать Будет более понятно, если вы изложите практическую цель такой имитиации. Т.е. смысл, для чего это нужно.
|
------- Отправлено: 17:15, 16-04-2012 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 2
|
Профиль | Отправить PM | Цитировать приведу такой пример:
включается компьютер и выходит обычное извещение об ошибке, прочитав нажимаете "ОК", окошко закрывается. Но через 5 мин оно опять выходит, и для того чтобы его закрыть вам нужно нажать "ОК" (после чего как вы догадываетесь процедура повториться). Вот мне и нужно (очень нужно) чтобы мышь, вне окна name.exe (созданный в VB 6) имитировала мои клики. (т.е. я оставлю комп влюченым, курсор мыши будет стоять на том месте где как раз появиться окошко с кнопкой "ОК" и будет кликать. ) |
Отправлено: 17:37, 16-04-2012 | #3 |
Разный Сообщения: 1294
|
Профиль | Отправить PM | Цитировать Возьмите AutoIt, в комплекте идет программа Au3Record, для записи действий
ждете окно ошибки, включаете запись, нажимаете кнопку, получаете скрипт и делаете действие в бесконечном цикле |
Отправлено: 02:34, 17-04-2012 | #4 |
Старожил Сообщения: 169
|
Профиль | Сайт | Отправить 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 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
[решено] Как симулировать нажатие этои кнопки ? | 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 |
|