Also ein Fensterauflister ist schnell gemacht. Folgendes Beispiel demonstriert, wie -via Buttonklick- alle Hauptfenster, die sichtbar sind oder ein Systemmenü haben, minimiert werden:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| function CloseAll(Wnd: hWnd; lparam: LPARAM): longbool; stdcall; begin if((GetWindowLong(Wnd,GWL_STYLE) and (WS_VISIBLE or WS_SYSMENU)) = (WS_VISIBLE or WS_SYSMENU)) then PostMessage(Wnd,WM_SYSCOMMAND,lParam,0);
Result := true; end;
procedure TForm1.Button1Click(Sender: TObject); begin EnumWindows(@CloseAll,SC_MINIMIZE); end; |
Wer statt
SC_MINIMIZE mal
SC_CLOSE eingibt, kriegt auch offene Explorer zu.
So, wenn du dir jetzt mal die Funktion "CloseAll" anguckst, dann siehst du, dass dort eine HWND-Variable vorhanden ist. Wenn du die if-Abfrage und das
PostMessage weglässt könntest du z.B. mit
Quelltext
1: 2:
| GetClassName GetWindowText |
den Klassennamen und den Fenstertitel auslesen und an eine ListBox usw. weiterreichen. Achtung: Nicht jedes Fenster liefert einen Fenstertitel zurück.
Für Prozesse und Threads musst du andere Methoden benutzen. Da gibt´s aber einige Delphi-Demos. Musst einfach mal ´ne Suchmaschine wie Google bemühen, da sollte was zu finden sein.