この記事は機械翻訳のミラー記事です。元の記事にジャンプするにはこちらをクリックしてください。

眺める: 18171|答える: 0

[通信] 純粋なC#フック実装

[リンクをコピー]
掲載地 2019/02/07 21:10:23 | | |
純粋なC#フック実装

システムフックを実装するには実はとても簡単で、3つのWin32 APIを呼び出すだけです。
SetWindowsHookExはフックを設定するために使われます。 (必要な情報を確認するためのカードを用意してください)

CallNextHookExはフックを渡すために使われます(メッセージは重要なので、送信元はブロックしたい場所に戻すべきです)




UnhookWindowsHookEx アンインストールフック(アンインストールは非常に重要です。設定が固まると混雑が起きます)


「HOW TO: Setting Window Hooks in Visual C# .NET」という記事では次のように説明されています:
.NETフレームワークではグローバルフックはサポートされていません
Microsoft .NETフレームワークではグローバルフックを実装できません。 グローバルフックをインストールするには、フックにネイティブの動的リンクライブラリ(DLL)をエクスポートし、有効かつ一貫した関数として呼び出す必要がある別のプロセスに挿入できるようにする必要があります。 これにはDLLエクスポートが必要ですが、.NETフレームワークではサポートされていません。 管理コードには関数ポインタに一様な価値があるという概念はありません。なぜなら、これらの関数は動的に構築された代理関数だからです。
インターネットで多くのコードを見つけましたが、そのほとんどにはlpfnが言及しているサブルーチンを含むDLLを特定するためのC++ DLLが含まれており、この主張を裏付けているようです。

しかし実際にはそうではなく、グローバルフックは以下のコードで実装可能です。
IntPtr pInstance = Marshal.GetHINSTANCE( Assembly.GetExecutingAssembly(). ManifestModule);
Win32API.SetWindowsHookEx( WH_MOUSE_LL,m_MouseHookProcedure, pInstance, 0);
注意:ManifestModuleプロパティは.Net Framework 2.0の新たに追加されたもので、まだ使っている場合は Net Framework 1.xでは、GetModulesメソッドを使って現在のアセンブリのすべてのモジュールを取得し、そのうちの1つをGetHINSTANメソッドのパラメータとして使って適切なハンドルポインタを取得できます。





先の:C#のデリゲート
次に:C#プログラミングスキルにおけるフック関数の利用 - SetWindowsHookEx
免責事項:
Code Farmer Networkが発行するすべてのソフトウェア、プログラミング資料、記事は学習および研究目的のみを目的としています。 上記の内容は商業的または違法な目的で使用されてはならず、そうでなければ利用者はすべての結果を負うことになります。 このサイトの情報はインターネットからのものであり、著作権紛争はこのサイトとは関係ありません。 ダウンロード後24時間以内に上記の内容を完全にパソコンから削除してください。 もしこのプログラムを気に入ったら、正規のソフトウェアを支持し、登録を購入し、より良い本物のサービスを受けてください。 もし侵害があれば、メールでご連絡ください。

Mail To:help@itsvse.com