Autor Beitrag
kandesbunzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 116
Erhaltene Danke: 1


Delphi 7, XE2
BeitragVerfasst: Sa 16.12.06 21:28 
Hallo allerseits,

wie kann ich den Fokus eines laufenden Programmes sichern und wiederherstellen?

Bsp: Mein im Hintergrund laufendes Programm Prog_A.EXE ruft ein externes, ebenfalls im Hintergrund laufendes Programm Prog_B.EXE auf. Gleichzeitig läuft ein drittes Programm Prog_C.EXE im Vordergrund, bspw. ein Editor.
Das Programm Prog_B.EXE wird durch Anweisung meines Programmes Prog_A.EXE geschlossen, wobei die Sicherheitsrückfrage des Prog_B.EXE durch einen 'virtuellen' Tastenklick aus Prog_A.EXE heraus mit "Ja" beantwortet wird.
Hierbei geht der Fokus des Prog_C.EXE verloren.

Genaugenommen möchte ich verhindern, daß der Benutzer mit seinem Prog_C.EXE von meinem Aktionen 'belästigt' wird. Welche Möglichkeiten gibt es zur Lösung?

Danke und auf bald ...
kandesbunzler.
alias5000
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2145

WinXP Prof SP2, Ubuntu 9.04
C/C++(Code::Blocks, VS.NET),A51(Keil),Object Pascal(D2005PE, Turbo Delphi Explorer) C# (VS 2008 Express)
BeitragVerfasst: Sa 16.12.06 22:36 
Kannst du PROG_B im Code ändern? Oder willst du damit ein Programm fernsteuern, auf dessen Entwicklung du keinen Einfluss hast, wie z.B. das Notepad?

Solltest du Einfluss drauf haben, kannst du dem Programm ja nen Befehl senden, dass es sich ohne Nachfrage schließen soll.

Wenn nicht, kannst du evtl. Einfluss drauf nehmen, wann diese Meldung kommt? Ich meine z.B. dass im Notepad gefragt wird, ob man seine Änderungen sichern will. Wenn man aber vorher schon auf sichern geklickt hat, kommt diese Frage nicht. Also könntest du da automatisch sichern...

Gruß alias5000

_________________
Programmers never die, they just GOSUB without RETURN
kandesbunzler Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 116
Erhaltene Danke: 1


Delphi 7, XE2
BeitragVerfasst: Sa 16.12.06 23:38 
Hallo alias5000,

den Code von Prog_B kann ich nicht ändern. Du hast das Szenario aber richtig gut erkannt. Das Schließen des (Dienst-)Prog_B soll vom Benutzer nicht quittiert werden müssen (das Problem habe ich mittels SendMessage schon lösen können) - genau hier verliert das im Vordergrund laufende Prog_C den Fokus, was es aber nicht soll, da der Benutzer weiterhin mit diesem Programm arbeiten soll, ohne mit der Maus draufklicken zu müssen, um es wieder zu 'aktivieren'.

Würde folgendes funktionieren und wenn ja, wie?
a) Sichern des Handles des obersten Fenster (=Prog_C),
b) Ausführen des 'Hintergrundschließens' von Prog_B und
c) Wiederherstellen des Handles/Fokus von Prog_C.

Auf bald ...
kandesbunzler.
alias5000
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2145

WinXP Prof SP2, Ubuntu 9.04
C/C++(Code::Blocks, VS.NET),A51(Keil),Object Pascal(D2005PE, Turbo Delphi Explorer) C# (VS 2008 Express)
BeitragVerfasst: Sa 16.12.06 23:51 
Jap. Zu
a) Suche im MSDN GETFOREGROUNDWINDOW wird dir weiterhelfen
b) kann ich schlecht sagen, weil ich das Programm nicht kenne
c) und hier ist entsprechend Suche im MSDN SETFOREGROUNDWINDOW dein Freund, denke ich

Gruß alias5000

_________________
Programmers never die, they just GOSUB without RETURN
kandesbunzler Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 116
Erhaltene Danke: 1


Delphi 7, XE2
BeitragVerfasst: So 17.12.06 01:14 
Prima, das waren die richtigen Befehle.
Danke an alias5000!

Auf bald ...
kandesbunzler.