Menne, Erfolg auf der ganzen Linie
!!!
Wenns denn auch wirklich sicher läuft? Aber das sollte es schon tun. Auf irgend was muss man sich halt auch einfach mal verlassen.
Der Basiscode ist auch erschreckend simpel. So hatte ich mir das auch vorgestellt.
Delphi-Quellcode:
type
TShutDownThread = class(TThread)
private
FCS: TCriticalSection; // CriticalSection
FShutDownList : TShutDownList; // Schließliste
FWindowList : TWindowList; // Liste der aktiven Fenster
FInterval : Integer; // Refreshzeit in ms
protected
procedure Execute; override;
procedure UpdateWindowList; // Fensterliste aktualisieren
public
constructor Create(CreateSuspended: Boolean); reintroduce; virtual;
Destructor Destroy; override;
Procedure GetWindowList(const AList : TWindowList); // Fensterliste abholen
property Interval : Integer read FInterval write FInterval;
end;
implementation
{ TTShutDownThread }
constructor TShutDownThread.Create(CreateSuspended: Boolean);
begin
inherited;
FCS := TCriticalSection.Create;
FWindowList := TWindowList.Create;
FShutDownList := TShutDownList.Create;
FInterval := 200;
end;
destructor TShutDownThread.Destroy;
begin
FCS.Enter;
try
FreeAndNil(FWindowList);
FreeAndNil(FShutDownList);
inherited Destroy;
finally
FCS.Leave;
try FreeAndNil(FCS); except end;
end;
end;
procedure TShutDownThread.Execute;
begin
while not Terminated do begin
FCS.Enter;
try
FWindowList.EnumTopLevelWindows;
Sleep(Interval);
finally
FCS.Leave;
end;
end;
end;
procedure TShutDownThread.GetWindowList(const AList: TWindowList);
var
WinParamObj: TWinParamClass;
begin
if not Assigned(AList) then
Exit;
FCS.Enter;
try
AList.AssignList(FWindowList);
finally
FCS.Leave;
end;
end;
procedure TShutDownThread.UpdateWindowList;
begin
FWindowList.EnumTopLevelWindows; // Alle Windows auflisten
end;
Ist eingendlich nicht viel für sooon langen Thread.
Ich hoffe jetzt kommt nicht einer um die Ecke und erklärt mir, dass das alles totaler Stuß ist was ich hier schreibe. Drücken wir mal die Daumen. Erläuterungen brauch jetzt wohl nicht mehr machen. Der Thread erzählt genug.
Herzlichen Dank an alle. Das sauber zu lösen war mir wichtig.
Gruß oki