タイトル : Re^4: SendInput関数が Vistaで動作しないのですが? 投稿日 : 2009/09/19(Sat) 16:14 投稿者 : 魔界の仮面弁士
> 上記の場合メニューバーの高さを考慮されていないので、メニューが付いている場合は > Form をクリックする事になります。 スレッドが長くなってきたので、話を追いきれていないのですが、 >> ただ、私が本当に欲しい、 >> Private Sub Command2_Click() >> 'Command1ボタンをクリック >> End Sub >> だけはだめでした。残念。 だけが目的であれば、 Private Sub Command2_Click() Command1.Value = True End Sub と書けるかと思います。マウス操作という本題からは外れますけれども。 また、マウス座標の移動先という点については、フォーム内の Left / Top 等から 算出するのではなく、API でデスクトップ座標を得るようにしてみては如何でしょうか。 (その方が、Frame 等の上に配置されていたりした場合にも対応しやすいですし) Option Explicit Private Type RECT x1 As Long y1 As Long x2 As Long y2 As Long End Type Private Type POINTAPI x As Long y As Long End Type Private Declare Function GetWindowRect Lib "user32" ( _ ByVal hwnd As Long, ByRef rectangle As RECT) As Long Private Declare Function SetCursorPos Lib "user32" _ (ByVal x As Long, ByVal y As Long) As Long Private Function GetBound(ByVal btn As VB.CommandButton) As RECT GetWindowRect btn.hwnd, GetBound End Function Private Function GetCenterLocation(ByVal btn As VB.CommandButton) As POINTAPI With GetBound(btn) GetCenterLocation.x = (.x1 + .x2) \ 2 GetCenterLocation.y = (.y1 + .y2) \ 2 End With End Function Private Sub Command2_Click() With GetCenterLocation(Command1) SetCursorPos .x, .y End With End Sub なお、クリックすることが目的ではなく、クリック時の動作を呼び出す事が 目的なのであれば、IAccessible.accDoDefaultAction を使うという選択肢もあります。 '参照設定 oleacc.dll Option Explicit Private Declare Function AccessibleObjectFromWindow Lib "oleacc" _ (ByVal hWnd As Long, ByVal dwObjectID As Long, _ ByRef riid As Currency, ByRef ppvObject As Any) As Long Private Sub ButtonClick(ByVal targetButton As VB.CommandButton) Dim IID_IAccessible(1) As Currency '{618736E0-3C3D-11CF-810C-00AA00389B71} IID_IAccessible(0) = 128331065315080.368@ IID_IAccessible(1) = 818619832317929.3825@ Const OBJID_CLIENT As Long = &HFFFFFFFC Dim objAcc As IAccessible Dim r As Long r = AccessibleObjectFromWindow(targetButton.hWnd, OBJID_CLIENT, IID_IAccessible(0), objAcc) If r = 0 Then objAcc.accDoDefaultAction Else Err.Raise r End If End Sub Private Sub Command2_Click() ButtonClick Command1 End Sub |