1

.NET コンポーネントと Delphi コンポーネントの両方を含むアプリケーションがあり、両方のコンポーネントで (SetWindowsHookEx を使用して) キーボード フックに登録します。最初に .NET に登録し、後で Delphi に登録します。

問題は、Delphi のフック デリゲートが .NET のフック デリゲートの前に呼び出されることです。

MSDN によると、フック チェーンは単なるリストであり、私が理解しているように、登録の順序に従ってデリゲートを呼び出す必要があります。

ここで何が起こっているのか誰にも分かりますか?前もって感謝します!

4

2 に答える 2

2

あなたは誤解しました。MSDNのフックの概要では、次のように説明されています (強調を追加)。

SetWindowsHookEx関数は、常にフックチェーンの先頭にフック プロシージャをインストールします。特定のタイプのフックによって監視されるイベントが発生すると、システムはそのフックに関連付けられたフック チェーンの先頭でプロシージャを呼び出します。チェーン内の各フック プロシージャは、イベントを次のプロシージャに渡すかどうかを決定します。フック プロシージャは、 CallNextHookEx関数を呼び出して、イベントを次のプロシージャに渡します。

したがって、Delphi フックが最後にインストールされ、最初に呼び出された場合、これはまさに予期される動作です。「進んでいる」ということはまったくありません。

于 2010-08-29T17:34:34.353 に答える
1

フック リストはリストではなくチェーンです。新しくインストールされたフックは、以前のものへの参照を保持します。これは、後でインストールされたフックが、以前にインストールされたフックの前に常に実行されることを意味します。

于 2010-08-29T17:07:12.607 に答える