Excel vba клик мыши

Имитация движения и кликов левой и правой кнопками мыши из кода VBA Excel. Эмуляция перемещения курсора и определение его текущих координат.

В VBA Excel нет методов и функций для имитации движения мыши и эмуляции кликов ее левой и правой кнопками. Но для этих целей, а также для определения текущих координат курсора, можно использовать встроенные функции Windows API — GetCursorPos, SetCursorPos и mouse_event.

Если эти функции Windows API объявить без ключевого слова Private, они будут доступны во всех модулях текущего проекта VBA.

Определение координат курсора

Определение текущих координат курсора из кода VBA Excel:

Option Explicit

Declare PtrSafe Function GetCursorPos Lib «user32» (lpPoint As POINTAPI) As Long

Type POINTAPI

   X As Long

   Y As Long

End Type

Sub Get_Cursor()

    Dim myPoint As POINTAPI

    GetCursorPos myPoint

    Debug.Print «Координата X: « & myPoint.X & vbNewLine & _

    «Координата Y: « & myPoint.Y & vbNewLine

End Sub

Скопируйте представленный выше код в стандартный модуль и кликните мышью внутри процедуры Get_Cursor(). Затем, перемещайте курсор мыши по экрану, не нажимая кнопок, чтобы мигающая вертикальная линия (точка вставки) не ушла из процедуры, и нажимайте клавишу F5. В окне Immediate будут печататься текущие координаты курсора. Клавишу F5 можно нажимать одновременно с процессом перемещения мыши. Значения координат X и Y отображаются в пикселях.

Имитация движения мыши

Имитация движения мыши, а, точнее, перескока мыши из одной точки в другую, осуществляется из кода VBA Excel путем задания новых координат курсору:

Option Explicit

Declare PtrSafe Function SetCursorPos Lib «user32» (ByVal X As Long, ByVal Y As Long) As Long

Sub Set_Cursor()

    Dim myX As Long, myY As Long

    myX = 600

    myY = 400

    ‘Задаем курсору новые координаты

    SetCursorPos myX, myY

End Sub

Переменные добавлены в пример для наглядности, их можно не использовать:

А так можно задать множественные перескоки курсора мыши:

Sub Many_Set_Cursor()

Dim i As Long

    For i = 1 To 600 Step 20

        Application.Wait Now + TimeValue(«0:00:01»)

        SetCursorPos i, i

    Next

End Sub

Здесь перескок мыши происходит один раз в секунду.

Уменьшив задержку выполнения цикла предыдущего примера с помощью другого цикла, можно ускорить перемещение курсора и сделать его более плавным:

Sub Many_Set_Cursor_2()

Dim i As Long, i2 As Long, a As Long

    For i = 1 To 600

        For i2 = 1 To 100000

            a = i2 / 2

        Next

        SetCursorPos i, i

    Next

End Sub

Здесь уже более похоже на имитацию движения мыши.

Имитация кликов мыши

Чтобы воспроизвести имитацию кликов левой и правой кнопками мыши, нам понадобятся коды событий кнопок мыши:

Событие Код
Нажать левую кнопку &H2
Отпустить левую кнопку &H4
Нажать правую кнопку &H8
Отпустить правую кнопку &H10

Следующий пример показывает, как установить курсор мыши в заданное место экрана и сымитировать клик правой кнопкой мыши:

Option Explicit

Declare PtrSafe Function SetCursorPos Lib «user32» (ByVal X As Long, ByVal Y As Long) As Long

Declare PtrSafe 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)

Sub Set_Cursor_and_RightClick()

    ‘Устанавливаем курсор в нужную точку экрана

    SetCursorPos 800, 600

    ‘Нажимаем правую кнопку мыши

    mouse_event &H8, 0, 0, 0, 0

    ‘Отпускаем правую кнопку мыши

    mouse_event &H10, 0, 0, 0, 0

End Sub

Я выбрал для примера имитацию клика правой кнопкой мыши из-за большей наглядности (за счет отображения контекстного меню).

Обратите внимание, что функции Windows API, используемые в примерах, должны быть объявлены только один раз.


Фразы для контекстного поиска: положение курсора, имитация клика, эмуляция клика, эмуляция движения, имитация мыши, эмуляция мыши, координаты мыши, расположение мыши, расположение курсора.


Лучший ответ Сообщение было отмечено как решение

Решение

Ура! Наконец-то разобрался как это сделать приемлимым способом =)

