2013-08-29 10 views
6

Ich möchte .exe-Datei (genauer gesagt Konsole-Anwendung) auf ein funktionierendes Programm zu konzentrieren, die das erste Mal gestartet es funktioniert, aber bei der zweiten Ausführung (während der erste existiert) könnte Fokus auf drehen das erste gestartete Programm. Ist das überhaupt möglich in Qt?Einzelinstanz-Anwendung in Qt

Antwort

9

Für einzelne Instanz lesen Sie Run only one instance of a Qt application.

Unabhängig von der Portabilität ist es bei Verwendung von Windows ein weiterer gängiger Ansatz, beim Starten der Anwendung eine (oder eine named mutex) zu erstellen und diese vor dem Beenden zu zerstören. Wenn die benannte Pipe bereits existiert, wird bereits eine andere Instanz ausgeführt. Sie könnten sogar in die benannte Pipe schreiben und die andere Instanz auffordern, ihr Fenster nach vorne zu bringen, obwohl eine Konsolenanwendung hiervon möglicherweise nicht profitieren würde.

Eine weitere Möglichkeit, die vorhandene Instanz zu konzentrieren ist das Fenster der bereits laufenden Instanz zu finden, rufen Sie dann SetFocus auf seiner HWND oder die entsprechende Funktion auf Ihrer Plattform.

+0

Vielen Dank, aber ich habe nicht mit dem _named_pipe_ Problem bekommen. – elgolondrino

+0

Sie rufen ** [CreateNamedPipe] (http://msdn.microsoft.com/en-us/library/aa365150) ** auf, um eine Named Pipe zu erstellen, und wenn es fehlschlägt (Rückgabewert ist 'INVALID_HANDLE_VALUE'), bedeutet dies Eine andere Instanz hat bereits eine Pipe mit demselben Namen erstellt. Daher wissen Sie, dass bereits eine andere Instanz ausgeführt wird. – jweyrich