Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi URL aus Browser holen? (https://www.delphipraxis.net/172543-url-aus-browser-holen.html)

PeterPanino 9. Jan 2013 21:13

URL aus Browser holen?
 
Hallo! Ich habe jetzt sehr lange gesucht, aber nichts gefunden: Ich möchte die URL aus dem Browser holen. Das funktioniert per DDE mit Firefox und MSIE, aber nicht mit Opera und Chrome (offenbar kann Chrome kein DDE):
Delphi-Quellcode:
var
  BSourceFileNameNoExt: string;
  ClDDE: TDDEClientConv;
  zwi: PAnsiChar;

ClDDE := TDDEClientConv.Create(nil);
try
  with ClDDE do
  begin
    SetLink(BSourceFileNameNoExt, 'WWW_GetWindowInfo');
    zwi := RequestData('0xFFFFFFFF');
    CloseLink;
  end;
  Result := ExtractFirstQuotedString(StrPas(zwi));
finally
  StrDispose(zwi);
  ClDDE.Free;
end;
Wer weiß, wie man die URL aus jedem Browser holen kann, auch von Chrome und Opera?

CCRDude 10. Jan 2013 08:59

AW: URL aus Browser holen?
 
Ich hab das vor Ewigkeiten mal mit EnumWindows, EnumChildWindows and GetWindowText gemacht. Erfordert vorher ein wenig Arbeit mit WinSpy und ist nicht versionsänderungssicher. Finde den Code gerade leider auch nicht wieder. Seit Vista musst Du unter Umständen darauf achten, im Manifest entsprechende Angaben zu machen, um überhaupt so zugreifen zu können.

jaenicke 10. Jan 2013 09:09

AW: URL aus Browser holen?
 
Die Frage ist zusätzlich noch was denn "der Browser" ist. Ich habe z.B. typischerweise mehrere Tabs offen, wenn ich gerade etwas mache, da gibt es dann ja nicht die eine URL, sondern es sind mehrere offen.

PeterPanino 10. Jan 2013 12:15

AW: URL aus Browser holen?
 
Zitat:

Zitat von jaenicke (Beitrag 1198455)
Die Frage ist zusätzlich noch was denn "der Browser" ist. Ich habe z.B. typischerweise mehrere Tabs offen, wenn ich gerade etwas mache, da gibt es dann ja nicht die eine URL, sondern es sind mehrere offen.

Natürlich der aktuell geöffnete Tab.

PeterPanino 10. Jan 2013 12:32

AW: URL aus Browser holen?
 
Zitat:

Zitat von CCRDude (Beitrag 1198454)
Ich hab das vor Ewigkeiten mal mit EnumWindows, EnumChildWindows and GetWindowText gemacht. Erfordert vorher ein wenig Arbeit mit WinSpy und ist nicht versionsänderungssicher. Finde den Code gerade leider auch nicht wieder. Seit Vista musst Du unter Umständen darauf achten, im Manifest entsprechende Angaben zu machen, um überhaupt so zugreifen zu können.


Winspy sagt, die Klasse der URL-Box in Chrome ist "Chrome_OmniboxView", was eigentlich systemweit eindeutig sein und sich wohl auch nicht so schnell ändern dürfte. Bei meiner Aufgabenstellung ist der Chrome-Browser das TopMostWindow. Jetzt werd ich mal versuchen, über das Handle von GetForegroundWindow das ChildControl Chrome_OmniboxView ausfindig zu machen und von dem dann den Inhalt auszulesen.

PeterPanino 10. Jan 2013 14:55

AW: URL aus Browser holen?
 
Heureka! Hier ist die Funktion:
Delphi-Quellcode:
function GetChromeURL(const hwndChromeWindow: HWND): string;
var
  hwndChromeOmnibox: HWND;

  function GetText(WindowHandle: HWND): string;
  var
    TxtLength: integer;
    Buf: string;
  begin
    TxtLength := SendMessage(WindowHandle, WM_GETTEXTLENGTH, 0, 0) + 1;
    SetLength(Buf, TxtLength);
    SendMessage(WindowHandle, WM_GETTEXT, TxtLength, LongInt(@Buf[1]));
    Result := Buf;
  end;
begin
  Result := '';

  hwndChromeOmnibox := FindWindowEx(hwndChromeWindow, 0, PChar('Chrome_OmniboxView'), nil);
  if hwndChromeOmnibox <> 0 then
    Result := GetText(hwndChromeOmnibox);
end;

Man übergibt der Funktion das Handle des Chrome-Fensters und erhält als Ergebnis die in der URL-Zeile angezeigte URL.

PeterPanino 10. Jan 2013 15:45

AW: URL aus Browser holen?
 
Ich habe das jetzt auch mit Opera versucht, aber bei Opera kriege ich mit Winspy für alle Fensterelemente immer nur die Klasse "OperaWindowClass". Weiß jemand, wie man an die Opera URL-Box rankommen könnte? DDE funktioniert bei Opera auch nicht.

dunningkruger 10. Jan 2013 15:56

AW: URL aus Browser holen?
 
Siehe dein #1,

Delphi-Quellcode:
BSourceFileNameNoExt:='Opera';
Opera kann DDE :wink:

PeterPanino 10. Jan 2013 16:01

AW: URL aus Browser holen?
 
Zitat:

Zitat von dunningkruger (Beitrag 1198513)
Siehe dein #1,

Delphi-Quellcode:
BSourceFileNameNoExt:='Opera';
Opera kann DDE :wink:

Danke, habe es gerade rausgefunden und wollte es gerade posten!

Habe jetzt diese Browser abgedeckt: MSIE, Firefox, Chrome, Opera. Welche Browser sind noch relevant?

Klaus01 10. Jan 2013 16:02

AW: URL aus Browser holen?
 
vielleicht Safari?

Grüße
Klaus


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:00 Uhr.
Seite 1 von 2  1 2      

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