0

私はC++のバックグラウンドをあまり持っていませんが、ウィンドウをフックし、そのメッセージをアプリケーションが消費できる発生したイベントに変換することに成功しました。実例。

まず、ウィンドウのキープレス、キーダウン、キーアップ、マウスムーブ、マウスダウン、vscroll、hscroll、vresize、hresize など、すべての通常のイベントを発生させる完全な実装があります。クラスが正しく実装されていることを確認することに興味があります。

次に、NativeWindow によって生成されたイベントを適切に調整して、実装のおしゃべりを制限するにはどうすればよいですか。

4

2 に答える 2

2

別のアプリケーションでウィンドウをフックすることについて話していると思います。これは重要な問題です。wparam および lparam 引数には、単純な値ではなくポインターが含まれる場合があります。ただし、これらのポインターは、フックしたウィンドウのプロセスの仮想メモリ空​​間でのみ有効です。これを無視すると、AccessViolation 例外が発生します。

参照先の構造を読み取るには、P/Invoke ReadProcessMemory() を実行する必要があります。これは個々のメッセージごとに行う必要があり、一般的な実装に頼ることはできません。ListView や TreeView のような重要なウィンドウをフックすると、非常に複雑になる可能性があります。

于 2009-12-21T21:40:44.727 に答える
1

これを行うほとんどのプログラムは、DLL インジェクションを使用して、ウィンドウを所有するプロセス内からイベントを処理します。もちろん、マネージ コードを別のプロセスに挿入してはなりません。アプリケーションの状態を台無しにしないように細心の注意を払っているネイティブ コードのみを挿入してください。

何を達成しようとしていますか?他のアプリケーションのウィンドウをフックするのは最後の手段です。

于 2009-12-21T22:01:06.640 に答える