ScrollBar dans WebBrowser ?

overdoseBMTH Messages postés 37 Date d'inscription jeudi 20 janvier 2011 Statut Membre Dernière intervention 10 janvier 2014 - 10 janv. 2014 à 17:48
cs_Robert33 Messages postés 834 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 14 janvier 2017 - 11 janv. 2014 à 16:13
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

NHenry Messages postés 15000 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 27 septembre 2022 158
10 janv. 2014 à 18:33
Normalement, une ancre peut être utile.
0
cs_Robert33 Messages postés 834 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 14 janvier 2017 32
11 janv. 2014 à 16:13
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...
0