Google Chrome Как Взять Url

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

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

    ITShef Гость

    Вдел в инете кучу примеров, но почему-то ни один из них не работает. Я не очень пока разбираюсь с дескрипторами окон (знаю только общий принцип) и посему возникли трудности. Прошу Вашей помощи с исходником, который просто перехватывал бы URL текущей вкладки CHROME. Только рабочий, плиз, те, что в инете лежат - подошел только один:
    Код (Text):
    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

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

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

    Код (Text):
    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 Гость

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

    sinkopa Well-Known Member

    Регистрация:
    17 июн 2009
    Сообщения:
    344
    Симпатии:
    9
    Вообще-то окошко Google Chrome, в котором находится URL имеет класс Chrome_OmniboxView.
    К тому же, нужно учитывать что может быть запущено несколько окон браузера Chrome.
    Поэтому придется перебрать все окна верхнего уровня, и у ВСЕХ кто имеет класс Chrome_WidgetWin_0 поискать дочернее окно с классом Chrome_OmniboxView.
    Вот, как Вы просилиб рабочий пример:
    Код (Delphi):
    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 Гость

    Примногоблагодарен! Вот люблю, когда есть конкретные вопросы и конкретные ответы и никакой демагогии!
    Спасибо ОГРОМНОЕ!
     
Загрузка...
Похожие Темы - Google Chrome Как
  1. Ryko
    Ответов:
    0
    Просмотров:
    166
  2. rownong
    Ответов:
    1
    Просмотров:
    197
  3. areostar
    Ответов:
    0
    Просмотров:
    350
  4. Hehabr
    Ответов:
    1
    Просмотров:
    544
  5. scandic781
    Ответов:
    0
    Просмотров:
    995
Статус темы:
Закрыта.

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