Здравствуйте, в этой статье я хотел бы рассказать как можно получить ссылку с браузера, который Вы укажите, или можно сделать, который у Вас открыт в текущий момент, в Интернете полно таких исходников, но они довольно сильно громоздкие, а мы еще и получим заголовок страницы, то есть название окна браузера (название страницы, которая в данный момент открыта во вкладке или в окне). Мы будем использовать очень хороший компонента, нет мы даже не будем его качать откуда-то, а просто воспользуемся стандартным компонентов и все, у нас готова наша почти программа для получения этих url из браузера, одно отделяет нас — это 3 строчки кода =). Данный компонент называется

  • DdeClientConv

Который находится на вкладке

  • System

Мы просто устанавливаем данный компонент на форму нашу и все, конечно можно создать его и программно, но пока что не будем насчет этого заморачиваться.

Теперь давайте на OnClick кнопки напишем код, который будет получать url с браузера и его заголовок.

procedure TForm1.Button1Click(Sender: TObject);
var
 Temp:WideString;
begin
   DdeClientConv1.SetLink('opera','WWW_GetWindowInfo');
   Temp:=DdeClientConv1.RequestData('sUrl');
   ShowMessage(Temp);
end;

С помощью SetLink мы устанавливаем браузер, с которого мы будем  получать информацию, а также какую информацию, а затем в переменную Temp мы записываем это и через запятую в переменной у нас будет в двойных кавычках url и заголовок браузера. Теперь мы можем пропарсить это все и получить например только url

procedure TForm1.Button1Click(Sender: TObject);
var
 Temp,url:WideString;
begin
   DdeClientConv1.SetLink('opera','WWW_GetWindowInfo');
   Temp:=DdeClientConv1.RequestData('sUrl');
   delete(Temp,1,pos('"',temp));
   url:=copy(temp,1,pos('"',temp)-1);
   ShowMessage(Url);
end;

Можно написать подобную функцию и использовать ее

function GetUrlBrowser(NameBrowser:WideString):WideString;
var
 Temp:WideString;
begin
   Result:='';
   Form1.DdeClientConv1.SetLink(NameBrowser,'WWW_GetWindowInfo');
   Temp:=Form1.DdeClientConv1.RequestData('surl');
   Delete(temp,1,pos('"',temp));
   delete(temp,pos('"',temp),length(temp));
   result:=temp;
end;

А использовать ее можно так

procedure TForm1.Button2Click(Sender: TObject);
begin
   Caption:=GetUrlBrowser('opera');
end;

Данный код компилировался в Delphi 7, и был протестирован на следующих браузерах

  • FireFox
  • Opera
  • IEplorer

Пробывал Google Chrome, но почему-то не захотел

В настоящее время очень популярно иметь свой сайт. Потому что, через сайт можно давать какие-то советы, продавать товары, вести свой бизнес и так далее. Но здесь очень важно — продвижение сайта. Чтобы Ваш сайт быстро находили, часто пользовались им Вам необходимо поднять позиции сайта. Для данных целей есть различные программы, но лучше всего доверится специалисту, который работает в данной сфере.

Исходники статьи качаем тут

Автор статьи - Andrey53

Метки: , , ,




К записи “Получаем ссылку из браузера” оставлено комментариев: 11.

  1. Yuri:

    Спасибо, за пост, очень понадобился

  2. Vlad:

    >>Пробывал Google Chrome, но почему-то не захотел
    Судя по тому, что удалось найти в сети по этому поводу (искал ответ на оффюстраничке Chronium) Chrome не поддерживает DDE — отсюда и проблема. А в посте указано команда WWW_GetWindowInfo которая использовалась изначально в IE — на MSDN есть целый список команд, который поддерживает IE. Можно было бы и их в посте рассмотреть

  3. Andrey53:

    to Vlad,спасибо большое за информацию

  4. Yuri:

    C 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;

    а для Safari решения не нашёл(

  5. sasha:

    Здравствуйте. А можно ли как то сделать чтоб получать информацию с нескольких одновременно запущенных браузеров?

  6. BlackWitcher:

    К сожалению, на IE9 не заработало.
    Но замечательно заработало на Firefox.

    Универсальное решение нашлось так:
    строку
    Temp:=DdeClientConv1.RequestData(‘sUrl’);
    заменяем на
    Temp := DdeClientConv1.RequestData(‘0xFFFFFFFF’);
    Теперь работает и в IE.
    Проверял на D2010 под Win7 x64.

    Огромное спасибо за пост!

    P.S. В посте опечатка перед словами «пробовал Google Chrome…»
    Там в списке перечисленных браузеров указано IEplorer а правильнее в контексте приведенного кода использовать IExplore.

  7. Удав Анаконда:

    Полезная статья, спасибо! Только я не понял Yuri, как использовать GetChromeURL? Напишите пожалуйста пример вызова

  8. Дмитрий:

    Ребята помогите!Мне нужно так:
    Чтоб программа ждала свой юрл допустим я открыл site.ru и вылезло сообщение

Оставить комментарий

Вы можете использовать следующие теги:

*