Связь между браузером и внешним приложением? (Текущий URL Chrome и реферер в Windows?) - PullRequest
1 голос
/ 23 августа 2009

Как внешняя программа может взаимодействовать с браузером? Надеюсь, это будет полезно другим: я перечисляю несколько вариантов, которые я видел или пробовал, пока безуспешно заставлял это работать. Если вы знаете других, пожалуйста, напишите их.

  • Если Mac, используйте AppleScript (информация / решение на q.263741 , попробуйте этот поиск )
  • Используйте или создайте расширение для Firefox ( iMacros ?, q.410411 ), Chrome (?)
  • Используйте WebBrowser Control для размещения экземпляра IE (некоторые советы на q.1143187 )
  • Если вы являетесь владельцем сайта, это можно сделать с помощью фонового сценария ajax

Мой вопрос: как получить URL-адрес и реферер текущего браузера переднего плана (в частности, Chrome) из внешнего приложения Windows без изменения браузера?

Я пытался использовать User32 GetWindowText, который захватывает заголовок (используя jNative для Java). Это часто позволяет мне угадать сервер. Может быть возможно написать локальный прокси, который будет отображать заголовки на URL, но это большая работа. Я написал расширение для FireFox, чтобы связать заголовок окна с этой информацией, но он устарел, и в любом случае мне это нужно для Chrome. Я бы предпочел не добавлять мусор в браузер, если это не очень полезно. Возможно, я мог бы подать запрос на функцию api-подобного API для Chrome на Windows. AHK Window Info 1.7 удается захватить URL (но не реферер) под видимым / скрытым текстом, но я не знаю, как портировать код, который он использует.

(Некоторая информация для FF / C # на q.990409 & здесь , некоторая информация IE на q.823755 (перенаправляет на q. 352236 ). Нет информации на q.1107978 . Игнорируйте это: Вопросы, связанные с данной: Как я могу управлять firefox с помощью макроса? Как я могу получить информацию о браузере? Как я могу получить текущий URL браузера? Как я могу получить текущий URL Chrome из внешнего приложения? )

Идеи, примеры кода, ссылки на потенциально важные вопросы и ответы на мои конкретные вопросы приветствуются.

1 Ответ

1 голос
/ 18 января 2010

Быстрое и грязное решение (вы можете конвертировать его из Delphi на ваш язык):

var
 h : HWND;
 pCh : array [0..255] of char;
begin
 Result := '';
 h := GetForegroundWindow;   // or pass main Chrome window here
 if h = 0 then exit;

 h := GetWindow(h,GW_CHILD);
 if h = 0 then exit;

 h := GetWindow(h,GW_HWNDNEXT);
 if h = 0 then exit;

 SendMessage(h, WM_GETTEXT, SizeOf(pCh), integer(@pCh)) ;
 Result := pCh;                // <-- URL is here!
end;

Спасибо за вопрос;) - только что добавил в наш WorkTime - программное обеспечение для отслеживания времени

...