if Sender = Button2 then
Der Sender kann sich niemals einfach so innerhalb des Funktionsaufrufs verändern.
Wenn der Timer weiterläuft, dann wird über Application.ProcessMessages
immer wieder eine neue "Instanz" von Timer1Timer gestartet, welche niemals enden wird (Endlosschleife)
Da aber immer mehr Prozeduren gesartet werden, wird dieses Unweigerlich irgendwann in einem Stacküberlauf enden müssen.
Wozu überhaupt diese Schleife?
Delphi-Quellcode:
procedure TForm5.Timer1Timer(Sender: TObject);
var
fHandle: HWND;
begin
fHandle := FindWindow('notepad', nil);
if (fHandle <> 0) and (GetForeGroundWindow <> fHandle) then
SetForeGroundWindow(fHandle);
end;
Timer1.Intervall auf 50 eingestellt und du hast das selbe Ergebnis, aber ohne das Stackproblem.
PS: Warum ein rießiger
Integer i, wo dieser doch nur wie ein
Boolean verwendet wird?