初めての書き込み&質問です。初心者ですがどうぞよろしくお願いします。
別プロセスのアプリケーションのキー(ファンクションキー)とマウスクリックをフックしたいのです。
過去ログなどを読みVBではグローバルフックは無理だとは承知しているのですが、ある特定のウィンドウ内での操作だけなら可能なのではないかと期待をかけてます。
HPなどを回り調べ、ファンクションキー(どれか1つだけでいいのです)をホットキーとして登録し、それを拾うことにより感知出来たはいいのですが、相手先のアプリケーションのフックしたファンクションキーの機能が働かないのです。
また、マウスは左クリックをしたかどうかを調べたいのですが、どうにもうまくいきません。
というのも、FindWindowを使い、相手先のウィンドウハンドルを取得するにはしたのですが、どう使うかが(^^;)
質問がとてもわかりにくいかもしれませんが、ご教授よろしくお願いいたします。
もしサンプルなどがあったならうれしいです。
主要個所のソースを乗せます。
Private Sub Form_Load()
'F1〜F9(ファンクションキー)
For I = 112 To 120
Combo1.AddItem "F" & (I - 111) & " キー"
Combo1.ItemData(Combo1.NewIndex) = I
Next I
Combo1.ListIndex = 0
'サブクラス化開始
Call SubClass(Me.hwnd)
End Sub
Private Sub Command1_Click()
Dim lngHotKeyFlg As Long
If Command1.Caption = "スタート" Then
'ホットキー設定
If SetHotKey(Me.hwnd, PC_HOTKEYID, lngHotKeyFlg, Combo1.ItemData(Combo1.ListIndex)) = 0 Then
MsgBox "ホットキーの設定に失敗しました。"
Else
Command1.Caption = "ストップ"
SetCapture Form1.hwnd
End If
Else
'ホットキー解除
Call UnSetHotKey(Me.hwnd)
Command1.Caption = "スタート"
End If
End Sub
Public Function WindowProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Select Case uMsg
Case WM_HOTKEY
If wParam = P_HotKeyID Then
MsgBox "ホットキーイベントが発生しました"
End If
Case WM_LBUTTONDOWN
MsgBox "マウス左ボタンを押しました"
Case WM_RBUTTONDOWN
MsgBox "マウス右ボタンを押しました"
End Select
WindowProc = CallWindowProc(P_hwndNext, hwnd, uMsg, wParam, lParam)
End Function
Public Sub SubClass(hwnd As Long)
P_hwndNext = SetWindowLong(hwnd, GWL_WNDPROC, AddressOf WindowProc)
End Sub
ツイート | ![]() |