2016-08-31 5 views
2

私のウィンドウに「常に上に」拡張スタイルが設定されている場合は、「常に上に」スタイルのセットを持たないウィンドウと、「常に上にあります」スタイルを持つウィンドウの上に表示されます。私のウィンドウがアクティブになる前に起動されました。タスクマネージャは、Windows 10のための特別な「Always on Top」ウィンドウですか?

この機能をテストするには、タスクマネージャウィンドウを開きます。常にタスクマネージャを開き、ウィンドウを開きます(myWindow)。

Windows 7では、予想される動作が観察されます。myWindowがタスクマネージャの上に表示されます。

ただし、Windows 10ではそうではありません。タスクマネージャは、他のウィンドウのウィンドウの上に常に表示されます。

Windows 10のタスクマネージャで何か特別なことはありますか?はいの場合、タスクマネージャの上に私のウィンドウを持っていくためのいくつかの回避策がありますか?私は単にBringWindowToTop関数を使ってみましたが、うまくいきません。どちらもsetWindowPosHWND_TOPの間には、hWndInsertAfter引数の値としてありません。私はしばらく前にやった小さな研究から

+0

、私はいつも一番上に「拡張スタイルセットを持つ2つのウィンドウを作成し、私は1つできました最後にどのウィンドウがアクティブになったかに基づいて、もう一方のウィンドウの上に表示されます。 – TheBlueNotebook

+1

はい、タスクマネージャは特別です。あなたはそれの上になることはありません。 –

+1

[2つのプログラムでこれを行った場合はどうすればよいですか?](https://blogs.msdn.microsoft.com/oldnewthing/20050607-00/?p=35413)([Practical exam](https:// blogs.msdn.microsoft.com/oldnewthing/20101125-00/?p=12203))。あなたが作成しようとしているジレンマをもう一度見てみましょう:[他の一番上のウィンドウで覆われていない一番上のウィンドウを作成するにはどうすればいいですか?](https:///blogs.msdn.microsoft.com/oldnewthing/20110310-00/?p=11253)。 – IInspectable

答えて

7

Windows 8のタスクマネージャには多くの変更が加えられました。これらの変更の中には、常に他のすべての常時稼動状態の上に常に置かれていたことを確認するために、トップウィンドウ。タスクマネージャはオペレーティングシステムに組み込まれているため、マイクロソフトはこれを行うことによって契約上の保証を破棄することはありません。それは、OSコンポーネントで好きなように自由に行うことができます。

あなたの実際の質問に答えるために、これに関する文書化されたAPIはありません。 WS_EX_TOPMOSTが最高です。これは、ユーザーのための援助ではなく、自分の網膜であなたのアプリの窓を腐食する方法ではありません。

この2つの異なるウィンドウにこのスタイルが設定されている場合、動作は実装に依存します。あなたが得る唯一の保証はWS_EX_TOPMOSTスタイルのウィンドウです。は常にこのスタイルをZオーダーで使用しています。そうでなければ、最も最近アクティブな一番上のウィンドウを一番上に保ち、システムコンポーネントに属するウィンドウを一番上に強制したり、一つ以上のウィンドウを持つプロセスを罰することによって、競合を解決することができますこのスタイルは "最上位"のスタックの最下部にウィンドウを強制します。

関連読書:さらにテスト物事へ

4

  • タスクマネージャが実際に最前面の「特殊な」です。
  • タスクマネージャウィンドウは、文書化されていない関数CreateWindowInBandで作成されています。
  • この関数を別のプロセスから使用しようとすると、ERROR_ACCESS_DENIEDになります。おそらく、署名されたMicrosoftプロセスだけがそれを使用できます。
+0

どのように特定のウィンドウが本当にトップの "特別な種類"であるかを把握するためのアイデアは、私はそのウィンドウハンドルを持っています。おそらく、あなたが「CreateWindowInBand」を使ってタスクマネージャが作成されたという結論に到達したのは、ここにいくつかのヒントを与えるでしょうか? – TheBlueNotebook

+1

@TheBlueNotebookは 'USER32.GetWindowBand'を試します。 – Paul

関連する問題