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".
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..128] of Char; caption: Array [0..128] of 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); 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
Gausi: B- durch Highlight-Tags ersetzt