Подробно опишу весь процесс для таких же чайников как я сам, ибо на рускоязычных форумах фиг найдешь нормальное описание

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
'Подключение функции API Windows "mouse_event" из Виндосовской библиотеки "user32", которая позваляет управлять мышью
Private Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal dwData As Long, ByVal dwExtraInfo As Long)
'Значения параметра dwFlags, определяющие поведение функции mouse_event
Private Const MOUSEEVENTF_LEFTDOWN = &H2  'Нажать левую кнопку
Private Const MOUSEEVENTF_LEFTUP = &H4  'Отпустить левую кнопку
 
'Подключение функции API Windows "SetCursorPos", которая устанавливает позицию курсора мыши по координатам, соответствующим разрешению вашего монитора
Private Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long
 
'Подключение функции API Windows "Sleep", её можно использовать вместо таймера, выставляя задержки в милисекундах
Private Declare Sub Sleep Lib "kernel32" (ByVal milliseconds As Long)
 
Sub MouseDragging(x1, y1, x2, y2) 'Перетаскивание объекта из координаты (x1,y1) в координаты (x2,y2)или выделение текста/изображения в прямоугольной области (x1, y1; x2, y2)
Call SetCursorPos(x1, y1)
mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0
Call SetCursorPos(x2, y2)
mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
End Sub
 
Sub MouseClick(x, y) 'Клик мыши по координатам (x,y)
Call SetCursorPos(x, y)
mouse_event MOUSEEVENTF_LEFTDOWN Or MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
End Sub
 
Private Sub CommandButton1_Click()
Sleep (500)
Call MouseDragging(889, 490, 388, 467)
Sleep (2000)
Call MouseClick(768, 419)
End Sub

Управление мышью осуществляется с помощью стандартной функции API Windows под названием «mouse_event», чтобы она заработала, надо вставить строку «Private Declare Sub mouse_event…» в точности, как показано сверху в коде VB. Для того чтобы указать этой функции, что конкретно надо сделать, нужно установить параметр dwFlags, который может принимать следующие значения:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
'Возможные значения параметра dwFlags, определяющие поведение функции mouse_event
Private Const MOUSEEVENTF_ABSOLUTE = &H8000  'Абсолютное перемещение
Private Const MOUSEEVENTF_LEFTDOWN = &H2  'Нажать левую кнопку
Private Const MOUSEEVENTF_LEFTUP = &H4  'Отпустить левую кнопку
Private Const MOUSEEVENTF_MIDDLEDOWN = &H20  'Нажать среднюю кнопку
Private Const MOUSEEVENTF_MIDDLEUP = &H40  'Отпустить среднюю кнопку
Private Const MOUSEEVENTF_RIGHTDOWN = &H8  'Нажать правую кнопку
Private Const MOUSEEVENTF_RIGHTUP = &H10  'Отпустить правую кнопку
Private Const MOUSEEVENTF_MOVE = &H1  'Переместить курсор
Private Const MOUSEEVENTF_WHEEL = &H800  'Вращение вертикального колеса мыши (если оно есть)
Private Const MOUSEEVENTF_HWHEEL = &H1000  'То ли вращение горизонтального колеса мыши, толи наклон вправо/влево обыного колеса мыши
Private Const MOUSEEVENTF_XDOWN = &H80  'Нажать на одну из дополнительных кнопок "Х" (номер кнопки задается параметром dwData)
Private Const MOUSEEVENTF_XUP = &H100  'Отпустить  кнопку "Х"
'Дополнительный параметр dwData, определяет поведение функции mouse_event
'при использовании dwFlags = MOUSEEVENTF_WHEEL, MOUSEEVENTF_HWHEEL, MOUSEEVENTF_XDOWN, MOUSEEVENTF_XUP

Наиболее подробная информация о функциональности этих всех параметров содержится на сайте майкрософт (на английском) Например, с помощью параметра MOUSEEVENTF_ABSOLUTE можно задавать координаты мыши с высокой точностью в диапазоне от 0 до 65535 по осям x и y. Правда мне так и не удалось понять, как работает этот параметр, у меня он вобще никакого влияния не оказывал на перемещение курсора, как я только над ним не извращался =)

Помучавшись, обнаружил прекрасную функцию «SetCursorPos», которая так же входит в стандартный набор Виндоус. Она четко ставит укозатель мыши в нужную позицию с координатами, соответствующими разрешению экрана (Например от 0х0 до 1280х800) независимо от настроек чувствительности и ускорения мыши, что очень удобно.

