2011-03-10 1 views
0

Quelqu'un pourrait-il me guider dans la direction de la façon dont je déterminerais l'URL actuelle d'IE par programme sans BHO?Déterminer l'URL actuelle de la fenêtre IE par programme sans BHO

La seule façon dont j'ai pu penser à accomplir ce genre de fonctionnalité est en regardant le titre de la fenêtre plutôt que l'URL, mais cela semble hacky. D'autre part, je suppose que la zone de texte qui stocke l'URL aurait un handle auquel j'attacher et lire le texte. Ai-je raison dans cette hypothèse?

Toute aide serait appréciée.

PS: Points bonus si vous pouvez fournir un exemple/guide qui fonctionnera également avec Firefox.

EDIT: OK, donc d'autres recherches commencent à découvrir que ce que je dois regarder est GetWindowText et le message WM_GETTEXT. Si je reçois tout ça, je vais répondre.

+0

"Points bonus si vous pouvez fournir un exemple/un guide qui fonctionnera également avec Firefox." - pratiquement impossible de le faire sans écrire de code spécifique pour chaque navigateur. De plus, il pourrait être difficile pour firefox car il utilise des contrôles personnalisés (afaik) qui n'ont peut-être même pas de poignées Windows. – ThiefMaster

+1

@ThiefMaster: Il y a toujours le mode Accessibilité (MSAA ou autres) que tous les navigateurs implémentent, le patch de recherche pour le composant sera différent mais la base est la même, et il peut ne pas changer aussi souvent que HWNDs –

Répondre

0

C'est donc un poste reallllly vieux, mais je suis tombé sur si pensé que je tenterais de répondre depuis que je viens d'apprendre ça :)

Vous pouvez le faire en utilisant the Windows Shell. Vous pouvez parcourir les fenêtres ouvertes et rechercher tout objet "HTTPDocumentClass" (il s'agit de fenêtres Internet Explorer), puis vous pouvez accéder au membre .LocationUrl pour connaître l'URL.

Je ne sais pas comment écrire un exemple en C#, mais voici comment vous le faites en VB.
REMARQUE: Vous devez ajouter des références à Microsoft Shell Controls et Automation et Microsoft Internet Controls.

Imports Shell32 
Imports SHDocVw 

Public Function GetIExplorerURL() As String() 
    Dim exShell As New Shell32.Shell 
    Dim URLs As New List(Of String) 
    For Each window As SHDocVw.ShellBrowserWindow In DirectCast(exShell.Windows, SHDocVw.IShellWindows) 
     If TypeName(window.Document) = "HTMLDocumentClass" Then 
      URLs.Add(window.LocationURL) 
     End If 
    Next 

    Return URLs.ToArray 
End Function 
Questions connexes