2008-10-15 12 views
2

我正在尝试检测用户正在查看的SharePoint中的哪个网页。一种方法可能是从浏览器读取URls,并尝试将它们与参考网址比较以获取Sharepoint解决方案。我还没有找到可以在IE和Firefox中使用的解决方案。如何从任何打开的浏览器中的任何选项卡获取URL

这个想法是编写一个小的C#应用​​程序,将收获的URL和做比较。

TIA

+0

您应该提到,你想从如C#外部应用程序做到这一点,如果使用C#是一个要求,你一定要标记的问题为C#。 – Parappa 2008-10-15 23:06:51

回答

2

有可能在一个非常哈克而且容易做到这一点使用Win32 API函数FindWindow函数破损的方式。

以下C++的例子,发现窗口计算器的运行实例,并得到在它的编辑字段的值。你应该可以在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工具间谍++检查你的浏览器窗口的运行实例。对不起,我手边没有网页浏览器的代码示例,但应该可以。请注意,您的解决方案将特定于Windows操作系统,并且在未来版本的Web浏览器中更改UI架构可能会导致您的解决方案停止工作。

使用此方法从地址栏中提取URL显然只适用于当前选项卡。我看不出这对所有选项卡都有效,除非您做了一些非常棘手的问题,例如模拟用户输入来循环显示选项卡。这会非常干扰用户,通过用自己的输入来中断应用程序,用户可以轻松搞定你的应用程序,但是如果你正在编写一些无人照管的东西,比如自动化测试脚本,它可能会工作。如果是这种情况,您可能需要查看AutoIt等其他工具。

此建议所有从blog post我曾经写过转述。祝你好运!

1

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

0

刚刚送走我的头顶,你可能会考虑使用内置Firefox的语言(不知道它叫什么)。我相信它提供了一种机制来确切地说明你在说什么。否则,那些为美味等写的插件将无法使用。

至于IE,你将需要可以做它在C++或者找一些这方面的托管包装。我不知道如何制作一个IE插件,但如果你深入挖掘,你应该能够找到一些东西。

干杯!

2

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

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。

相关问题