2

我正在尝试检测用户现在正在查看的共享点中的哪个网站。一种方法是从浏览器读取 URls,并尝试将它们与共享点解决方案的参考 URL 进行比较。我还没有找到任何适用于 IE 和 Firefox 的解决方案。

这个想法是编写一个小型 C# 应用程序来收集 URL 并进行比较。

TIA

4

4 回答 4

2

可以使用 Win32 API 函数 FindWindow 以一种非常笨拙且容易损坏的方式执行此操作。

以下 C++ 示例查找 Windows Calculator 的运行实例并获取其中的编辑字段的值。您应该能够在 C# 中执行类似的操作。免责声明:抱歉,我实际上并没有检查以确保此代码可以编译。:)

float GetCalcResult(void)
{
    float retval = 0.0f;

    HWND calc= FindWindow("SciCalc", "Calculator");
    if (calc == NULL) {
        calc= FindWindow("Calc", "Calculator");
    }
    if (calc == NULL) {
        MessageBox(NULL, "calculator not found", "Error", MB_OK);
        return 0.0f;
    }
    HWND calcEdit = FindWindowEx(calc, 0, "Edit", NULL);
    if (calcEdit == NULL) {
        MessageBox(NULL, "error finding calc edit box", "Error", MB_OK);
        return 0.0f;
    }

    long len = SendMessage(calcEdit, WM_GETTEXTLENGTH, 0, 0) + 1;
    char* temp = (char*) malloc(len);
    SendMessage(calcEdit, WM_GETTEXT, len, (LPARAM) temp);
    retval = atof(temp);
    free(temp);

    return retval;
}

为了找出在 FindWindow 和 FindWindowEx 中使用的正确参数,请使用 Visual Studio 工具 Spy++ 检查浏览器窗口的运行实例。抱歉,我手头没有 Web 浏览器的代码示例,但应该可以。请注意,您的解决方案将特定于 Windows 操作系统,并且在未来版本的 Web 浏览器中对 UI 架构的更改可能会导致您的解决方案停止工作。

使用这种方法将 URL 直接从地址栏中取出显然仅适用于当前选项卡。除非您做了一些非常棘手的事情,例如模拟用户输入以循环浏览选项卡,否则我看不出这对所有选项卡有何作用。这将是非常侵入性的,用户可以很容易地通过输入他们自己的输入来打断您的应用程序,但如果您正在编写一些无人看管的东西(例如自动化测试脚本),它可能会起作用。如果是这种情况,您可能需要研究其他工具,例如AutoIt

这个建议是从我曾经写过的一篇博客文章中转述的。祝你好运!

于 2008-10-15T22:51:36.620 回答
2

在 IE 中使用 Javascript 中的 ActiveX shell 应用程序对象相当容易。下面是示例代码:

function GetURL()
{
 var oShell = new ActiveXObject('shell.application');
 var oColl = oShell.Windows();
 for (var i = 0;i<oColl.count;i++)
 {
  try
  {
   var Title = oColl(i).document.title;
   if (Title.indexOf('DesiredTitle') != -1)
   {
    alert ('Title-'+oColl(i).document.title);
    alert ('Location-'+oColl(i).location);
   }
  }
  catch (err)
  {
   alert (err);
  }
 }
}

我仍在尝试在Firefox中找到一种方法。

于 2012-10-29T12:47:15.853 回答
1

你不太可能找到这样的答案。所有现代浏览器都限制页面上的 JavaScript 访问此类信息的能力,因为它给用户带来了如此大的隐私风险。

于 2008-10-15T22:34:09.137 回答
0

就在我的脑海中,您可能会考虑使用内置的 Firefox 语言(不知道它叫什么)。我敢肯定它提供了一种机制来完全按照您所说的进行操作。否则那些为美味等而编写的插件将无法正常工作。

至于 IE,您将需要在 C++ 中执行此操作,或者为此找到一些托管包装器。我不知道如何制作一个 IE 插件,但如果你深入挖掘,你应该能够找到一些东西。

干杯!

于 2008-10-20T15:12:24.847 回答