Moin, Moin.
Mit der Kombination beider Themen habe ich ein heftiges Problem:
Ein Programm darf optional nur einmalig gestartet werden, falls bereits eine erste Instanz existiert, wird auf diese umgeschaltet und, falls minimiert, auch wieder sichtbar gemacht.
Delphi-Quellcode:
..
repeat
FHnd:=Windows.FindWindowEx(0,FHnd,
PChar('TApplication'),
PChar(Application.Title))
until FHnd<>Application.Handle;
if (FHnd<>0) then begin
ShowWindow (FHnd,SW_Restore);
SetForegroundWindow(FHnd);
end;
..
Das Prüfung, ob bereits eine Instanz aktiv ist, funktioniert! Das Sichtbarmachen des minimierten Fensters
aus der Taskbar heraus, funktioniert ebenfalls einwandfrei.
Alternativ zur Nutzung der Taskbar bietet das Programm aber auch die Möglichkeit, die
TNA zu verwenden. Wird diese Variante genutzt und ist das Programmfenster gerade unsichtbar, haben ShowWindow() und SetForegroundWindow() keine
bleibende Wirkung - das Programmfenster wird nicht dauerhaft
aus der TNA hervorgeholt und angezeigt. Das hierfür verwendete
Handle habe ich überprüft - das ist korrekt.
Habe schon verschiedenste Konstanten für ShowWindow() ausprobiert und auch sehr lange die
DP-Suche bemüht, bisher hat nix geholfen. Hat da einer eine Idee...
//edit - Noch eine
wichtige Zusatzinformation: In der relativ langsamen VM ist zu erkennen, dass das Wiederanzeigen des Fensters aus der
TNA zunächst erfolgt (!) aber das Fenster auch sofort wieder geschlossen wird! (dies noch 'mal als konkretes Beispiel, dass eine "Programm-Bremse" u.U. wichtige Erkenntnisse liefern kann)