Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.10.2013, 18:27   #1
Le0n4iko_o
Пользователь
 
Аватар для Le0n4iko_o
 
Регистрация: 11.08.2013
Сообщений: 77
Сообщение получить содержимое URL

Добрый день, господа программисты.
Столкнулся с такой проблемой , мне нужно получить URL с трех браузеров а именно : FireFox,Maxthon,Chrome.
Просмотрев огромную массу информации в интернете, смог реализовать для FireFox.
Но увы все коды для получения URL из Chroma либо не рабочие 1)
Код:
function EnumMainWindowProc(Handle: HWnd; LParam: LParam): boolean; stdcall;
var
  lpClassName: PChar;
  intList: TList;
begin
  intList := TList(LParam);
  GetMem(lpClassName, 255);
  try
    FillChar(lpClassName^, 255, 0);
    if (GetClassName(Handle, lpClassName, 255) > 0)and
      (lpClassName = 'Chrome_WidgetWin_0') then
        intList.Add(Handle);
  finally
    FreeMem(lpClassName);
  end;
  Result := true;
end;

procedure TForm1.GETURL_Chrome;
const
  TEXT_LENGTH = 1024;
var
  list: TList;
  handle, hWndChromeChild: HWND;
  Buffer: string;
begin
  list := TList.Create;
  try
   if EnumWindows(@EnumMainWindowProc, LParam(list)) then
     for handle in list do
       Memo1.Lines.Add(IntToStr(handle));

     Memo1.Lines.Add('');
     Memo1.Lines.Add('Urls');
     Memo1.Lines.Add('');

     for handle in List do
     begin
       hWndChromeChild := FindWindowEx(Handle, 0,
        PChar('Chrome_AutocompleteEditView'), nil);

        if hWndChromeChild <> 0 then
        begin
          SetLength(Buffer, TEXT_LENGTH);
          SendMessage(hWndChromeChild, WM_GETTEXT, TEXT_LENGTH, integer(@Buffer[1]));
          Memo1.Lines.Add(Buffer);
        end;
     end;

  finally
    list.Destroy;
    list := nil;
  end;

end;
2)
Код:
Uses MSHTML, SHDocVw ....

procedure TForm1.Button3Click(Sender: TObject);
var
 ShellWindow: IShellWindows;
 WB: IWebbrowser2;
 spDisp: IDispatch;
 IDoc1: IHTMLDocument2;
 k: Integer;
 S:WideString;
begin
 S:='';
 ShellWindow := CoShellWindows.Create;
 for k := 0 to ShellWindow.Count do
 begin
   spDisp := ShellWindow.Item(k);
   if spDisp = nil then Continue;
   spDisp.QueryInterface(iWebBrowser2, WB);
   if WB <> nil then
   begin
     WB.Document.QueryInterface(IHTMLDocument2, iDoc1);
     if iDoc1<>nil then S:=S+iDoc1.url;
   end;
 end;
 ShowMessage(S);
end;
3)
Код:
function GetActivePageUrlFromChrome(Handle: HWnd; Param: LParam): Bool; stdcall;
var
  List: TStrings;
  hWndChrome, hWndChromeChild: HWND;
  Buffer            : array[0..255] of Char;
begin
  List := TStrings(Param);
  //get the window caption
  SendMessage(Handle, WM_GETTEXT, Length(Buffer), integer(@Buffer[0]));
  //look for the chrome window with "Buffer" caption
  hWndChrome := FindWindow('Chrome_WidgetWin_0', Buffer);
  if hWndChrome <> 0 then
  begin
    hWndChromeChild := FindWindowEx(hWndChrome, 0, 'Chrome_0mniboxView', nil);
    if hWndChromeChild <> 0 then
    begin
      SendMessage(hWndChromeChild, WM_GETTEXT, Length(Buffer), integer(@Buffer));
      List.Add(Buffer);
    end;
  end;
  Result := True;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  slChromeUrl      : TStringList;
begin
  slChromeUrl := TStringList.Create;
  try
    EnumWindows(GetActivePageUrlFromChrome,LParam(slChromeUrl));
    Memo1.Lines.AddStrings(slChromeUrl);
  finally
    FreeAndNil(slChromeUrl);
  end;
end;


либо устаревшие как этот

