=====Automating mouse actions=====
//by Richard Russell, October 2008//\\ \\ You may on occasion want to automate mouse actions, such as simulating the effect of the user clicking a button or rotating the wheel. One use for such a facility could, for example, be in a training or tutorial situation where you wish to illustrate how to use the mouse to achieve a particular result.\\ \\ Windows provides the means to do that by means of the **SendInput** API (Windows 98 and later only). The following code has the same effect as the user double-clicking the left mouse button:
_INPUT_MOUSE = 0
_MOUSEEVENTF_LEFTDOWN = 2
_MOUSEEVENTF_LEFTUP = 4
DIM Input{type%, Mouse{dx%, dy%, mouseData%, dwFlags%, time%, dwExtraInfo%}}
Input.type% = _INPUT_MOUSE
Input.Mouse.dwFlags% = _MOUSEEVENTF_LEFTDOWN
SYS "SendInput", 1, Input{}, DIM(Input{})
Input.Mouse.dwFlags% = _MOUSEEVENTF_LEFTUP
SYS "SendInput", 1, Input{}, DIM(Input{})
Input.Mouse.dwFlags% = _MOUSEEVENTF_LEFTDOWN
SYS "SendInput", 1, Input{}, DIM(Input{})
Input.Mouse.dwFlags% = _MOUSEEVENTF_LEFTUP
SYS "SendInput", 1, Input{}, DIM(Input{})
Other constants that you may need are as follows:
_MOUSEEVENTF_RIGHTDOWN = &8
_MOUSEEVENTF_RIGHTUP = &10
_MOUSEEVENTF_MIDDLEDOWN = &20
_MOUSEEVENTF_MIDDLEUP = &40
_MOUSEEVENTF_WHEEL = &800
In the case of wheel movements the **mouseData%** member of the structure must be loaded with a positive value for rotations //away from// the user, and a negative value for rotations //towards// the user. A value of 120 corresponds to one 'click':
_INPUT_MOUSE = 0
_MOUSEEVENTF_WHEEL = &800
DIM Input{type%, Mouse{dx%, dy%, mouseData%, dwFlags%, time%, dwExtraInfo%}}
Input.type% = _INPUT_MOUSE
Input.Mouse.dwFlags% = _MOUSEEVENTF_WHEEL
Input.Mouse.mouseData% = 120
SYS "SendInput", 1, Input{}, DIM(Input{})
The **SendInput** API provides many other facilities, such as simulating keyboard input (you can use it as an alternative to the method described at [[/Faking%20keyboard%20input|Faking keyboard input]]). For full details see the relevant [[http://msdn.microsoft.com/en-us/library/ms646310.aspx|Microsoft documentation]].