Для работы с медленно прогружающимися объектами (например с сайтами в интернете или тяжеловесными программами) бывает необходимо добавить временную задержку между кликами мыши на различные меню. Поскольку в VBA повидимому нет объекта типа таймера, то вместо него отлично подходит ещё одна стандартная функция Виндовс «Sleep», которая позваляет задавать задержку в милисекундах, что бывает даже удобнее.

Мне необходимо было использовать в своей основной программе две вещи — это перетаскивание объекта из точки 1 в точку 2 и клик мышкой в точке с заданными координатами (например на кнопку). Для реализации каждого из этих действий можно использовать связку из нескольких функций «SetCursorPos» и «mouse_event», но удобнее написать свои процедуры, котарые потом вставлять каждый раз в нужное место, что я и сделал в виде процедур «MouseDragging» и «MouseClick».

Процедура «MouseDragging(x1, y1, x2, y2)» с помощью функции «SetCursorPos(x1, y1)» устанавливает курсор над нужным объектом в координатах (x1, y1), затем с помощью «mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0» нажимает левую кнопку мыши и как бы удерживая её, перетаскивает обект в точку с координатами (x2, y2) с помощью функции «SetCursorPos(x2, y2)». Затем отпускает кнопку мыши с помощью функции «mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0».
С помощью процедуры «MouseDragging(x1, y1, x2, y2)» можно также выделить область текста в Ворде, несколько объектов в Экселе, Автокаде или часть изображения в Пэйнте.

Процедура «MouseClick(x, y)» выполняет клик мышью в точке с координатами (x, y). Сначала устанавливает указатель мыши с помощью функции «SetCursorPos(x, y)» в нужной точке, затем с помощью функции «mouse_event MOUSEEVENTF_LEFTDOWN Or MOUSEEVENTF_LEFTUP, 0, 0, 0, 0» совершает клик мышью в этой точке. Причем интересно, что запись параметра dwFlags в виде «MOUSEEVENTF_LEFTDOWN Or MOUSEEVENTF_LEFTUP» сразу же обеспечивает и нажатие левой кнопки мыши и отпускание.

Здесь x, y, x1, y1, x2, y2 играют роль параметров, вместо которых мы при вызове процедур подставляем нужные нам значения.

Теперь вставляем всё это в процедуру нажатия на кнопку Button1, расположенную где-нибудь на нашей форме, и получаем следующее: при нажатии на кнопку происходит задержка 0,5 секунды, затем перетаскивание объекта из координат (889, 490) в точку с координатами (388, 467), затем после задержки в 2,0 секунды выполняется клик мышкой в точке с координатами (768, 419)

Может быть кому-то покажется странным такое длинное описание столь простой задачи, но мне пришлось потратить около месяца времени, чтобы разобраться во всем этом и найти подходящие решения. Надеюсь что данное описание поможет таким же чайникам как я разобраться в этом гораздо быстрее ;-)



19



Содержание

  1. MouseDown, MouseUp events
  2. Syntax
  3. Settings
  4. Remarks
  5. See also
  6. Support and feedback
  7. Click event
  8. Syntax
  9. Remarks
  10. See also
  11. Support and feedback
  12. События MouseDown, MouseUp
  13. Синтаксис
  14. Settings
  15. Замечания
  16. См. также
  17. Поддержка и обратная связь

MouseDown, MouseUp events

Occur when the user clicks a mouse button. MouseDown occurs when the user presses the mouse button; MouseUp occurs when the user releases the mouse button.

Syntax

For MultiPage, TabStrip
Private Subobject _MouseDown(indexAs Long,
ByValButtonAs fmButton,
ByValShiftAs fmShiftState,
ByValXAs Single,
ByValYAs Single) Private Subobject _MouseUp(indexAs Long,
ByValButtonAs fmButton,
ByValShiftAs fmShiftState,
ByValXAs Single,
ByValYAs Single)

For other controls
Private Subobject _MouseDown( ByValButtonAs fmButton,
ByValShiftAs fmShiftState,
ByValXAs Single,
ByValYAs Single) Private Subobject _MouseUp( ByValButtonAs fmButton,
ByValShiftAs fmShiftState,
ByValXAs Single,
ByValYAs Single)

The MouseDown and MouseUp event syntaxes have these parts:

