Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi URL von Chromefenster auslesen (https://www.delphipraxis.net/181800-url-von-chromefenster-auslesen.html)

GhostDog 9. Sep 2014 21:42

URL von Chromefenster auslesen
 
Abend zusammen,

ich bin ziemlich neu hier, deswegen bin ich nicht sicher ob das Thema hier richtig ist..naja mal schauen:-D

Ich möchte gerne die URL eines kurz zuvor geöffneten CHromefensters in ein Eingabefeld von DElphi kopiert haben.
Bis jetzt habe ich das unten stehende gefunden. Allerdings weiß ich nicht welches Handle das Chromefenster hat


function Tsuche.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);


eErgebnis.Text := GetChromeURL(#FEHLENDER PARAMETER#); <-----Was muss da rein?!


Hoffe ich habe mein Problem ein wenig verständlich gemacht:lol::lol:

ps: habe mit google nichts genaueres gefunden.. Wahrscheinlich ist die Lösung ganz einfach und ich komme nur nicht drauf:oops:


Und jetzt schon mal vielen Dank im vorraus:thumb:

pelzig 9. Sep 2014 23:21

AW: URL von Chromefenster auslesen
 
An der Chrome-URL haben sich schon Viele vergeblich versucht:
http://www.delphipraxis.net/178353-d...-auslesen.html

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);
  //funzt auch nicht:
  //hwndChromeOmnibox := FindWindowEx(hwndChromeWindow, 0, PChar('Chrome_AutocompleteEditView'), nil);
  if hwndChromeOmnibox <> 0 then
    Result := GetText(hwndChromeOmnibox);
end;

procedure TForm1.Button3Click(Sender: TObject);
var
  ChromeHWND: HWND;
  Buffer: array[0..255] of Char;
  s: string;
begin
  ChromeHWND := FindWindow('Chrome_WidgetWin_0', Buffer);
  if ChromeHWND <> 0 then
  begin
    s := GetChromeUrl(ChromeHWND);
    MessageBox(Handle, PChar(s), 'URL-Info', mb_Ok);
  end
  else
    MessageBox(Handle, 'Nix gefunden.', 'Fehler', mb_Ok or mb_IconExclamation);
end;
Liefert leider immer einen leeren String zurück :(

MfG

himitsu 10. Sep 2014 08:13

AW: URL von Chromefenster auslesen
 
Zitat:

Zitat von pelzig (Beitrag 1271912)
Liefert leider immer einen leeren String zurück :(

Windows sagt einem sogar was los ist, wenn man es mal fragen würde.
-> Rückgabewerte von WinAPIs auswerten

Es gibt entweder keine Fenster/Edits, mit dem Namen "Chrome_OmniboxView" oder es es sind keine Text-Controls.

GhostDog 14. Sep 2014 14:48

AW: URL von Chromefenster auslesen
 
Und das heißt jetzt was?:shock:

Also wenn ich das richtig verstanden habe, benötige ich das aktuelle Crome-Tab-Handle! und das kann ich mit dem ProcessExplorer bekommen...Allerdings bekomme ich dann zwar die Integerwerte, allerdings funzen die trotzdem nicht:oops:?! also entweder mache ich was falsch oder ich bin zu dumm um die abzulesen ;=)

Wäre über Hilfe sehr dankbar

mjustin 15. Sep 2014 07:00

AW: URL von Chromefenster auslesen
 
Laut dieser Antwort auf SO unterstützt Chrome die Windows Accessibility API, mit der sich Browser Bar Informationen und Inhalte der Webseite auslesen lassen sollen:

http://stackoverflow.com/a/16853301/80901

Es scheint allerdings .NET / managed Code zu sein.

himitsu 15. Sep 2014 11:46

AW: URL von Chromefenster auslesen
 
Zitat:

Zitat von GhostDog (Beitrag 1272532)
Und das heißt jetzt was?:shock:

FindWindow gibt im Fehlerfall (Result=0) erweitere Fehlerinfos aus, welche man ebenfalls auswerten/anzeigen könnte. :roll: (z.B. kein Fenster mit diesem Namen gefunden)
Delphi-Quellcode:
if ChromeHWND <> 0 then
  ...
else
  //MessageBox(Handle, PChar('Irgenein Fehlerzusatztext: ' + SysErrorMessage(GetLastError)), 'Fehler', mb_Ok or mb_IconExclamation);
  RaiseLastOSError;
Und wenn man statt SentMessage und WM_GETGEXTLENGTH/WM_GETTEXT die APIs GetWindowTextLength und SetWindowText verwendet, dann kann man davon auch die erweiterten Fehlercodes erfahren. (z.B. kein Text-Control)

Zitat:

Delphi-Quellcode:
  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;

Diese Funktion ist auch bissl Mist, denn hier ist die abschließende #0 mit im String.
Delphi-Quellcode:
  function GetText(WindowHandle: HWND): string;
  var
    TxtLength: Integer;
  begin
    TxtLength := SendMessage(WindowHandle, WM_GETTEXTLENGTH, 0, 0);
    SetLength(Result, TxtLength);
    if TxtLength > 0 then
      SendMessage(WindowHandle, WM_GETTEXT, TxtLength + 1, WPARAM(PChar(Result)));
  end;

  function GetText(WindowHandle: HWND): string;
  begin
    SetLength(Result, SendMessage(WindowHandle, WM_GETTEXTLENGTH, 0, 0));
    if Result <> '' then
      SendMessage(WindowHandle, WM_GETTEXT, Length(Result) + 1, WPARAM(PChar(Result)));
  end;

DeddyH 15. Sep 2014 14:22

AW: URL von Chromefenster auslesen
 
Zitat:

Zitat von himitsu (Beitrag 1272614)
Und wenn man statt SentMessage und WM_GETGEXTLENGTH/WM_GETTEXT die APIs GetWindowTextLength und SetWindowText verwendet, dann kann man davon auch die erweiterten Fehlercodes erfahren. (z.B. kein Text-Control)

Was aber mit fremden Programmen nicht funktionieren dürfte.
Zitat:

However, GetWindowTextLength cannot retrieve the length of the text of an edit control in another application.
bzw.
Zitat:

However, GetWindowText cannot retrieve the text of a control in another application.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:42 Uhr.

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