[gelöst] Focus Problematik (externe Anwendung)

Alles rund um die Programmierung mit Qt
Antworten
101
Beiträge: 72
Registriert: 16. Januar 2008 16:28

[gelöst] Focus Problematik (externe Anwendung)

Beitrag 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.
Zuletzt geändert von 101 am 10. November 2010 11:57, insgesamt 1-mal geändert.
padreigh
Beiträge: 340
Registriert: 13. Mai 2010 10:06

Beitrag 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?
Patrick (QtCreator 1.3.1, Qt 4.6.3)
---
template = subdirs
101
Beiträge: 72
Registriert: 16. Januar 2008 16:28

Beitrag von 101 »

Das hatte ich auch schon probiert, leider ohne Erfolg :(
101
Beiträge: 72
Registriert: 16. Januar 2008 16:28

WINAPI verwenden?

Beitrag 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.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Laut Doku muss man windows.h includieren. Aber wie immer 'Geht nicht' ist ne gute Fehlermeldung...
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
101
Beiträge: 72
Registriert: 16. Januar 2008 16:28

Beitrag 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
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag 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"
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
101
Beiträge: 72
Registriert: 16. Januar 2008 16:28

Beitrag 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!
Antworten