Part Description
object Required. A valid object.
index Required. The index of the page or tab in a MultiPage or TabStrip with the specified event.
Button Required. An integer value that identifies which mouse button caused the event.
Shift Required. The state of SHIFT, CTRL, and ALT.
X, Y Required. The horizontal or vertical position, in points, from the left or top edge of the form, Frame, or Page.

Settings

The settings for Button are:

Constant Value Description
fmButtonLeft 1 The left button was pressed.
fmButtonRight 2 The right button was pressed.
fmButtonMiddle 4 The middle button was pressed.

The settings for Shift are:

Value Description
1 SHIFT was pressed.
2 CTRL was pressed.
3 SHIFT and CTRL were pressed.
4 ALT was pressed.
5 ALT and SHIFT were pressed.
6 ALT and CTRL were pressed.
7 ALT, SHIFT, and CTRL were pressed.

You can identify individual keyboard modifiers by using the following constants:

Constant Value Description
fmShiftMask 1 Mask to detect SHIFT.
fmCtrlMask 2 Mask to detect CTRL.
fmAltMask 4 Mask to detect ALT.

For a MultiPage, the MouseDown event occurs when the user presses a mouse button over the control.

For a TabStrip, the index argument identifies the tab where the user clicked. An index of -1 indicates the user did not click a tab. For example, if there are no tabs in the upper-right corner of the control, clicking in the upper-right corner sets the index to -1.

For a form, the user can generate MouseDown and MouseUp events by pressing and releasing a mouse button in a blank area, record selector, or scroll bar on the form.

The sequence of mouse-related events is:

MouseDown or MouseUp event procedures specify actions that occur when a mouse button is pressed or released. MouseDown and MouseUp events enable you to distinguish between the left, right, and middle mouse buttons. You can also write code for mouse-keyboard combinations that use the SHIFT, CTRL, and ALT keyboard modifiers.

If a mouse button is pressed while the pointer is over a form or control, that object «captures» the mouse and receives all mouse events up to and including the last MouseUp event. This implies that the X, Y mouse-pointer coordinates returned by a mouse event may not always be within the boundaries of the object that receives them.

If mouse buttons are pressed in succession, the object that captures the mouse receives all successive mouse events until all buttons are released.

Use the Shift argument to identify the state of SHIFT, CTRL, and ALT when the MouseDown or MouseUp event occurred. For example, if both CTRL and ALT are pressed, the value of Shift is 6.

See also

Support and feedback

Have questions or feedback about Office VBA or this documentation? Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.

Источник

Click event

Occurs in one of two cases:

  • The user clicks a control with the mouse.
  • The user definitively selects a value for a control with more than one possible value.

Syntax

For MultiPage, TabStrip:
Private Subobject _Click(indexAs Long)

For all other controls:
Private Subobject _Click( )

The Click event syntax has these parts:

Part Description
object Required. A valid object.
index Required. The index of the page or tab in a MultiPage or TabStrip associated with this event.

Of the two cases where the Click event occurs, the first case applies to the CommandButton, Frame, Image, Label, ScrollBar, and SpinButton.

The second case applies to the CheckBox, ComboBox, ListBox, MultiPage, TabStrip, and ToggleButton. It also applies to an OptionButton when the value changes to True.

The following are examples of actions that initiate the Click event:

Clicking a blank area of a form or a disabled control (other than a list box) on the form.

Clicking a CommandButton. If the command button doesn’t already have the focus, the Enter event occurs before the Click event.

Pressing the SPACEBAR when a CommandButton has the focus.

Clicking a control.

Pressing ENTER on a form that has a command button whose Default property is set to True, as long as no other command button has the focus.

Pressing ESC on a form that has a command button whose Cancel property is set to True, as long as no other command button has the focus.

When the Click event results from clicking a control, the sequence of events leading to the Click event is:

For some controls, the Click event occurs when the Value property changes. However, using the Change event is the preferred technique for detecting a new value for a property. The following are examples of actions that initiate the Click event due to assigning a new value to a control:

Clicking a different page or tab in a MultiPage or TabStrip. The Value property for these controls reflects the current Page or Tab. Clicking the current page or tab does not change the control’s value and does not initiate the Click event.

Clicking a CheckBox or ToggleButton, pressing the SPACEBAR when one of these controls has the focus, pressing the accelerator key for one of these controls, or changing the value of the control in code.

Changing the value of an OptionButton to True. Setting one OptionButton in a group to True sets all other buttons in the group to False, but the Click event occurs only for the button whose value changes to True.

