4

QWidget::activateWindow()州のQtドキュメント:

Windows では、アプリケーションが現在アクティブでないときにこれを呼び出すと、アクティブ ウィンドウにはなりません。タスクバー エントリの色を変更して、ウィンドウが何らかの方法で変更されたことを示します。これは、Microsoft が、ユーザーが別のアプリケーションで現在行っていることをアプリケーションが中断することを許可していないためです。

しかし、Skype はこのルールを無視しているようです。Skype が実行されていてもアクティブなアプリケーションではない場合、スタート メニューから起動すると、既存のインスタンスが前面に表示され、アクティブ化され、入力フォーカスが取得されます。

どうすればこれ行うことができますか?

4

4 に答える 4

6

(注: これは QtSingleApplication の動作に固有のものです)

私の問題の解決策はばかげて簡単です。アプリケーションの開始時に呼び出すだけAllowSetForegroundWindow(ASF_ANY);で、元のプロセスが を使用してフォアグラウンドに移動できるようになりますSetForegroundWindow()。奇妙なハックはなく、コードを 1 行追加するだけで、QtSingleApplication を変更する必要もありません。

于 2010-07-23T16:56:36.303 に答える
1

Qt API だけで確実に実行できるとは思いません。

ウィンドウには複数のソリューションがあります。例えば、ここ、そしてここ、そしてここ

私が以前に使用した方法は、共有メモリ セクションを宣言し、そこにアプリケーションのウィンドウ ハンドルを書き込むことです。後で、プログラムの 2 番目のインスタンスが開始されたときに、最初のインスタンスのウィンドウ ハンドルを見つけてアクティブにすることができます。

この場合、2番目のインスタンスがアクティブなアプリケーションであるため、他のウィンドウに「フォーカスを渡す」ことが許可されているため、これを行うことを妨げるウィンドウの問題はないと思います。

于 2010-07-23T08:17:09.807 に答える
0

Qtソリューションで単一のアプリケーションを使用する

一部のアプリケーションでは、ユーザーが1回だけ起動することが有用または重要です。今後アプリケーションを起動しようとすると、すでに実行中のインスタンスがアクティブになり、そのインスタンスでファイルの読み込みなど、要求されたアクションが実行される可能性があります。

于 2010-07-23T08:35:19.390 に答える
-2

setWindowOpacity を 0 から 1 に設定できます。唯一のことは、いつでも開くことができるということです。

于 2016-01-28T07:35:23.687 に答える