2012-01-19 12 views
0

私はSetWindowsHookExで遊んでいます。具体的には、ウィンドウがマウスやキーボードでアクティブになっていることがわかります。SetWindowsHookグローバルではありません。

SetWindowsHookExのMSDNドキュメントを読むと、WH_CBTタイプがそのジョブを実行するように見えます。私はdllを作成し、そこにすべてのコードを置いています。これはGUIアプリケーションからコントロールします(これもunhookを処理します)。

しかし、私は私のGUIアプリケーションを有効にするとアクティベーションコードが表示されているようですが、私が起動した他のアプリは無視されます。私はそうのようなセットアップコードとCBTProcを持っている私のDLL内

LRESULT WINAPI CBTProc(int Code, WPARAM W, LPARAM L) { 
    if(Code<0) CallN.... 

    if (Code == HCBT_ACTIVATE) { // never get unless I activate my app 
     HWND a = reinterpret_cast<HWND>(W); 
     TRACE("this window was activated %d\n", a); 
    } 

    CallNext.... 
} 

EXPORTED HHOOK WINAPI Setup(HWND MyWind) { 
    ... 
    // gDllUInstance set in dllmain 
    return SetWindowsHookEx(WH_CBT, CBTProc, gDllUInstance, 0); 
} 

すべての非常に単純なものは、私は、DLLのうち、セットアップを移動しようとしましたが、私はまだ同じ効果を得ます。

DLLが他のプロセスにロードされつつあるように思われる、私は私が取得していますし、そのiは非常に科学的か分からない(上がって見ることができますDLL_PROCESS_ATTACHsの数を数えています。これがあることを

NOTEを32ビットOS上で実行されている32ビットコード - WIN2K3私は私のアプリの起動を取得する必要があるか、私はフックの異なるタイプを必要としない

が間違ったフック機構の私の予想です

EDIT:??トレース機能がファイルに書き込み、私にアクティベートを送信するものを教えてください

TIA。

+2

TRACEマクロが何をするのかは不明です。しかし、別のプロセスで実行されているため、副作用が見えない可能性があります。 –

+0

特に、期待どおりのディレクトリにあるファイルにロギングしている可能性があります。 –

+0

TRACEは書き込み先のファイルのハンドルを閉じますか?異なるプロセスが書き込みロックを取得できないため、並行性の問題が発生している可能性があります。 –

答えて

0

Hansが指摘しているように、他のプロセスのデバッガからの出力が表示されない場合があります。余分なトレースコード - 添付されたプロセスごとに1つのトレースファイル - 私は見ることができます結局のところ、物事が働いていることが分かります。

返信いただきありがとうございます。

関連する問題