2008-10-15 5 views
2

J'essaie de détecter quel site Web dans sharepoint que l'utilisateur regarde en ce moment. Une approche pourrait consister à lire les URls à partir du navigateur et à essayer de les comparer à une URL de référence de la solution sharepoint. Je n'ai pas encore été en mesure de trouver une solution qui fonctionne à la fois dans IE et Firefox.Comment puis-je obtenir les URL à partir de n'importe quel onglet dans n'importe quel navigateur ouvert

L'idée est d'écrire une petite application C# qui récoltera les URL et fera la comparaison.

TIA

+0

Vous devriez mentionner que vous essayez de le faire à partir d'une application externe comme C#, et si l'utilisation de C# est une exigence, vous devez définitivement étiqueter la question en C#. – Parappa

Répondre

2

Il est possible de le faire d'une manière très hacky et sujette à la rupture en utilisant la fonction API Win32 FindWindow.

L'exemple C++ suivant qui trouve une instance en cours d'exécution du calculateur Windows et récupère la valeur du champ d'édition. Vous devriez être capable de faire quelque chose de similaire en C#. Avertissement: Je n'ai pas vérifié pour s'assurer que ce code compile, désolé. :)

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; 
} 

Pour connaître les bons paramètres à utiliser dans FindWindow et FindWindowEx, utilisez l'outil Visual Studio Spy ++ pour inspecter une instance en cours d'exécution de la fenêtre du navigateur. Désolé, je n'ai pas d'exemple de code pour les navigateurs Web, mais cela devrait être possible. Notez que votre solution sera spécifique au système d'exploitation Windows et que les modifications apportées à l'architecture de l'interface utilisateur dans les futures versions des navigateurs Web pourraient empêcher votre solution de fonctionner.

L'utilisation de cette méthode pour sortir directement l'URL de la barre d'adresse ne fonctionne évidemment que pour l'onglet en cours. Je ne vois pas comment cela fonctionnerait pour tous les onglets à moins que vous n'ayez fait quelque chose de vraiment compliqué comme simuler une entrée utilisateur pour parcourir les onglets. Ce serait très intrusif et un utilisateur pourrait facilement gâcher votre application en l'interrompant avec sa propre entrée, mais cela pourrait fonctionner si vous écrivez quelque chose qui fonctionne sans surveillance, comme un script de test automatisé. Si tel est le cas, vous pouvez vouloir regarder dans d'autres outils comme AutoIt.

Ce conseil est paraphrasé à partir d'un blog post j'ai écrit une fois. Bonne chance!

1

Vous avez peu de chances de trouver une telle réponse. Tous les navigateurs modernes limitent la capacité de JavaScript sur une page à accéder à ces informations, car elles représentent un risque important pour la vie privée de l'utilisateur.

0

Juste à côté de la tête, vous pourriez envisager d'utiliser le langage intégré de Firefox (aucune idée de ce que ça s'appelle). Je suis sûr que cela fournit un mécanisme pour faire exactement ce dont vous parlez. Sinon, ces plugins écrits pour délicieux, etc, ne fonctionneraient pas. Comme pour IE, vous devrez soit le faire en C++ ou trouver un wrapper géré pour cela. Je ne suis pas sûr de savoir comment faire un plugin IE, mais si vous creusez assez profond, vous devriez être capable de trouver quelque chose.

À la votre!

2

C'est assez facile dans IE en utilisant l'objet application shell ActiveX en Javascript. Ci-dessous l'exemple de code:

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); 
    } 
} 
} 

J'essaie toujours de trouver un moyen dans firefox.

Questions connexes