vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Schützen Sie Ihre Software vor Software-Piraterie - mit sevLock 1.0 DLL!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück
Rubrik: HTML/Internet/Netzwerk · WebBrowser   |   VB-Versionen: VB5, VB607.07.01
PopUp-Menü des WebBrowser-Controls abschalten

Mittels Subclassing wird hier gezeigt, wie sich das PopUp-Menü des WebBrowser-Controls abschalten lässt.

Autor:   Dieter OtterBewertung:     [ Jetzt bewerten ]Views:  18.180 
www.tools4vb.deSystem:  Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 Beispielprojekt auf CD 

Das WebBrowser-Control lässt sich sehr leicht in eigene Anwendungen einbinden und auch anwenden. Lästig ist aber oftmals, daß das Standard PopUp-Menü angezeigt wird, wenn man mit der rechten Maustaste in das "Explorer-Fenster" klickt.

Der nachfolgende Tipp zeigt, wie man mittels Subclassing gezielt den Rechtsklick abfragen, und somit das Anzeigen des PopUp-Menüs abschalten kann.

Fügen Sie zunächst den nachfolgenden Code in ein Modul ein (keine Form)!

Option Explicit
 
' zunächst die benötigten Deklarationen
Public Declare Function SetWindowsHookEx Lib "user32" _
  Alias "SetWindowsHookExA" ( _
  ByVal idHook As Long, _
  ByVal lpfn As Long, _
  ByVal hmod As Long, _
  ByVal dwThreadId As Long) As Long
Public Declare Function UnhookWindowsHookEx Lib "user32" ( _
  ByVal hHook As Long) As Long
Public Declare Function GetCurrentThreadId Lib "kernel32" () As Long
Private Declare Function CallNextHookEx Lib "user32" ( _
  ByVal hHook As Long, _
  ByVal nCode As Long, _
  ByVal wParam As Long, _
  lparam As Any) As Long
Private Declare Function GetClassName Lib "user32" _
  Alias "GetClassNameA" ( _
  ByVal hwnd As Long, _
  ByVal lpClassName As String, _
  ByVal nMaxCount As Long) As Long
 
Public Const WM_RBUTTONUP = &H205
Public Const WH_MOUSE = 7
 
Public Type POINTAPI
  x As Long
  y As Long
End Type
 
Public Type MOUSEHOOKSTRUCT
  pt As POINTAPI
  hwnd As Long
  wHitTestCode As Long
  dwExtraInfo As Long
End Type
 
Public glbMausProc As Long
 
 
' Maus-Ereignisse abfangen
Public Function wbMausProc(ByVal nCode As Long, _
  ByVal wParam As Long, MOUSEHOOK As MOUSEHOOKSTRUCT) As Long
 
  Dim sBuffer As String
  Dim sClassName As String
  Dim Result As Long
 
  ' rechte Maustaste wird losgelassen
  With MOUSEHOOK
    If (nCode >= 0 And wParam = WM_RBUTTONUP) Then
      sBuffer = Space(255)
 
      ' Klassenname des Browser-Fensters
      sClassName = "Internet Explorer_Server"
 
      ' Klassennamen des Fensters ermitteln, in welchem
      ' der Mausklick erfolgte
      Result = GetClassName(.hwnd, sBuffer, Len(sBuffer))
      If Result > 0 Then
        If Left$(sBuffer, Result) = sClassName Then
          ' Klick erfolgte im Browser-Fenster
          wbMausProc = 1
          Exit Function
        End If
      End If
    End If
  End With
 
  ' Mausereignis "weiterleiten"
  wbMausProc = CallNextHookEx(glbMausProc, nCode, wParam, _
    MOUSEHOOK)
End Function

Und in den Codeteil der Form, welches das WebBrowser-Control enthält, fügen Sie dann nachfolgenden Code ein:

Option Explicit
Private Sub Form_Load()
  ' Windows benachrichtigen, daß Maus-Ereignisse an "unsere"
  ' wbMausProc geleitet werden sollen
  glbMausProc = SetWindowsHookEx(WH_MOUSE, _
    AddressOf wbMausProc, App.hInstance, _
    GetCurrentThreadId)
End Sub
 
Private Sub Form_Unload(Cancel As Integer)
  ' "Nachrichten-Umleitung" wieder aufheben
  UnhookWindowsHookEx glbMausProc
End Sub

Wie funktioniert's nun genau?
Wird die Form geladen, teilen wir dem System mit, daß alle Mausereignisse nicht an das betroffene Fenster direkt weitergeleitet werden sollen, sondern zunächst an "unsere" Prozedur wbMausProc. In dieser Prozedur wird, wenn die rechte Maustaste losgelassen wird, zunächst der Klassennamen des Fensters ermittelt, welches das Ereignis normalerweise erhält. Das Ereignis wird nur dann an den korrekten Empfänger (Fenster) weitergeleitet, wenn es sich bei dem ermittelten Klassenname nicht um "unser" WebBrowser-Control handelt (Klassenname Internet Explorer_Server. Somit erhält das "Explorer-Fenster" keine Nachricht beim Loslassen der rechten Maustaste und demzufolge wird dann auch nicht das Standard PopUp-Menü angezeigt.
 

Dieser Tipp wurde bereits 18.180 mal aufgerufen.

Voriger Tipp   |   Zufälliger Tipp   |   Nächster Tipp

Über diesen Tipp im Forum diskutieren
Haben Sie Fragen oder Anregungen zu diesem Tipp, können Sie gerne mit anderen darüber in unserem Forum diskutieren.

Neue Diskussion eröffnen

nach obenzurück


Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6
(einschl. Beispielprojekt!)

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
   

Druckansicht Druckansicht Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel