マウスイベントのシミュレート <TOP>
マウスボタンのイベントをシミュレートします。
GetWindowRect ウィンドウの座標をスクリーン座標系で取得
FindWindow 指定された文字列と一致するクラス名とウィンドウ名を持つトップレベルウィンドウのハンドルを返す
ウインドウ(フォーム)の位置はクラス名からFindWindowでハンドルを取得しGetWindowRectで左上の座標を読み取っています。
フォーム上のボタン位置は既知の値であり、そのほぼ中点にカーソルを移動しクリック操作をシミュレートしています。
MOUSEEVENTF_ABSOLUTEは、絶対座標(スクリーン座標 Left=0・Top=0・Right=65535・Bottom=65535)を要求します。
'================================================================ '= マウスイベントのシミュレート '= (mouse_event.bas) '================================================================ #include "Windows.bi" Type RECT Left As Long Top As Long Right As Long Bottom As Long End Type ' ウィンドウの座標をスクリーン座標系で取得 Declare Function Api_GetWindowRect& Lib "user32" Alias "GetWindowRect" (ByVal hWnd&, lpRect As RECT) ' 指定された文字列と一致するクラス名とウィンドウ名を持つトップレベルウィンドウのハンドルを返す Declare Function Api_FindWindow& Lib "user32" Alias "FindWindowA" (ByVal lpClassName$, ByVal lpWindowName$) ' マウスイベントの生成 Declare Sub Api_mouse_event Lib "user32" Alias "mouse_event" (ByVal dwFlags&, ByVal dx&, ByVal dy&, ByVal cButtons&, ByVal dwExtraInfo&) #define MOUSEEVENTF_ABSOLUTE &H8000 '絶対座標(スクリーン座標 Left=0・Top=0・Right=35535・Bottom=65535) #define MOUSEEVENTF_LEFTDOWN &H2 'マウス左ボタンDOWN #define MOUSEEVENTF_LEFTUP &H4 'マウス左ボタンUP #define MOUSEEVENTF_MIDDLEDOWN &H20 'マウス中ボタンDOWN #define MOUSEEVENTF_MIDDLEUP &H40 'マウス中ボタンUP #define MOUSEEVENTF_MOVE &H1 'マウス移動 #define MOUSEEVENTF_RIGHTDOWN &H8 'マウス右ボタンDOWN #define MOUSEEVENTF_RIGHTUP &H10 'マウス右ボタンUP '================================================================ '= '================================================================ Declare Sub MainForm_Start edecl () Sub MainForm_Start() Var rct As RECT Var lpClassName As String Var hWnd As Long lpClassName = "F1A0WCMAINFORM" hWnd = Api_FindWindow(lpClassName, ByVal 0) Ret = Api_GetWindowRect(hWnd, rct) x = (rct.Left + GetWidth - 30) / GetDeviceCaps(8) * 65535 '絶対座標(x) y = (rct.Top + GetHeight - 20) / GetDeviceCaps(10) * 65535 '絶対座標(y) Wait 100 Api_mouse_event MOUSEEVENTF_MOVE Or MOUSEEVENTF_ABSOLUTE, x, y, 0, 0 Api_mouse_event MOUSEEVENTF_LEFTDOWN Or MOUSEEVENTF_LEFTUP, 0, 0, 0, 0 End Sub '================================================================ '= '================================================================ Declare Sub Button1_on edecl () Sub Button1_on() A% = MessageBox(GetWindowText, "ボタンが押されました!" & Chr$(13) & Chr$(13) & "終了します!", 0, 2) End End Sub '================================================================ '= '================================================================ While 1 WaitEvent Wend Stop End