0

低レベルのキーボード フックを行う .Net アプリケーションに取り組んでいます。デバッガー内で実行されている SetWindowsHookEx を呼び出すと、呼び出しは常に失敗します。

コンパイルされた実行可能ファイルから実行すると、すべて正常に動作します。プロセスにアタッチすると、SetWindowsHookEx が呼び出され、すべてが機能します。

私はVSがすでに低レベルのキーボードフックを行っていることをどこかで読んだことがあります(思い出せません)が、CallNextHook関数があるため、これは問題になりません。

誰かが何が起こっているか知っていますか?

編集:コードはかなり厳格です。例外はデバッガーの内部でスローされますが、外部ではスローされません。

Public Sub New()
    m_callback = New NativeMethods.KeyboardHookDelegate(AddressOf KeyboardCallback)
End Sub

Public Sub Start()
    m_handle = NativeMethods.SetWindowsHookEx(NativeMethods.HookType.WH_KEYBOARD_LL, m_callback, Marshal.GetHINSTANCE(Reflection.Assembly.GetExecutingAssembly().GetModules()(0)).ToInt32, 0)
    If m_handle = 0 Then
        Throw New Exception()
    End If
End Sub
4

1 に答える 1

2

VS が .vshost.exe プロセスを実行していると推測されますが、これはリフレクションでは異なるように見える可能性がありますが、確かなことは言えません。「Process.GetCurrentProcess().MainModule」を使用してモジュールを取得します。試してみてください。

于 2010-04-19T23:59:46.843 に答える