Hallo Wissende,
Ich kann keinerlei Delphi
Hoffentlich könnt ihr mir helfen
-
Kann hier jmd. den nachfolgenden Delphi-Code so umbauen, dass er aus ALLEN laufenden Browserfenstern (egal IE, Mozilla,Opera,Netscape) ALLE URLs ausliest und in eine Textdatei schreibt.
-
Ich kann Delphi 4.0 bekommen, krieg man es damit auch als Völligunerfahrener hin, aus dem Code eine lauffähige EXE oder COM zu basteln?
Vielen Dank für die Aufmerkamkeit
Gruß
Reinhard
ps: Erst kommt der Delphi-Code, dann eine Erläuterung wozu ich das bräuchte.
Wie kann ich die URLs aus allen IE-Fenstern ermitteln?
Folgender Code ermittelt in der Funktion GetIEWindows zunächst alle geöffneten Internet Explorer-Fenster und dann den URL der darin angezeigten Webseite.
Damit der Code funktioniert, müssen die beiden Units Shdocvw_tlb.pas und MSHTML_TLB.pas angelegt werden. Dazu in Delphi über das Menü Komponenten/ActiveX importieren erst „Microsoft HTML Object Library“ auswählen und auf „Unit anlegen“ klicken. Das gleiche mit „Microsoft Internet Control“ wiederholen.
uses
ActiveX, Shdocvw\_tlb, MSHTML\_TLB;
type
TObjectFromLResult = function(LRESULT: lResult; const IID: TIID; WPARAM: wParam;
out pObject): HRESULT; stdcall;
function GetIEFromHWND(WHandle: HWND; var IE: IWebbrowser2): HRESULT;
var
hInst: HWND;
lRes: Cardinal;
MSG: Integer;
pDoc: IHTMLDocument2;
ObjectFromLresult: TObjectFromLresult;
begin
hInst := LoadLibrary('Oleacc.dll');
@ObjectFromLresult := GetProcAddress(hInst, 'ObjectFromLresult');
if @ObjectFromLresult nil then begin
try
MSG := RegisterWindowMessage('WM\_HTML\_GETOBJECT');
SendMessageTimeOut(WHandle, MSG, 0, 0, SMTO\_ABORTIFHUNG, 1000, lRes);
Result := ObjectFromLresult(lRes, IHTMLDocument2, 0, pDoc);
if Result = S\_OK then
(pDoc.parentWindow as IServiceprovider).QueryService(IWebbrowserApp, IWebbrowser2, IE);
finally
FreeLibrary(hInst);
end;
end;
end;
procedure GetIEWindows(lb: TListBox);
function EnumWindowsProc (Wnd: HWND; lb: TListBox): 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 IEnil then
lb.Items.Add(IE.LocationURL);
end;
end;
end;
end;
begin
lb.Clear;
EnumWindows(@EnumWindowsProc, integer(lb));
end;
Beispiel-Aufruf, der die URLs in einer ListBox mit Namen ListBox1 ausgibt:
procedure TForm1.Button1Click(Sender: TObject);
begin
GetIEWindows(ListBox1);
end;
Für ein selbstgeschriebenes Excel-VBA-Programm fehlt mir noch das I-Tüpfelchen, ich möchte die in Excel errechneten Werte direkt ins Internet , an ein geöffnetes Chatfenster, schicken, dazu habe ich mir eine html-Seite gebastelt, die ich mit Excel lokal starte und mit dem Excel-Befehl sendkeys die Daten schicke. Klappt auch wunderbar.
Nur muss ich dann immer einmalig beim Starten von Excel, aus der geöffneten Chat-Seite bzw. deren Quelltext eine SessionID (sess=xyz…) auslesen diese in die lokale html eintragen, dann läuft es.
Dies will ich nun automatisieren. Leider fand ich weder hier im Excel-ArchivForum noch bei direkten Anfragen an die hiesigen Excel-VBA Experten noch bei monatelanger Recherche im Internet einen passenden Excel-VBA-Code der dieses tut.
Per Zufall fand ich nun den vorstehenden Delphi-Code.