Hallo-
Aus Zeitmangel habe ich das Thema nur überflogen. Aber soweit ich es im Hinterkopf habe,
darf eine Anwendung sich nicht in den Vordergrund zwängen wenn sie es nicht mehr ist.
SetForegroundWindow(self.Handle)
funktioniert also nicht, wenn der eigene Delphi-Prozess nicht mehr im Vordergrund ist.
Es sei denn, die eigene Anwendung hat zuletzt eine Benutzereingabe bekommen. Der Trick ist, sich selbst eine Eingabe zu schicken. So habe ich es auf einem
VCL-Formular einmal gemacht:
Delphi-Quellcode:
uses Winapi.Windows;
var
Input: TInput;
begin
// Diese Anwendung in den Vordergrund zwängen
ZeroMemory(@Input, SizeOf(Input));
SendInput(1, Input, SizeOf(Input));
SetForegroundWindow(
Handle);