マウスイベントのシミュレート          <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