|
■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
ともかくもう少し動かし続けてどのくらい動くか確認してみます
|