1. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление

Google Chrome Как Взять Url

Тема в разделе "Delphi - Система", создана пользователем ITShef, 1 ноя 2011.

Статус темы:
Закрыта.
  1. ITShef

    ITShef Гость

    Репутация:
    0
    Вдел в инете кучу примеров, но почему-то ни один из них не работает. Я не очень пока разбираюсь с дескрипторами окон (знаю только общий принцип) и посему возникли трудности. Прошу Вашей помощи с исходником, который просто перехватывал бы URL текущей вкладки CHROME. Только рабочий, плиз, те, что в инете лежат - подошел только один:
    Код:
    function GetText(WindowHandle: hwnd): string;
    var
    TxtLength: integer;
    Buffer: string;
    begin
    TxtLength := SendMessage(WindowHandle, WM_GETTEXTLENGTH, 0, 0) + 1;
    setlength(Buffer, TxtLength);
    SendMessage(WindowHandle, wm_gettext, txtlength, longint(@Buffer[1]));
    Result := Buffer;
    end;
    
    function GetChromeURL(hChrome: hwnd): string;
    begin
    Result := GetText(FindWindowEx(hChrome, 0, 'Chrome_AutocompleteEditView', nil));
    end;
    Но как мне определить хендл хрома для передачи его в качестве параметра - не знаю, FindWindow не помог, напишите, плиз рабочий вариант, а не просто название функций и т.п.
     
  2. AndreyS

    AndreyS Active Member

    Репутация:
    0
    Регистрация:
    15 окт 2007
    Сообщения:
    39
    Симпатии:
    0
    Делфи работает только с IE

    Перехват URL в IE
    ===========

    Код:
    function Get_URL(Servicio: string): String;
    var
    Cliente_DDE: TDDEClientConv;
    temp:PChar;
    begin
    Result := '';
    Cliente_DDE:= TDDEClientConv.Create( nil );
    with Cliente_DDE do
    begin
    SetLink( Servicio, 'WWW_GetWindowInfo');
    temp := RequestData('0xFFFFFFFF');
    Result := StrPas(temp);
    StrDispose(temp);
    CloseLink;
    end;
    Cliente_DDE.Free;
    end;
    
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    showmessage(Get_URL('IExplore'));
    end;
    ===========

    Может поможет
    http://www.rsdn.ru/forum/delphi/4237274.flat.aspx
     
  3. ITShef

    ITShef Гость

    Репутация:
    0
    Спасибо конечно, но Chrome не поддерживает DDЕ, в этом вся проблема.
     
  4. sinkopa

    sinkopa Well-Known Member

    Репутация:
    0
    Регистрация:
    17 июн 2009
    Сообщения:
    344
    Симпатии:
    9
    Вообще-то окошко Google Chrome, в котором находится URL имеет класс Chrome_OmniboxView.
    К тому же, нужно учитывать что может быть запущено несколько окон браузера Chrome.
    Поэтому придется перебрать все окна верхнего уровня, и у ВСЕХ кто имеет класс Chrome_WidgetWin_0 поискать дочернее окно с классом Chrome_OmniboxView.
    Вот, как Вы просилиб рабочий пример:
    Код:
    unit Unit1;
    
    interface
    
    uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    Dialogs, StdCtrls;
    
    type
    TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
    private
    { Private declarations }
    public
    { Public declarations }
    end;
    
    var
    Form1: TForm1;
    
    implementation
    
    {$R *.dfm}
    
    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;
    
    function EnumWndProc(WinHandle: HWND; Param: LongInt): Boolean; stdcall;
    var
    CapWnd: HWND;
    CStr: array[0..114] of Char;
    begin
    Result := True;
    if (GetParent(WinHandle) = 0) then
    begin
    GetClassName(WinHandle, CStr, 114);
    if (StrPas(CStr) = 'Chrome_WidgetWin_0') then
    begin
    CapWnd := FindWindowEx(WinHandle, 0, 'Chrome_OmniboxView', nil);
    if (CapWnd <> 0) then
    TStrings(Pointer(Param)).Add(GetText(CapWnd));
    end;
    end;
    end;
    
    function GetChromeActiveURLS(outList:TStrings): Integer;
    begin
    Result := 0;
    outList.Clear;
    EnumWindows(@EnumWndProc, LParam(Pointer(outList)));
    Result := outList.Count;
    end;
    
    procedure TForm1.Button1Click(Sender: TObject);
    var
    ChromeWinCount: Integer;
    begin
    ChromeWinCount := GetChromeActiveURLS(Memo1.Lines);
    Memo1.Lines.Insert(0,Format('Нашлось %d активных окошек Google Chrome:',[ChromeWinCount]));
    end;
    
    end.
     
  5. ITShef

    ITShef Гость

    Репутация:
    0
    Примногоблагодарен! Вот люблю, когда есть конкретные вопросы и конкретные ответы и никакой демагогии!
    Спасибо ОГРОМНОЕ!
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей