Мне нужно чтобы мышь вне рабочей формы, имитировала нажатие кнопки. т.е. если есть Form.exe открываем и мышь имитирует нажатие ЛКМ. не только в самой форме но и на рабочем столе куда не передвинешь мышь, она постоянно кликает (надеюсь достпуно изложил суть. :) )
Будет более понятно, если вы изложите практическую цель такой имитиации. Т.е. смысл, для чего это нужно.
приведу такой пример:
включается компьютер и выходит обычное извещение об ошибке, прочитав нажимаете "ОК", окошко закрывается.
Но через 5 мин оно опять выходит, и для того чтобы его закрыть вам нужно нажать "ОК" (после чего как вы догадываетесь процедура повториться).
Вот мне и нужно (очень нужно) чтобы мышь, вне окна name.exe (созданный в VB 6) имитировала мои клики.
(т.е. я оставлю комп влюченым, курсор мыши будет стоять на том месте где как раз появиться окошко с кнопкой "ОК" и будет кликать. )
Возьмите AutoIt, в комплекте идет программа Au3Record, для записи действий
ждете окно ошибки, включаете запись, нажимаете кнопку, получаете скрипт и делаете действие в бесконечном цикле
Да, такое возможно. Делал в свое время подобную программу, но исходников уже нет. Средствами 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&
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.