Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Alle IE Fenster schließen (https://www.delphipraxis.net/20685-alle-ie-fenster-schliessen.html)

Evian 21. Apr 2004 15:44


Alle IE Fenster schließen
 
Ich suche eine Möglichkeit zu überprüfen, ob der Internet Explorer geöffnet ist
und wenn ja ihn zu schließen. Also quasi zu verbieten, das man den IE zum Serven
nutzen kann.

Derzeit mach ich das so:

Code:
procedure Tform1.KillProcess(hWindowHandle: HWND);
var
  hprocessID: INTEGER;
  processHandle: THandle;
  DWResult: DWORD;
begin
  SendMessageTimeout(hWindowHandle, WM_CLOSE, 0, 0,
    SMTO_ABORTIFHUNG or SMTO_NORMAL, 5000, DWResult);
  if isWindow(hWindowHandle) then
  begin
    GetWindowThreadProcessID(hWindowHandle, @hprocessID);
    if hprocessID <> 0 then
    begin
      processHandle := OpenProcess(PROCESS_TERMINATE or PROCESS_QUERY_INFORMATION,
        False, hprocessID);
      if processHandle <> 0 then
      begin
        TerminateProcess(processHandle, 0);
        CloseHandle(ProcessHandle);
      end;
    end;
  end;
end;

procedure TForm1.IEBeenden;
var
 ShellWindow: IShellWindows;
 WB: IWebbrowser2;
 spDisp: IDispatch;
 IDoc1: IHTMLDocument2;
 k: Integer;
begin
 ShellWindow := CoShellWindows.Create;
 for k := 0 to ShellWindow.Count do
 begin
   spDisp := ShellWindow.Item(k);
   if spDisp = nil then Continue;
   spDisp.QueryInterface(iWebBrowser2, WB);
   if WB <> nil then
   begin
     WB.Document.QueryInterface(IHTMLDocument2, iDoc1);
     if iDoc1 <> nil then
     begin
        KillProcess(wb.HWND);
     end;
   end;
 end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  IF xzeit = 0 THEN
  IEBeenden;
end;
Das funktioniert auch ganz gut, aber frist bestimmt ne Menge Ressourcen.
Hätte da noch jemand eine Bessere Idee?!

gruß

Evian

The-X 21. Apr 2004 16:30

Re: Alle IE Fenster schließen
 
Ich hab's über die Fensterklassen gemacht:

Delphi-Quellcode:
Procedure CloseAllIE;
begin
 while FindWindow('IEFrame',nil)<>0 do
  SendMessage(FindWindow('IEFrame',nil),WM_Syscommand,SC_Close,0);
end;
alternativ noch mit einem Anti-Freeze zu versetzen ;)

Evian 21. Apr 2004 17:03

Re: Alle IE Fenster schließen
 
sehr geil!!! :dancer2:

öhm das mit dem Antifreeze, meinst Du die Indy kombo?!
Wie nutz ich die, und was macht sie genau?!

thx

Evi

MathiasSimmack 21. Apr 2004 21:57

Re: Alle IE Fenster schließen
 
Alternative

The-X 22. Apr 2004 17:33

Re: Alle IE Fenster schließen
 
nein,

mit Anti-Freeze meinte ich z.B. ein Application.ProcessMessages o.ä.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:49 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz