ScrollBar dans WebBrowser ?

Signaler
Messages postés
37
Date d'inscription
jeudi 20 janvier 2011
Statut
Membre
Dernière intervention
10 janvier 2014
-
Messages postés
834
Date d'inscription
samedi 15 novembre 2008
Statut
Membre
Dernière intervention
14 janvier 2017
-
Bonjour,

je cherche à cibler une zone spécifique dans une page web via mon programme, le problème c'est que je n'arrive pas à trouver comment contrôler le ScrollBar intégrer au WebBrowser de manière à ce que la page s'ouvre directement sur l'endroit voulu, j'ai bien chercher un truc du genre webbrowser.scrollbar.value mais ça n'existe pas...

Merci d'avance.

2 réponses

Messages postés
14738
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
23 novembre 2020
148
Normalement, une ancre peut être utile.
Messages postés
834
Date d'inscription
samedi 15 novembre 2008
Statut
Membre
Dernière intervention
14 janvier 2017
29
Bonjour

Le contrôle WebBrowser est en fait un container, dans lequel va s'exécuter IE, et en effet les gars chez Microsoft auraient pu penser à ajouter quelques méthodes permettant de contrôler l'IE

Pour contrôler l'IE encapsulé, l'idée est tout d'abord de trouver son handle, puis de luis balancer des commandes de bas étage, mais il faut revenir sur de la programmation ancestrale et sortir du dotnet
petit exemple:

tout d'abord quelques déclarations pour coller au moteur Windows
Private Const WM_VSCROLL = &H115

Enum ScrollBarCommands
    SB_LINEUP = 0
    SB_LINELEFT = 0
    SB_LINEDOWN = 1
    SB_LINERIGHT = 1
    SB_PAGEUP = 2
    SB_PAGELEFT = 2
    SB_PAGEDOWN = 3
    SB_PAGERIGHT = 3
    SB_THUMBPOSITION = 4
    SB_THUMBTRACK = 5
    SB_TOP = 6
    SB_LEFT = 6
    SB_BOTTOM = 7
    SB_RIGHT = 7
End Enum
<DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
Private Shared Function SendMessage(ByVal hWnd As IntPtr, ByVal Msg As UInteger, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As IntPtr
End Function
<DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
Private Shared Function FindWindowEx(ByVal parentHandle As IntPtr, _
  ByVal childAfter As IntPtr, _
  ByVal lclassName As String, _
  ByVal windowTitle As String) As IntPtr
End Function


Puis quelques exemples de pilotage
'recherche du handle du shell encapsulé
Dim ShellEmbeddingHandle As IntPtr = FindWindowEx(WebBrowser1.Handle, IntPtr.Zero, "Shell Embedding", Nothing)
'puis recherche du handle de l'objet
Dim DocObjectViewHandle As IntPtr = FindWindowEx(ShellEmbeddingHandle, IntPtr.Zero, "Shell DocObject View", Nothing)
'enfin le handle de IE
Dim InternetExplorerHandle = FindWindowEx(DocObjectViewHandle, IntPtr.Zero, "Internet Explorer_Server", Nothing)

WebBrowser1.Document.Body.Focus() ' le control doit absolument avoir le focus pour recevoir la commande
'scroll à une position donnée (ici 100 pixels)
'SendMessage(InternetExplorerHandle, WM_VSCROLL, ScrollBarCommands.SB_THUMBPOSITION + &H10000 * 100, Nothing)

'scroll d'une ligne
'SendMessage(InternetExplorerHandle, WM_VSCROLL, ScrollBarCommands.SB_LINEDOWN, Nothing)

'scroll d'une page
SendMessage(InternetExplorerHandle, WM_VSCROLL, ScrollBarCommands.SB_PAGEDOWN, Nothing)


Bon code...