2016-05-02 6 views
2

Wir haben eine Desktop-Anwendung geschrieben in PyQt (nennen wir es OUR), die Komplementär-Funktionalität zu einer bestehenden proprietären MS Windows-Anwendung (namens THEIR) hinzugefügt. Sie laufen im Vollbildmodus. Wir würden gerne auf OUR und dann programmatisch auf IHR Programm wechseln, wenn ein externes (Hardware-) Ereignis eintritt. So ähnlich, wenn wir die Tastenkombination ALT-TAB von OUR emulieren würden.Wie kann ich zu einer externen Anwendung wechseln und her?

Wie können wir von UNSERE zu IHR wechseln? Wie können wir bei einer Veranstaltung von THEIR auf OUR wechseln - zum Beispiel wenn ein Timer ausläuft?

+0

Ist IHRE bereits geöffnet? – linusg

+0

Oh und was os laufen Sie? – linusg

+0

[Diese Frage] (http://StackOverflow.com/Q/210504/1329652) ist im Wesentlichen ein Duplikat, obwohl Sie sich frei fühlen, darauf näher einzugehen. Möglicherweise gibt es ein besseres Duplikat. Sie müssen die Fensterliste durchlaufen und das Fenster manuell wechseln. –

Antwort

0

Wie viel Kontrolle haben Sie über Ihr Programm und das Hardwareereignis? Im Allgemeinen besteht die einzige Möglichkeit, Fenster in einer anderen Anwendung zu erstellen, darin, über den Fenstermanager eine Kennung für sie zu erhalten und sie anzuheben. Die Methode hängt davon ab, welchen Betriebssystem- und Fenstermanager Sie verwenden. Unter Windows können Sie die pywin32 API verwenden.

Eine Methode wäre, einen kleinen Daemon-Prozess zu erstellen, der als Socket-Server oder xmlrpc-Server fungiert (Python bietet einfache Möglichkeiten, beides zu implementieren). Wenn entweder OUR oder THEIR das andere Fenster anheben wollen, senden sie eine Nachricht an den Daemon, die das entsprechende Fenster aufziehen würde. Der Daemon-Prozess könnte auch das Betriebssystem auf Ereignisse überwachen und Fenster selbst auslösen.

+0

Danke, Brendan! Obwohl unser Projekt in der Zwischenzeit eine andere Richtung eingeschlagen hat, scheint für das Problem hier oben die Methode, auf andere Fenster durch Handles zuzugreifen, die vom OS angefordert wurden, vielversprechend! Ich habe 'pywin32' kurz ausgecheckt, aber ich fand keine detaillierte (oder irgendeine) Dokumentation dafür (vielleicht war ich zu kurz). Ich habe ein bisschen Angst, dass, um dies zu implementieren, ich die Win32-API eingehend kennen müsste, was ich nicht weiß. Zum Glück ist diese Funktion jetzt abgebrochen. –