Hallo
DP'ler, ich bins mal wieder
Den Titel konnt ich nicht besser formulieren
Ich möchte in meinem Programm eine Liste aller laufenden Anwendungen/offenen Fenster in einer Listbox ausgeben. In dieser markiert man dann einen Eintrag. Ein Timer soll überprüfen ob der Eintrag noch da ist, sobald dieser verschwunden ist soll der PC heruntergefahren werden. Für alle laufenden Prozesse gibts sowas schon
Klick
Ich habe es mit den Fenstern schon so weit gebracht:
Delphi-Quellcode:
var Prozess, aktiv : string;
function EnumWin(hWnd: THandle; FindWin: PString): Boolean; stdcall; // hier wird die erste Liste erstellt
var
WinText: AnsiString;
begin
Result := True;
if IsWindowVisible(hWnd) and not boolean(GetWindowLong(hWnd, GWL_HWNDPARENT)) then
begin
SetLength(WinText, SendMessage(hWnd, WM_GETTEXTLENGTH, 0, 0));
SendMessage(hWnd, WM_GETTEXT, Length(WinText)+ 1, integer(WinText));
if (length(WinText)> 0) and (WinText <> 'Program Manager') then Form1.ListBox1.Items.Add(WinText);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var FindWin: String;
begin
Listbox1.Clear;
FindWin:= 'Unbenannt - Editor';
EnumWindows(@EnumWin, integer(@FindWin));
end;
procedure TForm1.ListBox1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var i : integer;
begin
if Button = mbLeft then
begin
i := Listbox1.ItemIndex;
Prozess := Listbox1.Items.Strings[i];
Listbox1.Hint := Prozess;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
aktiv := Prozess;
Timer1.Enabled := true;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
end;
Überlegt hatte ich mir dass ein 2. EnumWindows die fenster alle in 1 StringList packt und man dann per Schleife guckt ob der markierte Eintrag noch vorhanden ist. Nur weiß ich nicht wie ich das machen soll.