2

グローバルシェルフックを使用して、Windowsで作成および破棄されたイベントをリッスンしようとしていますが、プログラムが破棄されたイベントをローカルスレッドに登録しているだけのようです。作成イベントはまったくありません。また、そうあるべきだと私が思うグローバルイベントでもありません。

私は最後の日をグーグル、codeguru、codeproject、msdnの精査に費やしましたが、明らかにそうではありませんが、私はそれを正しく行っているように見えます。誰かが私を正しい方向に向けるのを手伝ってもらえますか?

#pragma data_seg(".SHARE")
HWND hWndServer = NULL;
HHOOK g_shell_hook = NULL;
#pragma data_seg()
#pragma comment(linker, "/section:.SHARE,RWS")

TASKBAR_API int StartShellHook(HWND hWnd)
{
    g_shell_hook = SetWindowsHookEx(WH_SHELL, ShellProc, g_dll_module_handle, 0);
    if(g_shell_hook)
        hWndServer = hWnd;
    return (g_shell_hook != NULL);
}

これがシェルにフックするための私のコードです。これはすべて私には正しいようですが、やはり、適切な出力が得られません。現在、ShellProc関数は、ウィンドウで簡単な変数インクリメントを実行してメッセージを作成および破棄するように設定されていますが、プログラムはローカルウィンドウの破棄メッセージのブレークのみをヒットします。繰り返しになりますが、どんな助けでも素晴らしいでしょう、事前にどうもありがとうございました。

4

2 に答える 2

0

これが発生する可能性がある理由の1つは、32ビットDLLをコンパイルし、それを64ビットOSで実行しようとしていることです。しかし、一般的に、このフックをインストールすることで何を達成しようとしていますか?フックは正しく調整するのが難しく、ハンドラーで時間がかかりすぎると登録が解除される可能性があります。

于 2009-11-22T09:44:13.033 に答える
0

ウィンドウをシェル フックとして使用してみることができます (アプリケーションのどこかに HWND ハンドルがある場合): RegisterShellHookWindow。このようにして、ウィンドウのメッセージ ポンプを介して、作成および破棄されたウィンドウに関するグローバル シェル通知を受け取ります。

于 2010-11-16T17:50:21.533 に答える