Код:
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.
Пробовал замену Chrome_AutocompleteEditView на Chrome_0mniboxView но результата никакого.

Есть ли альтернатива этим способам ? буду премного благодарен за помощь

Последний раз редактировалось Le0n4iko_o; 05.10.2013 в 18:42.
Le0n4iko_o вне форума Ответить с цитированием
Старый 05.10.2013, 19:08   #2
Le0n4iko_o
Пользователь
 
Аватар для Le0n4iko_o
 
Регистрация: 11.08.2013
Сообщений: 77
По умолчанию

неужто никто не знает ? О__о
Le0n4iko_o вне форума Ответить с цитированием
Старый 05.10.2013, 19:44   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Скажем так, я лично не знаю как это проще всего сделать, потому задам нескромный вопрос - а зачем это надо?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 06.10.2013, 14:35   #4
Le0n4iko_o
Пользователь
 
Аватар для Le0n4iko_o
 
Регистрация: 11.08.2013
Сообщений: 77
По умолчанию

Stilet для аутентификации пользователей вк
заметил такую вещь , класс в хроме теперь называется Chrome_WidgetWin_1
но ! у него нету дочернего окна типа Chrome_AutocompleteEditView или Chrome_0mniboxView
T__T

Последний раз редактировалось Le0n4iko_o; 06.10.2013 в 16:52.
Le0n4iko_o вне форума Ответить с цитированием
Старый 06.10.2013, 16:01   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
для аутентификации пользователей вк
Если не ошибаюсь у ВК есть какой-то свой API. Может попробуешь его использовать?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 06.10.2013, 16:17   #6
Le0n4iko_o
Пользователь
 
Аватар для Le0n4iko_o
 
Регистрация: 11.08.2013
Сообщений: 77
По умолчанию

Stilet есть некое ПО , которое работает с неким приложением в вк (пользователь сам выбирает 1 - ин из 3- ех браузеров). Хотелось бы реализовать аутентификацию по страницам вк (достаточно по id) , фейков полно и это напрягает.
Проблема в том что бы юзать API Vk нужна авторизация , к сожалению мне этот вариант не подходит.

Последний раз редактировалось Le0n4iko_o; 06.10.2013 в 16:36.
Le0n4iko_o вне форума Ответить с цитированием
Старый 06.10.2013, 23:45   #7
Le0n4iko_o
Пользователь
 
Аватар для Le0n4iko_o
 
Регистрация: 11.08.2013
Сообщений: 77
По умолчанию

есть еще варианты ?
Le0n4iko_o вне форума Ответить с цитированием
Старый 07.10.2013, 00:47   #8
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,442
По умолчанию

Цитата:
есть еще варианты ?
Пишите JS плагин к браузеру, та работаете с window.location объектом.
Данные передаете в свою программу каким-либо образом(браузеры не имеют никаких возможностей к запуску любого ПО, или прямой работе с ФС пользователя), ну может быть IE. Там есть дыра в безопасности, называется ActiveX.
Человек_Борща вне форума Ответить с цитированием
Старый 07.10.2013, 01:24   #9
Le0n4iko_o
Пользователь
 
Аватар для Le0n4iko_o
 
Регистрация: 11.08.2013
Сообщений: 77
По умолчанию

Человек_Борща казалось бы что там вытащить URL, однако придется попотеть .
Альтернативы так и не смог придумать, так что спасибо за совет!
Stilet спасибо за внимание и советы.
Le0n4iko_o вне форума Ответить с цитированием
Старый 31.10.2013, 19:02   #10
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,442
По умолчанию

Цитата:
Человек_Борща казалось бы что там вытащить URL, однако придется попотеть .
оО
Код:
var currenturl = window.location.href;
alert(currenturl);
Человек_Борща вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Получить URL с chrome Miller-1981 C++ Builder 0 22.08.2012 23:00
Получить содержимое чужого окна, возможно? jihot Общие вопросы Delphi 13 23.07.2011 16:39
Получить содержимое ячейки Listview Lleu C# (си шарп) 4 22.02.2011 00:12
Как получить содержимое веб страницы? SuperOrange Общие вопросы по Java, Java SE, Kotlin 0 05.07.2009 10:39
Как получить содержимое папки ? - fenix - Помощь студентам 4 19.04.2008 06:25