2

Windows の他のプロセス (プロセス ID がわからない可能性があります) で API (MessageBox() など) をフックしようとしていますが、SetWindowsHookEx() 関数を使用する必要があることはわかっています。それでも、3 つの質問があります。

1) SetWindowsHookEx() 関数はフックをグローバルに、つまり現在のプロセスに限定されないようにすることはできますか? (これらのアプリケーションがこの API を呼び出すと、フックされますか?)

2) フックする API を独自の関数に置き換えたい場合、どうすればよいですか?

3) 多くの資料を読み、「フック手順」または「フック関数」という用語を見つけました。これをどのように理解すればよいでしょうか?現在、私は API を置き換えるために使用する関数としてそれを使用します (もう一度言います、MessageBox)。

4

2 に答える 2

3

これはSetWindowsHookEx目的ではありません。SetWindowsHookExAPIではなく、Windowsメッセージにフックするためのものです(たとえば、ウィンドウのサイズが変更されたときや作成されたときに知りたい場合など)。

API 呼び出しのフックは、より複雑で面倒です。それを行う組み込みの方法はありません。通常、 Detoursなどの役立つライブラリを見つけたいと思うでしょう。

于 2012-09-13T08:38:20.180 に答える
1

これにはDeviare API Hookを使用できます。このライブラリを使用すると、.NET でも 10 行のコードで任意の API をフックできます。 Detours との違いは、各プロセスに挿入されるコードを記述する必要がないことです。アタッチするだけで、必要なすべてのプロセスをフックできます。次に、独自のプロセスで呼び出しを受け取ります。

于 2012-09-13T14:28:10.897 に答える