C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 144 を表示中)
■84503 / )  Re[2]: SetWindowsHookExが応答しなくなる
□投稿者/ ねこまっしぐら (4回)-(2017/07/09(Sun) 21:34:10)
No84501 (魔界の仮面弁士 さん) に返信
いつもお世話になっております

> SetWindowsHookEx API の戻り値って、フックプロシージャのハンドル(HHOOK)ですよね。
> Int32 ではなく、IntPtr で受け取るべきではないでしょうか。

とりあえずIntPtrにしてみたらかなり動くようになりました
FirrFoxがメモリ食い尽くすまで1時間程動いてました
ただ不思議なのはこのライブラリ使った別々のプログラム同時に動かしてても
黙り込んだりしなかったり…

>>    hMHook = SetWindowsHookEx(WH_MOUSE_LL, MHookProc, GetModuleHandle(Process.GetCurrentProcess().MainModule.ModuleName), 0)
> インスタンスハンドルを受け取るなら、Marshal.GetHINSTANCE メソッドが使えませんでしたっけ。

    hMHook = SetWindowsHookEx(WH_MOUSE_LL, MHookProc, Marshal.GetHINSTANCE(Assembly.GetExecutingAssembly().GetModules()(0)), IntPtr.Zero)
ということでしょうか?

> あと、開発環境から利用する場合は、Visual Studio ホスティング プロセスが
> 無効になっているかどうかも確認を。

無効になっています

> それ以外だと、記載されていない CallBack デリゲートが適切かどうか、とか。

こんな感じですが
    MHookProc = AddressOf MyMouseHookProc

    Public Function MyMouseHookProc(ByVal nCode As Int32, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As Int32
        Dim WP As Int32 = wParam.ToInt32

        Select Case WP
            Case WM_MOUSEMOVE
                RaiseEvent MouseMove(Me, e)
                If e.Handled Then Return 1
           :
          (略)
           :
        End Select

        Return CallNextHookEx(hMHook, nCode, wParam, lParam)
    End Function

ともかくもう少し動かし続