外部程序如何与浏览器通信?希望这对其他人有用:我列出了一些我见过或尝试过但没有成功的选项。如果你知道其他人,请张贴他们。
我的问题:如何在不修改浏览器的情况下从外部 Windows 应用程序获取当前前台浏览器(特别是 Chrome)的 URL 和引荐来源网址?
我试过使用 User32 的 GetWindowText,它抓住了标题(使用 jNative for Java)。这常常让我猜测服务器。可以编写一个将标题映射到 URL 的本地代理,但这需要大量工作。我已经编写了一个 FireFox 扩展来使用这些信息来装配窗口标题,但是它已经过时了,我现在无论如何都需要这个用于 Chrome。我宁愿不要向浏览器添加垃圾,除非广泛有用。也许我可以为 Windows 上的 chrome 提交类似 applescript 的 api 的功能请求。 AHK Window Info 1.7 设法在可见/隐藏文本下获取 URL(但不是引荐来源网址),但我不知道如何移植它使用的代码。
(FF/C# 的一些信息在 q.990409 和 here,一些 IE 信息在 q.823755(重定向到 q.352236)。q.1107978 没有信息。 忽略这个:相关问题:如何用宏控制firefox?如何获取浏览器信息?如何获取当前浏览器 URL?如何从外部应用程序获取 chrome 的当前 URL?)
想法、代码示例、潜在相关问题的指针以及我的特定问题的答案都非常感谢。
快速而肮脏的解决方案(您可以将其从 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 - 时间跟踪软件