Seite 1 von 1

[gelöst] Focus Problematik (externe Anwendung)

Verfasst: 19. Oktober 2010 09:23
von 101
Hallo Zusammen,

ich habe ein Problem mit dem Applikations-Focus unter Windows XP. Ich habe zwar schon die Suche bemüht, aber leider nicht wirklich was passendes gefunden.

Zum Problem:
Ich starte in meiner Anwendung ein externes Programm über QProcess. Diese externe Anwendung bekommt den Focus. Wenn die Anwendung beendet wird, bekomme ich das über das Signal QProcess::finished mit. Nun bekommt aber meine Applikation nicht mehr automatisch den Focus unter Windows, wenn noch eine weitere Applikation geöffnet ist.

Meine Frage:
Wie kann ich Windows dazu bringen meiner Applikation den Focus zu geben, wenn das externe Programm beendet wird.

Verfasst: 19. Oktober 2010 11:57
von padreigh
weiss ja nicht obs hilft, aber wie wäre es wenn du das Signal abfängst und dann mit einer Kombination von QWidget:: activateWindow () + raise() + show() dich frech in den Vordergrund drängst?

Verfasst: 19. Oktober 2010 13:03
von 101
Das hatte ich auch schon probiert, leider ohne Erfolg :(

WINAPI verwenden?

Verfasst: 10. November 2010 08:55
von 101
Hallo,

ich muss noch einmal dieses Thema nach vorn holen. Da es unter Windows nicht möglich ist einer Applikation gezielt den Focus zu geben wollte ich hierfür die WINAPI Funktionen AllowSetForegroundWindow() und SetForegroundWindow() verwenden.

Mein Problem: Wie kann ich unter Qt diese Windows API Funktionen aufrufen. Ein #include "windows.h" reicht scheinbar hierfür nicht aus.

Verfasst: 10. November 2010 08:59
von Christian81
Laut Doku muss man windows.h includieren. Aber wie immer 'Geht nicht' ist ne gute Fehlermeldung...

Verfasst: 10. November 2010 09:07
von 101
Habe ich auch so gelesen.

Im Header:

Code: Alles auswählen

#include "windows.h"
Im CPP-Code:

Code: Alles auswählen

AllowSetForegroundWindow(ASFW_ANY);
Fehlermeldung von Qt:
main.cpp:118: error: 'ASFW_ANY' was not declared in this scope
main.cpp:118: error: 'AllowSetForegroundWindow' was not declared in this scope

Verfasst: 10. November 2010 09:16
von Christian81
Ich schätze mal MinGW ...
AllowSetForegroundWindow ist erst ab Win2k definiert, also WIN32_WINNT auf mindestens 0x0500 definieren. Einfach mal in den Headern nachschauen.
Des weiteren heißt es <windows.h> und nicht "windows.h"

Verfasst: 10. November 2010 09:39
von 101
So ich habe jetzt in der windef.h die Windowsversion von 0x0400 auf 0x0500 geändert. Jetzt sind die benötigten API Funktionen verfügbar!

Folgendes ist aber noch zu beachten. Es kommt noch auf die Thread ID vom aktiven Window an:

Siehe:
http://msdn.microsoft.com/de-de/library/bb979463.aspx

Das Problem konnte mit dieser Anleitung gelöst werden!