2009-06-19 18 views
5

私はこのコミュニティを初めて利用していますが、私の自動化スクリプトの1つで作業しているときに問題が発生したため、HWNDの作成時間を取得したいと考えていました。HWND作成時間

私は窓のフックの十分な知識を持っていない私はHWNDがシステム時刻

に応じて、最後に作成されたアレイ内で検索したい 、私はFindWindowExから取得した配列内のHWNDのセットを持っていますしかし、私はいくつかのCBTprocについて、 "CBT_CREATEWND"というウィンドウを作成しようとしている時にHWNDを返すことができるイベントを持っています。私はウィンドウフックでどうやって作業するかについて非常に不明です しかし、私の配列のHWNDと比較してください。

誰かが同じ光を照らすことができます、私は明確でない場合は、より精巧にも私に尋ねてください。マニッシュBansal氏

答えて

5

Windowsは、あなたがそれを自分で収集するために持っているので、APIを介してアクセス可能な方法でこの情報を保存しない

おかげで、。

HWNDを作成するコードを変更できる場合は、WM_CREATEまたはWM_NCCREATEの処理中に現在の時刻を保存するだけで済みます。

可能であればウィンドウフックを避けます。ウィンドウを作成しているすべてのプロセスにDLLを注入します。 DLLに重大なバグがあると、デスクトップ上のすべてのアプリケーションがひどく死んでしまいます。

あなたは、Windowsのフックでに行かなければならない場合は、あなたがこのようなSetWindowsHookExを使用してフックを注入:

LRESULT CALLBACK MyHookFunction(int nCode, WPARAM wParam, LPARAM lParam) 
{ 
    if (nCode == HCBT_CREATEWND) 
    { 
     // wParam is new window. 
    } 
    else if (nCode == HCBT_DESTROYWND) 
    { 
     // wParam is window being destroyed 
    } 

    return CallNextHookEx(myHook, nCode, wParam, lParam); 
} 

フックのprocニーズを:

HHOOK myHook = SetWindowsHookEx(WH_CBT, MyHookFunction, myHookDll, 0); 

あなたのフックprocが、このようになります。 DLLに存在するため、他のプロセスによって読み込まれる可能性があります。フックはさまざまなプロセスで実行されるため、情報を元のプロセスにマーシャリングする必要があります。たとえば、カスタムウィンドウメッセージを使用してこれを行うことができます。

+1

[WinEvents](https://msdn.microsoft.com/en-us/library/windows/desktop/dd373889.aspx)が推奨されます。 – IInspectable

関連する問題