2013-08-29 2 views
6

最初に起動した機能プログラムに.exeファイル(特にコンソールアプリケーション)をフォーカスしたいのですが、2回目(最初のものが存在する)にフォーカスを置くと、最初に立ち上げたプログラム。それはQtですべて可能ですか?Qtのシングルインスタンスアプリケーション

答えて

9

Run only one instance of a Qt applicationを読んでください。

移植性を無視して、Windowsで実行している場合は、アプリケーションの起動時にnamed pipe(またはnamed mutex)を作成して終了してから終了してください。名前付きパイプがすでに存在する場合は、別のインスタンスがすでに実行中です。他のインスタンスにウィンドウを前面に持ってくるように名前付きパイプに書き込むこともできますが、コンソールアプリケーションではこれを特に有効にできないかもしれません。既存のインスタンスを集中させる

もう一つの方法は、お使いのプラットフォーム上でそのHWND、または対応する機能にSetFocusを呼び出して、すでに実行中のインスタンスのウィンドウを見つけることです。

+0

ありがとう、しかし、私は_named_pipe_号を手に入れませんでした。 – elgolondrino

+0

名前付きパイプを作成するには、** [CreateNamedPipe](http://msdn.microsoft.com/en-us/library/aa365150)**を呼び出し、失敗した場合(戻り値はINVALID_HANDLE_VALUEです)は、別のインスタンスがすでに同じ名前のパイプを作成しているため、別のインスタンスがすでに実行中であることがわかります。 – jweyrich