問題タブ [always-on-top]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
3131 参照

c# - クリックしてシースルーの「常に手前」ウィンドウを作成する方法

情報を含む半透明の常時表示ウィンドウを表示したいのですが、このウィンドウに入力やフォーカスを与えたくありません。すべてのマウス クリックは、下にあるウィンドウに移動する必要があります。

何年も前にシェル交換アプリケーションでこれを見たのを覚えていますが、魔女を思い出すことはできません.

DelphiまたはC#でこの効果を達成する方法はありますか?

アップデート:

提案されたソリューションをデルファイで動作させることはできません。NCHITTEST メッセージに対して HTTRANSPARENT を返すと、フォームに到達するすべてのマウス メッセージが停止しますが、z オーダーで次のウィンドウに渡す必要があります。このメソッドはプロセス全体で動作するように設定されていますか、それとも特定のウィンドウの子要素でのみ動作するように設定されていますか?

ただし、ExStyle フラグ WS_EX_TRANSPARENT を設定すると、すべてのマウスクリックが次のウィンドウに移動しますが、NCHITTEST メッセージはまったく取得されず、ウィンドウをクリックスルーするかどうかを制御できません。 ..

0 投票する
1 に答える
504 参照

mfc - ユーザー インターフェイス: MDI フレームのオントップ ステータスを切り替える最良の方法は?

Frame Windows をドキュメントのビューとして使用する MFC (VC6) MDI アプリケーションを管理しています。ドキュメントは一度に 1 つしか存在しませんが、ドキュメント データのビューがそれぞれ異なる複数の MDI フレームがあります。

最近、これらのフレーム ウィンドウの 1 つを他のウィンドウの上に表示しながら、バックグラウンド ウィンドウと対話できるようにしたいという要望がありました。

  • 1 つのアイデアは、フレームのタイトル バーに「ピン ボタン」を追加することでした。調査中に、すべての実装で CButton オブジェクトなどの代わりにビットマップが使用されていることがわかりました。UIテーマはもちろん、デフォルトの灰色以外のウィンドウの色を使用するとすぐに、これは醜くなり始めます。

  • フレーム ウィンドウのメニュー (タイトル バーのウィンドウ アイコンを左クリックすると表示されるもの) のオプションは可能ですが、ユーザーにとってより明白なものを探しています。

このフレーム ウィンドウを最前面の状態に設定するには、他にどのような方法がありますか?

アップデート

XPテーマで問題なく動作するため、 Uliが提案したソリューションを使用することにしました。残念ながら、これは私の次の質問に直接つながります:フレームウィンドウを実際に一番上に保つにはどうすればよいですか?

0 投票する
6 に答える
46385 参照

css -
PDFの上のレイヤー

だから、私が直面している問題は次のようなものです.ページ上のpdfの上に配置されるレイヤーがあります。PDF は、埋め込みに使用されているか、iframe に含まれています。ただし、CSS スタイルは PDF には適用されません (プラグインなので?)。したがって、 に z-index:1000 を配置しても、そのレイヤーは PDF の背後にあります。それを修正する方法はありますか?

コードは次のとおりです。

0 投票する
3 に答える
15739 参照

c++ - 常に前面のダイアログ

C++ MFC でモードレスダイアログ ボックスを作成し、常にアプリケーションの他のウィンドウの上に表示する方法はありますか? 私は、Visual Studio 2005 の [検索] ダイアログのようなものを考えています。上部に表示されますが、下にあるテキストを編集することもできます。

(違いがある場合、それは MDI ではなく、ダイアログ ベースのアプリです)

0 投票する
2 に答える
3164 参照

mfc - MDI子ウィンドウを兄弟の上に置く方法は?

この質問は私の以前の質問に関連しています。

I have an MFC (VC6) MDI Application which has several MDI child windows acting as different views for one document.

Is it possible to set one of those frames to stay on top of the others?
I have tried to call

and

from the CMDIChildWnd but neither appears to work.

0 投票する
3 に答える
693 参照

c# - プロセス「A」がプロセス「B」を生成しないようにします。このプロセスは、「TopMost」プロセス「C」の上に表示されます。

TopMostである必要があるWindowsフォームアプリケーションがあります。フォームをTopMostに設定しましたが、1つの場合を除いて、アプリケーションは希望どおりに機能します。

私のアプリケーションの上にポップアップする画面の一部にSWFムービーファイルを表示するサードパーティのアプリケーション(player.exeと呼ばれる)があります。

プロセスモニターを使用 して、私の場合、player.exeアプリケーションが呼び出すことを確認しました。
flash.exe <PositionX> <PositionY> <Width> <Height> <MovieFile>

flash.exe 901 96 379 261 somemovie.swf

フォームがTopMostに設定された後、flash.exeが新しいプロセスで生成されるため、アプリケーションの上に表示されます。

