C++ Programm das im Hintergrund startet und nicht den Fokus der aktiven Anwendung stiehlt

empty2k3

Ensign
Registriert
Jan. 2009
Beiträge
158
Hallo,

ich versuche ein Programm zu schrieben, dass bei Ausführung - über Shellscript aus einer anderen Anwendung oder per Hotkey - im Hintergrund startet und den Fokus bei Vordergrundfenster belässt oder sofort widerherstellen kann (Problem dabei der Name ist variabel - speziell beim Aufruf über Hotkey).

Wie man nicht sichtbare Fenster erzeugen könnte, weiß ich. Wie man theoretisch seine Anwendung in den Hintergrund bekommt (z.B. nShowCmd) weiß ich auch.
Ich habe mich schon durch diverse Erklärungen gelesen, allerdings klaut mir mein Programm den Fokus des zuvor aktiven Fensters und ich kriege den nicht wieder rein.

Lösungsmöglichkeit 1:
Mein Programm startet ohne Fenster und ohne den Fokus zu klauen (muss aber wenn es mit einem bestimmten Parameter gerufen wird eine Userform ausgeben können).

Lösungsmöglichkeit 2:
Mein Programm startet mit Fenster/ohne Fenster, klaut den Fokus, gibt den aber an das zuvor aktive Fenster zurück.

Ich hoffe, dass jemand von euch da noch eine gute Idee hat.
Vielen Dank.
 
Du schreibst in C++ -> also kannst du komplette WinAPI nutzen (z.B. SetForegroundWindow ForceForuegroundWindow etc.).

Ich würde dir die Lösung empfehlen, das Fenster nur bei Bedarf zu erstellen, das spart einfach Ressourcen.
Falls du das Fenster erstellen willst, einfach gleich unsichtbar erstellen, dann sollte es den Fokus auch nicht stehlen.
 
Die Funktionen sind mir bekannt. Das Problem war eher das richtige Fenster zu finden, das ich wieder in den Vordergrund muss.

Ich werde es jetzt anders machen. Statt das Programm über ein Hotkey zu starten, werde ich das Programm in den Autostart stecken, dem ein Tray Symbol geben und das nur auf den Hotkey reagieren lassen. Dann geht sollte der Fokus ganz sicher nicht verloren gehen.
Allerdings habe ich sowas noch nie gemacht von daher wird spannend ;).
 
Hol dir doch einfach vor dem Anzeigen des Fensters ein Handle vom aktuellen Fenster, das sich im Vordergrund befindet und setze dies nach dem Anzeigen wieder in den Vordergrund.

Das aktuelle Fenster bekommst du mit GetForegroundWindow.
 
Zurück
Oben