2010-12-03 16 views
1

ウィンドウAPIを通して、現在開いているすべてのウィンドウのリストを取得できますが、IntPtrが特定の順序で戻ってこないようです。私は彼らが開かれた順序でウィンドウを得る方法があるのだろうかと思っていた。たとえば、2つのIEウィンドウの後ろにメモ帳ウィンドウを開いた場合、ウィンドウのリストを取得すると、2つのIEウィンドウがメモ帳ウィンドウの前に表示されます。私はC#でこれをやっています。開かれたウィンドウの順序を決定する

+0

Windowsのリストを返すために使用しているAPI呼び出しは何ですか? – KevenK

+0

EnumDesktopWindows –

+1

ウィンドウが開かれているときにアプリケーションが実行されている場合は、ウィンドウが開かれたときに呼び出され、自分自身を追跡するフックをインストールできます。 –

答えて

3

ハンドル値は難読化されたポインタなので、その値にはまったく依存できません。そして彼らはリサイクルされます。

長距離ショットは、ウィンドウを所有するスレッドのIDを取得するGetWindowThreadProcessId()です。 OpenThread()を使用してハンドルを取得します。 GetThreadTimes()を呼び出すと、そのスレッドがいつ作成されたかがわかります。 CloseHandle()でクリーンアップします。しかし結果は推測ですが、そのような質問をしたくないのです。宣言については、pinvoke.netをご覧ください。

+0

FireFox以外のすべてのアプリケーションでこの機能が動作するのは面白いですが、Firefoxのウィンドウはすべて同じスレッドから生成されているようです(ただし、私はそれを回避しています) –

関連する問題