Selecting a value for a ComboBox or ListBox so that it unquestionably matches an item in the control’s drop-down list. For example, if a list is not sorted, the first match for characters typed in the edit region may not be the only match in the list, so choosing such a value does not initiate the Click event. In a sorted list, you can use entry-matching to ensure that a selected value is a unique match for text the user types.

The Click event is not initiated when Value is set to Null.

Clicking changes the value of a control, thus it initiates the Click event. When you right-click, the value of the control does not change, so it does not initiate the Click event.

See also

Support and feedback

Have questions or feedback about Office VBA or this documentation? Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.

Источник

События MouseDown, MouseUp

Выполняются при щелчке кнопкой мыши. Событие MouseDown выполняется, когда пользователь нажимает кнопку мыши, а MouseUp — когда отпускает.

Синтаксис

Для MultiPage— TabStrip
Частныйобъект Sub _MouseDown(indexAs Long,
Кнопка ByVal Как fmButton,
ByValShift— fmShiftState,
ByValXкак одиночный,
ByValYAs Single)Private Subobject _MouseUp(indexAs Long,
Кнопка ByVal Как fmButton,
ByValShift— fmShiftState,
ByValXкак одиночный,
ByValYкак одиночный)

Для других элементов управления
Частныйобъект Sub _MouseDown( ByValButtonAs fmButton,
ByValShift— fmShiftState,
ByValXкак одиночный,
ByValYAs Single)Private Subobject _MouseUp( ByValButtonAs fmButton,
ByValShift— fmShiftState,
ByValXкак одиночный,
ByValYкак одиночный)

Синтаксис событий MouseDown и MouseUp включает следующие элементы:

Part Описание
object Обязательно. Допустимый объект.
index Обязательно. Индекс страницы или вкладки в MultiPage или TabStrip с указанным событием.
Button Обязательно. Целое число, обозначающее кнопку мыши, вызвавшую событие.
Shift Обязательно. Состояние клавиш SHIFT, CTRL и ALT.
X, Y Обязательно. Горизонтальное или вертикальное положение в точках от левого или верхнего края формы, рамки или страницы.

Settings

Аргумент Button может принимать следующие значения:

Константа Значение Описание
fmButtonLeft 1 Нажата левая кнопка.
fmButtonRight 2 Нажата правая кнопка.
fmButtonMiddle 4 Нажата средняя кнопка.

Аргумент Shift может принимать следующие значения:

Значение Описание
1 Клавиша SHIFT была нажата.
2 Клавиша CTRL была нажата.
3 Клавиши SHIFT и CTRL были нажаты.
4 Клавиша ALT была нажата.
5 Клавиши ALT и SHIFT были нажаты.
6 Клавиши ALT и CTRL были нажаты.
7 Клавиши ALT, SHIFT и CTRL были нажаты.

Вы можете индивидуально указать клавиши CTRL, SHIFT или ALT, используя следующие константы:

Константа Значение Описание
fmShiftMask 1 Маска для определения клавиши SHIFT.
fmCtrlMask 2 Маска для определения клавиши CTRL.
fmAltMask 4 Маска для определения клавиши ALT.

Замечания

Для MultiPage событие MouseDown возникает, когда пользователь нажимает кнопку мыши на элемент управления.

Для tabStrip аргумент index определяет вкладку, на которой щелкнул пользователь. Индекс -1 указывает, что пользователь не щелкнул вкладку. Например, если в правом верхнем углу элемента управления нет вкладок, при щелчке в правом верхнем углу индексу присваивается значение -1.

События MouseDown и MouseUp для формы выполняются, когда пользователь нажимает и отпускает кнопку мыши в пустой области, на указателе записи или полосе прокрутки формы.

События, связанные с мышью, выполняются в следующем порядке:

Процедуры событий MouseDown и MouseUp содержат действия, выполняющиеся, когда пользователь нажимает или отпускает кнопку мыши. События MouseDown и MouseUp позволяют различать нажатия левой, правой и средней кнопок мыши. Также можно написать код для сочетаний мыши и клавиатуры, использующих модификаторы клавиш SHIFT, CTRL и ALT.

Если в момент нажатия кнопки мыши указатель находится на форме или элементе управления, этот объект «захватывает» мышь и получает все события, связанные с мышью, до события MouseUp включительно. При этом подразумевается, что координаты указателя X и Y, возвращаемые событием, могут не находиться в пределах объекта, получающего их.

Если кнопки мыши нажаты последовательно, объект, захватывающий мышь, последовательно получает все события, пока все кнопки не будут отпущены.