私が最初にしたことは、Flashが表示されないようにすることを期待して、アプリケーションでplayer.exeメインアプリケーションウィンドウを最小化することでした。しかし、残念ながら、そうではありません...フラッシュムービーが開始するたびにウィンドウが最小化されていても、ピクセル位置(901,96)に表示されます。次に、form.TopMostプロパティを10ミリ秒ごとにtrueに設定し続けるタイマーを作成してみました。この種の動作は動作しますが、swfファイルの非常に速いブリップが表示されます。

表示されている子プロセスをplayer.exeが生成するのを一時的に防ぐために使用できるWindowsAPI呼び出しの種類はありますか?私はそれが少し遠いように聞こえることを認めます。しかし、他の誰かが同様の問題を抱えているかどうか興味があります。


補遺:

この補遺は、以下のマシューの投稿に示されているいくつかの提案に対する回答を提供するためのものです。

コメントに記載されている緊急事態については、次のような解決策を検討します。

1)サードパーティアプリケーションは通常どのように開始および停止されますか?同じ方法で閉じることはできますか?それがサービスである場合、サービスコントロールマネージャーはそれを停止できます。通常のアプリケーションの場合は、エスケープキーストローク(おそらくSendInput()を使用)またはWM_CLOSEメッセージをメインウィンドウに送信すると機能する場合があります。

アプリを閉じる最も簡単な方法は、Ctrl-Alt-Delを押してから、プロセスを強制終了することです。-または-適切な方法は、マウスの左ボタンをクリックしながらESCを押したままにすることです...次に、ユーザー名とパスワードを入力し、いくつかのメニューをナビゲートしてプレーヤーを停止します。

PAUSEコマンドはありません...信じられないかもしれません。

アプリケーションを最小化しても効果がないため、WM_CLOSEを使用しても効果はないと思います。それはプロセスも殺しますか?そうでない場合は、どのように再開しますか。

2)うまく閉められない場合、殺してもいいですか?その場合、TerminateProcess()が機能するはずです。

2つの理由でプロセスを強制終了できません。1)再起動時に、ユーザー名/パスワードのクレデンシャルを指定する必要があります...マシンの再起動時にプロンプ​​トが表示されないため、これを回避する方法があるかもしれませんが... 2)タスクマネージャーでプロセスを強制終了するたびに正常に終了せず、エラーレポートを送信するかどうかを尋ねられます

3)どうしても他のプロセスを実行したままにする必要がある場合は、プログラムで高速ユーザー切り替えを呼び出して、別のセッション(競合する最上位ウィンドウがない)に移動できるかどうかを確認しようとします。APIのどこから始めればよいのかわかりません。(Peter Rudermanは、この目的のためにSwitchDesktop()を彼の回答で提案しています。)

私はこのアイデアに本当に興奮しました...多くのAPIラッパーメソッドを提供するCodeProjectでこの記事を見つけました。デスクトップを機能させるには、explorer.exeを実行する必要があると思うので(私は実行していません)、実装を停止しました。

EDIT2:考え直して...多分explorer.exeは必要ありません。試して報告します。

Edit3:その記事のコードを機能させることができませんでした。これをしばらく保留する必要があります。


回答の概要

予想通り、この問題に対する簡単な答えはありません。最善の解決策は、何も表示されないことを保証する必要があるときに、問題のある別のデスクトップに切り替えることです。動作するデスクトップスイッチングの単純なC#実装を見つけることができず、実装された後はまったく新しいワームのセットを開くだけになるのではないかという疑問が迫っていました。そのため、デスクトップスイッチングを実装しないことにしました。私はうまく機能するC++実装を見つけました。 他の人のために動作するC#仮想デスクトップの実装を投稿してください。

0 投票する
2 に答える
1100 参照

java - スクリーンショットを撮る前にスイング フレームを前面に移動しようとしましたが、アーティファクトが発生しました

特定のウィンドウのスクリーンショットを撮るアプリの一部がありますが、その前にウィンドウを前面に表示したいと考えています。これは私の Mac マシンでは問題なく動作しますが、Windows XP で並行してテストしたところ、スクリーンショットには重なっているウィンドウがあった領域が常にグレー表示されていました。一番上にしたいウィンドウが一番上に転送されている間、常にスクリーンショットが撮られているようです。私は両方を使ってみました:

誰かがこの問題の合理的な解決策を持っていますか?

0 投票する
1 に答える
190 参照

windows - フレックスウィンドウは常に上にあります

タグをセットalwaysOnTop="true"しました。mx:WindowedApplicationこれはOSXでは機能しませんが、Windowsでは機能します。

OSXでこれを解決するにはどうすればよいですか?

0 投票する
1 に答える
933 参照

swing - メイン アプリケーション ウィンドウの上に表示される最小化可能な JFrame

