浏览器和外部应用程序通信? (Chrome 在 Windows 上的当前 url 和 referrer?)

问题描述 投票:0回答:1

外部程序如何与浏览器通信?希望这对其他人有用:我列出了一些我见过或尝试过但没有成功的选项。如果你知道其他人,请张贴他们。

  • 如果是 Mac,请使用 AppleScript(信息/解决方案位于 q.263741,尝试此搜索
  • 使用或创建 Firefox 扩展(iMacros?, q.410411), Chrome (?)
  • 使用 WebBrowser Control 托管 IE 实例(一些技巧在 q.1143187
  • 如果您拥有该网站,这可以通过后台 ajax 脚本完成

我的问题:如何在不修改浏览器的情况下从外部 Windows 应用程序获取当前前台浏览器(特别是 Chrome)的 URL 和引荐来源网址?

我试过使用 User32 的 GetWindowText,它抓住了标题(使用 jNative for Java)。这常常让我猜测服务器。可以编写一个将标题映射到 URL 的本地代理,但这需要大量工作。我已经编写了一个 FireFox 扩展来使用这些信息来装配窗口标题,但是它已经过时了,我现在无论如何都需要这个用于 Chrome。我宁愿不要向浏览器添加垃圾,除非广泛有用。也许我可以为 Windows 上的 chrome 提交类似 applescript 的 api 的功能请求。 AHK Window Info 1.7 设法在可见/隐藏文本下获取 URL(但不是引荐来源网址),但我不知道如何移植它使用的代码。

(FF/C# 的一些信息在 q.990409here,一些 IE 信息在 q.823755(重定向到 q.352236)。q.1107978 没有信息。 忽略这个:相关问题:如何用宏控制firefox?如何获取浏览器信息?如何获取当前浏览器 URL?如何从外部应用程序获取 chrome 的当前 URL?)

想法、代码示例、潜在相关问题的指针以及我的特定问题的答案都非常感谢。

winapi url browser system-calls
1个回答
1
投票

快速而肮脏的解决方案(您可以将其从 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 - 时间跟踪软件

© www.soinside.com 2019 - 2024. All rights reserved.