ある特定のウィンドウ内のみでフックするには?


shiva  2003-09-26 20:28:17  No: 79571

初めての書き込み&質問です。初心者ですがどうぞよろしくお願いします。

別プロセスのアプリケーションのキー(ファンクションキー)とマウスクリックをフックしたいのです。
過去ログなどを読みVBではグローバルフックは無理だとは承知しているのですが、ある特定のウィンドウ内での操作だけなら可能なのではないかと期待をかけてます。

HPなどを回り調べ、ファンクションキー(どれか1つだけでいいのです)をホットキーとして登録し、それを拾うことにより感知出来たはいいのですが、相手先のアプリケーションのフックしたファンクションキーの機能が働かないのです。

また、マウスは左クリックをしたかどうかを調べたいのですが、どうにもうまくいきません。

というのも、FindWindowを使い、相手先のウィンドウハンドルを取得するにはしたのですが、どう使うかが(^^;)

質問がとてもわかりにくいかもしれませんが、ご教授よろしくお願いいたします。
もしサンプルなどがあったならうれしいです。


shiva  2003-09-26 21:35:11  No: 79572

主要個所のソースを乗せます。

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加