Autor Beitrag
Tristan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 106



BeitragVerfasst: Mo 12.12.05 23:10 
Nabend,

ist es möglich das Handle eines IE oder Mozilla Browserfensters mit Hilfe der angezeigten URL auszulesen und anschließend eine andere HTML Seite in demselben Fenster anzuzeigen?

Bsp: Anhand der URL www.google.de soll das jeweilige Fensterhandle ermittelt werden um dieses anschließend mit Sendmessage(...SC_CLOSE) zu schließen bzw. eine andere Seite anzuzeigen.


Tristan
Tristan Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 106



BeitragVerfasst: Di 13.12.05 18:25 
Mit dem folgenden Code ist es möglich alle Fenster des Internetexplorers aufzulisten bzw. nach deren Handle zu suchen. Wenn ich aber versuche ein gefundenes Fenster mit sendmessage zu schließen so erscheint der Fehler "Zu wenig Arbeitsspeicher".


ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
procedure GetIEWindows(lb: Tstrings; URl:string);
  function EnumWindowsProc (Wnd: HWND; lb: Tstrings): BOOL; stdcall;
  var
    theClassname: array [0..128of Char;
    caption: Array [0..128of Char;
    IE: IWebbrowser2;
    WndChild: HWND;
  begin

    Result := True;
    Windows.GetClassname( Wnd, theClassname, Sizeof( theclassname ));
    if theClassname='IEFrame' then
    begin
      WndChild := FindWindowEX(Wnd, 0'Shell DocObject View'nil);
      if WndChild <> 0 then
      begin
        WndChild := FindWindowEX(WndChild, 0'Internet Explorer_Server'nil);
        if WndChild <> 0 then
        begin
          if GetIEFromHWND(WndChild, IE)=S_OK then
            if IE<>nil then
             Begin
             lb.Add(IE.LocationURL); //URL Auslesen
             If Pos(URL,IE.LocationURL)>0 then SendMessage(WND, WM_SYSCOMMAND, SC_CLOSE, 0);
             End;
        end;
      end;
    end;
  end;
begin
  lb.Clear;
  EnumWindows(@EnumWindowsProc, integer(lb));
end;


Gibt es vielleicht eine einfachere Möglichkeit das Fenster eines IE zu identifizieren und zu schließen?

Gruss
Tristan

Moderiert von user profile iconGausi: B- durch Highlight-Tags ersetzt