-
Wie kann ich alle anderen Fenster schließen?
Tach. Ich habe versucht, mit Delpi6 einen Befehl hinzubekommen, der alle anderen zur Zeit laufenden Fenster beendet. Ich poste mal:
unit Unit21;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, MPlayer, StdCtrls;
type
PFindWindowStruct = ^TFindWindowStruct;
TFindWindowStruct = record
Caption: string;
ClassName: String;
WindowHandle: THandle;
end;
type
TForm21 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormShow(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form21: TForm21;
function FindAWindow(caption: string; ClassName: string): THandle;
function EnumWindowsProc(hWindow: hWnd; lParam: LongInt): boolean; stdcall;
implementation
{$R *.dfm}
procedure TForm21.Button1Click(Sender: TObject);
begin
Close;
end;
function EnumWindowsProc(hWindow: hWnd; lParam: LongInt): boolean; stdcall;
var lpBuffer: PChar;
WindowCaptionFound: boolean;
ClassNameFound: boolean;
begin
GetMem(lpBuffer, 255);
result:=true;
WindowCaptionFound:=false;
ClassNameFound:=false;
try
if GetWindowText(hWindow, lpBuffer,255)>0 then
if Pos(PFindWindowStruct(lParam).Caption, StrPas(lpBuffer))>0
then WindowCaptionFound:=true;
if PFindWindowStruct(lParam).ClassName='' then
ClassNameFound:=true
else if GetClassName(hWindow, lpBuffer, 255)>0 then
if Pos(PFindWindowStruct(lParam).ClassName, StrPas(lpBuffer))>0
then ClassNameFound:=true;
if (WindowCaptionFound and ClassNameFound) then begin
PFindWindowStruct(lParam).WindowHandle:=hWindow;
result:=false;
end;
finally
FreeMem(lpBuffer, sizeof(lpBuffer^));
end;
end;
function FindAWindow(caption: string; ClassName: string): THandle;
var WindowInfo: TFindWindowStruct;
begin
with WindowInfo do begin
caption:=caption;
className:=ClassName;
WindowHandle:=0;
EnumWindows(@EnumWindowsProc,LongInt(@WindowInfo));
result:=WindowHandle;
end;
end;
procedure TForm21.FormShow(Sender: TObject);
var TheWindowHandle: THandle;
begin
TheWindowHandle:=FindAWindow('');
if TheWindowHandle=0 then
ShowMessage('Window not found!')
else
BringWindowToTop(TheWindowHandle);
TheWindowHandle := FindWindow(NIL,'');
if TheWindowHandle<>0 then PostMessage(TheWindowHandle, wm_close, 1, 1);
end;
end.
Schwierigkeiten gibt es bei diesem Code wiefolgt: In der Vorletzten Zeile vor dem Letzten 'end;' ( TheWindowHandle := FindWindow(NIL,''); ) muss hinter NIL,' die Bezeichnung des Fensters das geschlossen werden soll. Ich brauche also noch eine Befehlszeile, die mir sagt wieviele Fenster überhaupt geöffnet sind (Sooft lass' ich den Code dann ablaufen, damit jedes Fenster geschlossen wird) und eine Befehlzeile die mir die Namen/ den Namen des Fensters mitteilt (Damit diese Namen dann in shortstrings gespeichert werden können, welche dann hinter NIL eingetragen werden können). Wenn ihr eventuell auch eine nicht ganz so aufwendige Methode kennt: Immer lasst es mich wissen!
Hoffe, ihr könnt miaaa helfen!
Ach ja, um diesen Code auszuprobieren braucht ihr bloß eine Unit 21 mit dazugehörigem Formular, auf dem ein Button namens Button1 ist. (Zur Zeit passiert aber noch gar nichts, ausser wenn ein Fenster geöffnet ist, das KEINEN Namen hat
)
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln