[bmx] Programmatically click the mouse by Who was John Galt? [ 1+ years ago ]

Started by BlitzBot, June 29, 2017, 00:28:42

Previous topic - Next topic

BlitzBot

Title : Programmatically click the mouse
Author : Who was John Galt?
Posted : 1+ years ago

Description : Windows only at the mo. Button_down simulates a button down event, and button_up and mouse button release event. Values for button are as per mousedown() function. Additions/improvements welcomed.

Code :
Code: blitzmax
Global GetLastError:Int() "win32"
Global SendInput(nInputs,pInputs,cbSize) "win32"

kernel32 = LoadLibraryA ("kernel32.dll")
If kernel32
	GetLastError=GetProcAddress(kernel32, "GetLastError")
Else
   Print "Kernel32 dead"; End
EndIf

user32 = LoadLibraryA ("user32.dll")
If user32
	SendInput=GetProcAddress(user32, "SendInput")
Else
   Print "User32 dead"; End
EndIf

Rem
UINT SendInput(          UINT nInputs,
    LPINPUT pInputs,
    Int cbSize
);
EndRem

Type Tbuf_input
	Rem
			typedef struct tagINPUT { 
	  DWORD Type; 
	  union {MOUSEINPUT mi; 
	            KEYBDINPUT ki;
	            HARDWAREINPUT hi;
	           };
	  }Input, *PINPUT;
	
	
		typedef struct tagMOUSEINPUT {
	    	LONG dx;
	    	LONG dy;
	    	DWORD mouseData;
	    	DWORD dwFlags;
	    	DWORD time;
	    	ULONG_PTR dwExtraInfo;
		} MOUSEINPUT, *PMOUSEINPUT;
	
		
	EndRem
	
	Rem
	#define MOUSEEVENTF_MOVE        0x0001 /* mouse move */
	#define MOUSEEVENTF_LEFTDOWN    0x0002 /* Left button down */
	#define MOUSEEVENTF_LEFTUP      0x0004 /* Left button up */
	#define MOUSEEVENTF_RIGHTDOWN   0x0008 /* Right button down */
	#define MOUSEEVENTF_RIGHTUP     0x0010 /* Right button up */
	#define MOUSEEVENTF_MIDDLEDOWN  0x0020 /* middle button down */
	#define MOUSEEVENTF_MIDDLEUP    0x0040 /* middle button up */
	#define MOUSEEVENTF_XDOWN       0x0080 /* x button down */
	#define MOUSEEVENTF_XUP         0x0100 /* x button down */
	#define MOUSEEVENTF_WHEEL       0x0800 /* wheel button rolled */
	#define MOUSEEVENTF_VIRTUALDESK 0x4000 /* map To entire virtual Desktop */
	#define MOUSEEVENTF_ABSOLUTE    0x8000 /* absolute move */
	EndRem
	
	
	
	Field _type=0		
	'mouse bits
	Field dx:Int=0		
	Field dy:Int=0
	Field mousedata=0	'int or dword=16 bits
	Field dwFlags=0
	Field time=0
	Field dwExtraInfo:Long Ptr=Null 
	
	Method input_ptr()
		Return Int(Varptr(_type))
	End Method
End Type

Type Tmouse_controller
	Global buffer_input:Tbuf_input=New Tbuf_input
	Global down_events[]=[$2,$8,$20]
	Global up_events[]=[$4,$10,$40]
	Global input_pointer=buffer_input.input_ptr()
	
	Method button_down(button)
		buffer_input.dwFlags=down_events[button-1]
		sendinput(1,input_pointer,28)
	End Method
	
	Method button_up(button)
		buffer_input.dwFlags=up_events[button-1]
		sendinput(1,input_pointer,28)
	End Method
End Type

Graphics 800,600,0
Global mousecont:Tmouse_controller=New Tmouse_controller

Repeat
	Cls
	
	mousecont.button_down(3)
	
	'e=GetLastError()
	'DrawText e,100,500
	If MouseDown(1) DrawText "Button 1 down",100,100
	If MouseDown(2) DrawText "Button 2 down",100,200
	If MouseDown(3) DrawText "Button 3 down",100,300
		
	Flip()
	
Until KeyHit(KEY_ESCAPE)


Comments : none...