Аргумент Shift используется для определения состояния клавиш SHIFT, CTRL и ALT при выполнении событий MouseDown и MouseUp. Например, если нажаты клавиши CTRL и ALT, аргумент Shift принимает значение 6.

См. также

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.

Источник

You could use Excel VBA to move the mouse and click on things (left and right click). Below is an example of moving the mouse to the top left of the screen and then clicking. Just copy the code and paste it into macro window in Excel.

The SingleClick() subroutine is a single click, while DoubleClick() subroutine does a double click. The code is quite self explanatory and needs minimal instructions.

Note that SetCursorPos moves the mouse based on the coordinates supplied. The first parameter is the # of pixels to the right from the top left corner of the monitor (x-axis) and the second parameter is the # of pixels below the top left corner of the monitor (y-axis). If the user is using duel monitors, it will be top left corner of the the left most monitor.

Public Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long
Public 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)
Public Const MOUSEEVENTF_LEFTDOWN = &H2
Public Const MOUSEEVENTF_LEFTUP = &H4
Public Const MOUSEEVENTF_RIGHTDOWN As Long = &H8
Public Const MOUSEEVENTF_RIGHTUP As Long = &H10

Private Sub SingleClick()
  SetCursorPos 100, 100 'x and y position
  mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0
  mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
End Sub

Private Sub DoubleClick()
  'Double click as a quick series of two clicks
  SetCursorPos 100, 100 'x and y position
  mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0
  mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
  mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0
  mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
End Sub

Private Sub RightClick()
  'Right click
  SetCursorPos 200, 200 'x and y position
  mouse_event MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0
  mouse_event MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0
End Sub

  20 people found this article useful

  20 people found this article useful

 

visors16

Пользователь

Сообщений: 210
Регистрация: 07.10.2016

Здравствуйте, господа программисты.
Помогите разобраться.

Есть код, который вроде должен эмулировать нажатие ПРАВОЙ кнопки мышки — в некую координату на экране.
Однако я не понимаю — как прицепить этот макрос к кнопке.

Как заставить этот макрос эмулировать нажатие ПРАВОЙ кнопки мышки — в точку экрана с координатами (100;200) ?

Вот сам код с описанием:

Код
'Подключение функции API Windows "mouse_event" из Виндосовской библиотеки "user32", которая позваляет управлять мышью
Private Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal dwData As Long, ByVal dwExtraInfo As Long)
'Значения параметра dwFlags, определяющие поведение функции mouse_event
Private Const MOUSEEVENTF_LEFTDOWN = &H2  'Нажать левую кнопку
Private Const MOUSEEVENTF_LEFTUP = &H4  'Отпустить левую кнопку
 
'Подключение функции API Windows "SetCursorPos", которая устанавливает позицию курсора мыши по координатам, соответствующим разрешению вашего монитора
Private Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long
 
'Подключение функции API Windows "Sleep", её можно использовать вместо таймера, выставляя задержки в милисекундах
Private Declare Sub Sleep Lib "kernel32" (ByVal milliseconds As Long)
 
Sub MouseDragging(x1, y1, x2, y2) 'Перетаскивание объекта из координаты (x1,y1) в координаты (x2,y2)или выделение текста/изображения в прямоугольной области (x1, y1; x2, y2)
Call SetCursorPos(x1, y1)
mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0
Call SetCursorPos(x2, y2)
mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
End Sub
 
Sub MouseClick(x, y) 'Клик мыши по координатам (x,y)
Call SetCursorPos(x, y)
mouse_event MOUSEEVENTF_LEFTDOWN Or MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
End Sub
 
Private Sub CommandButton1_Click()
Sleep (500)
Call MouseDragging(889, 490, 388, 467)
Sleep (2000)
Call MouseClick(768, 419)
End Sub

Возможные значения параметра dwFlags, определяющие поведение функции mouse_event
Private Const MOUSEEVENTF_RIGHTDOWN = &H8 ‘Нажать правую кнопку
Private Const MOUSEEVENTF_RIGHTUP = &H10 ‘Отпустить правую кнопку

Прикрепленные файлы

  • 3233.xls (36.5 КБ)

Изменено: visors1628.03.2017 20:43:55

Понравилась статья? Поделить с друзьями:
  • Excel vba квадратные скобки
  • Excel vba календарь для формы
  • Excel vba какой лист активный
  • Excel vba какая ячейка выделена
  • Excel vba как ячейке значение другой ячейки