I am trying to go around HTMLViewer limitations and would like to simulate the mouse.
I already found this to change the mouse position :
[quote=51204:@Mike Charlesworth]For windows see https://www.boxedbyte.com/xippet-124 for the same.
Just add the code to the open event of pushbutton on the modal window and set the position to the centre of the button
Declare Function SetCursorPos Lib "user32" (ByVal x As Integer, ByVal y As Integer) As Integer
// Set cursor position to top left of screen
Now I am trying to find a way to simulate a click.
I found the mouse_event function in the MS documentation at http://msdn.microsoft.com/en-us/library/windows/desktop/ms646260(v=vs.85).aspx
VOID WINAPI mouse_event(
_In_ DWORD dwFlags,
_In_ DWORD dx,
_In_ DWORD dy,
_In_ DWORD dwData,
_In_ ULONG_PTR dwExtraInfo
Apparently all parameters are integers.
Then I found this http://vb-helper.com/howto_move_click_mouse.html
' see the page for all the code. I retained only the part I wanted.
' Move the mouse to its final destination and click it.
MOUSEEVENTF_ABSOLUTE + _
MOUSEEVENTF_MOVE + _
MOUSEEVENTF_LEFTDOWN + _
dest_x, dest_y, 0, 0
I already have the snippet from Xippets to move the cursor. Now I need to translate the last block of code to Xojo. This where I am :
[code]Declare sub mouse_event Lib “user32” (ByVal dwFlags As Integer, ByVal dx As Integer, ByVal dy As Integer, ByVal dwData As Integer, ByVal dwExtraInfo As Integer)
//Not so sure const is integer. May have to do dim instead
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
const MOUSEEVENTF_WHEEL = &h800
const MOUSEEVENTF_XDOWN = &h80
const MOUSEEVENTF_XUP = &h100
const MOUSEEVENTF_HWHEEL = &h1000
Dim cur_x As integer
Dim cur_y As integer
Dim dest_x As integer = 150+self.left+1 // value in points
Dim dest_y As integer = 100+self.top+1 //value in points
Dim dx As integer
Dim dy As integer
coords(dest_x,dest_y) //converts points to normalized absolute
call mouse_event(MOUSEEVENTF_ABSOLUTE+MOUSEEVENTF_MOVE+MOUSEEVENTF_LEFTDOWN+MOUSEEVENTF_LEFTUP,dest_x, dest_y, 0, 0)
The values dest_x and dest_y to call the API are not in points but in “normalized absolute” form 0 to 65535,65535 being the lower right corner. So I had to figure a conversion between the screen resolution and these coordinates. As the coordinates are relative to 0,0 of the screen, I have to add the left and top of the window. And I don’t know why, the resulting click is 1 pix off horizontally and vertically, so I add that as well.
Sub coords(ByRef x as integer, ByRef y as integer)
x = (65535/screen(0).width)*x
y = (65535/screen(0).height)*y
I will appreciate any comment and improvement suggestion. TIA.