私のアプリはダイアログをポップアップします。ユーザーは通常、このダイアログとアプリケーション ウィンドウをしばらくの間、行ったり来たりしたいと考えています。このダイアログを一番上に置いて、メイン アプリケーション ウィンドウの後ろに隠れないようにします。しかし同時に、しばらく必要がない場合に邪魔にならないように、ダイアログに最小化ボタンを付けたいと思います。

これが私が試したことです:

  • モードレス JDialog を使用します。ダイアログはうまく前面に表示されますが、最小化ボタンがなく、独自のタスクバー ボタンもありません。

  • JFrame を使用します。ダイアログには最小化ボタンと独自のタスクバー ボタンがありますが、メイン ウィンドウがフォーカスされると、ダイアログはその後ろに隠れます。

  • JFrame を使用し、ダイアログに WindowListener.windowDeactivated() { this.toFront() } を追加します。これの問題は、 toFront() もフォーカスを設定するため、奇妙なフォーカスのちらつき効果が得られることです。

  • setAlwaysOnTop で JFrame を使用する - これが最も近い解決策ですが、ウィンドウは私のアプリケーションだけでなく、他のすべてのアプリケーションの上に表示されます。

フォーカスを変更せずに toFront が JFrame を前面に持ってくるだけなら簡単ですが、残念ながらそうではありません。JFrame の Z オーダーを変更する別の方法はありますか?

編集:JDialogを「ロールアップ」する簡単な方法、つまりタスクバーではなく最小化する方法があれば、それも私の問題を解決することに気づきました。

0 投票する
3 に答える
11588 参照

python - Pythonウィンドウを「AlwaysOnTop」として実行するにはどうすればよいですか?

私はPythonで小さなプログラムを実行しています。このプログラムは、他のすべてのウィンドウの上にとどまる必要がある小さなウィンドウを起動します。これはOS固有だと思いますが、GNOMEを使用したGNU-Linuxではどのように実行されますか?

[更新-Windows用ソリューション]

素敵な、私はそれが機能したと思います。Vista64ビットのEclipseでPygame1.9.1とともにPython2.5.4を使用しています。したがって、これはWindowsシステム用です。SetWindowPos関数はここに文書化されています。説明の中でこれを参照します。

輸入:

次に、user32で「SetWindowPos」を呼び出す変数を設定します。

ここで、ウィンドウを作成したとしましょう。

次の行が鍵です。これにより、ウィンドウが他のウィンドウの上に表示されるように設定されます。

基本的に、へhWndの呼び出しから返されたウィンドウIDを(ウィンドウハンドル)に指定しますdisplay.get_wm_info()。これで、関数は初期化したばかりのウィンドウを編集できます。

-1ですhWndInsertAfter。_

MSDNサイトによると:

ウィンドウは、hWndInsertAfterパラメーターをHWND_TOPMOSTに設定してSWP_NOZORDERフラグが設定されていないことを確認するか、ウィンドウの位置をZオーダーで設定して、既存の最上位ウィンドウの上に配置することにより、最上位ウィンドウにすることができます。最上位以外のウィンドウを最上位にすると、所有しているウィンドウも最上位になります。ただし、その所有者は変更されません。

したがって、は-1ウィンドウが他の既存の最上位ウィンドウの上にあることを確認しますが、これはすべての場合に機能するとは限りません。多分-2は-1を打ち負かしますか?それは現在私のために働いています。:)

xとはy、設定するウィンドウの新しい座標を指定します。SetWindowPos関数が呼び出されたときにウィンドウを現在の位置に維持したかったのです。残念ながら、現在のウィンドウ(x、y)の位置を関数に簡単に渡す方法が見つかりませんでした。回避策を見つけることができましたが、この質問に新しいトピックを導入するべきではないと思います。

0, 0,、ウィンドウの新しい幅と高さをピクセル単位で指定することになっています。ええと、その機能はすでにあなたのpygame.display.set_mode()関数にあるので、私はそれらを0のままにしました0x0001。はこれらのパラメーターを無視します。

0x0001SWP_NOSIZEに対応し、私の唯一のuFlagです。利用可能なすべてのuFlagのリストは、提供されているドキュメントページにあります。それらの16進表現の一部は次のとおりです。

  • SWP_NOSIZE = 0x0001
  • SWP_NOMOVE = 0x0002
  • SWP_NOZORDER = 0x0004
  • SWP_NOREDRAW = 0x0008
  • SWP_NOACTIVATE = 0x0010
  • SWP_FRAMECHANGED = 0x0020
  • SWP_SHOWWINDOW = 0x0040
  • SWP_HIDEWINDOW = 0x0080
  • SWP_NOCOPYBITS = 0x0100
  • SWP_NOOWNERZORDER = 0x0200
  • SWP_NOSENDCHANGING = 0x0400

それはそれであるはずです!それがあなたのために働くことを願っています!

彼の助けのためにjohn@johnnypops.demon.co.ukでジョンPopplewellにクレジット。