我正在尝试检测用户现在正在查看的共享点中的哪个网站。一种方法是从浏览器读取 URls,并尝试将它们与共享点解决方案的参考 URL 进行比较。我还没有找到任何适用于 IE 和 Firefox 的解决方案。
这个想法是编写一个小型 C# 应用程序来收集 URL 并进行比较。
TIA
我正在尝试检测用户现在正在查看的共享点中的哪个网站。一种方法是从浏览器读取 URls,并尝试将它们与共享点解决方案的参考 URL 进行比较。我还没有找到任何适用于 IE 和 Firefox 的解决方案。
这个想法是编写一个小型 C# 应用程序来收集 URL 并进行比较。
TIA
可以使用 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。
这个建议是从我曾经写过的一篇博客文章中转述的。祝你好运!
在 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中找到一种方法。
你不太可能找到这样的答案。所有现代浏览器都限制页面上的 JavaScript 访问此类信息的能力,因为它给用户带来了如此大的隐私风险。
就在我的脑海中,您可能会考虑使用内置的 Firefox 语言(不知道它叫什么)。我敢肯定它提供了一种机制来完全按照您所说的进行操作。否则那些为美味等而编写的插件将无法正常工作。
至于 IE,您将需要在 C++ 中执行此操作,或者为此找到一些托管包装器。我不知道如何制作一个 IE 插件,但如果你深入挖掘,你应该能够找到一些东西。
干杯!