浏览器和外部应用通信? (Chrome在Windows上的当前网址和引荐来源?)

时间:2009-08-23 01:03:58

标签: winapi url browser system-calls

外部程序如何与浏览器通信?希望这会对其他人有所帮助:我列出了我见过或试过的一些选项,但没有成功使用它。如果您了解其他人,请发布。

  • 如果是Mac,请使用AppleScript(q.263741上的信息/解决方案,尝试this search
  • 使用或创建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(但不是引用者),但我不知道如何移植它使用的代码。

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

想法,代码示例,指向潜在相关问题的指针以及我特定问题的答案都很受欢迎。

1 个答案:

答案 0 :(得分: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 - time tracking software