vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevAniGif - als kostenlose Vollversion auf unserer vb@rchiv CD Vol.5  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Fortgeschrittene Programmierung
Re: System-Menü eines Forms erweitern II 
Autor: dj.tommy
Datum: 11.03.08 20:21

Hallo hawker!

Nun ich habe es jetzt ins projekt eingegeben, aber es stürzt ab
Wo habe ich den fehler ? ich finde den grund nicht, warum er abstürzt.
Code in From1:
Option Explicit
 
 Private Declare Function GetMenuItemCount Lib "user32.dll" (ByVal hMenu As _
   Long) As Long
 Private Declare Function GetMenu Lib "user32" (ByVal hwnd As Long) As Long
 Private Declare Function GetSubMenu Lib "user32" (ByVal hMenu As Long, ByVal _
   nPos As Long) As Long
 Private Declare Function InsertMenuItem Lib "user32.dll" Alias _
 "InsertMenuItemA" (ByVal hMenu As Long, ByVal uItem As Long, ByVal fByPosition _
 As Long, lpmii As MENUITEMINFO) As Long
 
 Private Type MENUITEMINFO
    cbSize As Long
    fMask As Long
    fType As Long
    fState As Long
    wID As Long
    hSubMenu As Long
    hbmpChecked As Long
    hbmpUnchecked As Long
    dwItemData As Long
    dwTypeData As String
    cch As Long
End Type
 
 Private Const MIIM_STATE = &H1
 Private Const MIIM_ID = &H2
 Private Const MIIM_SUBMENU = &H3
 Private Const MIIM_TYPE = &H10
 Private Const MFT_SEPARATOR = &H800
 Private Const MFT_STRING = &H0
 Private Const MFS_ENABLED = &H0
 Private Const MFS_CHECKED = &H8
 
Private Sub Form_Load()
Call InsertItem
Call modul.CreateHook(Me.hwnd)
End Sub
 
Private Sub InsertItem()
    Dim hSysMenu As Long
    Dim count As Long
    Dim MenuItem As MENUITEMINFO
    Dim retval As Long
    Dim menu As Long
 
    menu = GetMenu(Me.hwnd)
    hSysMenu = GetSubMenu(menu, 0)
   'Anzahl der Elemente:
    count = GetMenuItemCount(hSysMenu)
 
    'Zuerst noch einen Trennstrich einfügen:
    With MenuItem
        .cbSize = Len(MenuItem)
        .fMask = MIIM_ID Or MIIM_TYPE
        .fType = MFT_SEPARATOR
        .wID = 0 'Die ID des Eintrags
    End With
    retval = InsertMenuItem(hSysMenu, count, 1, MenuItem)
 
    With MenuItem
        .fMask = MIIM_STATE Or MIIM_ID Or MIIM_TYPE Or MIIM_SUBMENU
        .fType = MFT_STRING ' Der Eintag ist vom Typ String
        .fState = MFS_ENABLED 'DerEintrag soll enabled sein
        .wID = 1 'ID
        .dwTypeData = "Neuer Eintrag"
        .cch = Len(.dwTypeData)
    End With
    retval = InsertMenuItem(hSysMenu, count + 1, 1, MenuItem)
 
End Sub
 
Private Sub Form_Unload(Cancel As Integer)
Call modul.ReleaseHook(Me.hwnd)
End Sub
Code im Modul:
Option Explicit
 
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd _
  As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
 
Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal _
  lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As _
  Long, ByVal lParam As Long) As Long
 
Public Const WM_SYSCOMMAND = &H1
Public Const GWL_WNDPROC = -4
Global lngPrevProc As Long
 
' einen Hook auf das Form erstellen
Public Sub CreateHook(ByVal lngHwnd As Long)
  lngPrevProc = SetWindowLong(lngHwnd, GWL_WNDPROC, AddressOf WindowProc)
End Sub
 
' WICHTIG: den Hook wieder freigeben
Public Sub ReleaseHook(ByVal lngHwnd As Long)
  SetWindowLong lngHwnd, GWL_WNDPROC, lngPrevProc
End Sub
 
' Subclassing
Public Function WindowProc(ByVal hwnd As Long, _
  ByVal uMsg As Long, _
  ByVal wParam As Long, _
  ByVal lParam As Long) As Long
 
  WindowProc = CallWindowProc(lngPrevProc, hwnd, uMsg, wParam, lParam)
 
  If uMsg = WM_SYSCOMMAND Then
    If wParam = intItemID Then
      MsgBox "Neuer Menüeintrag Click ... "
    End If
  End If
End Function
Ich bin den code mal nach gegangen, und wenn dieser codeteil durchgegangen ist,
ist das Projekt abgestürzt.
Public Sub CreateHook(ByVal lngHwnd As Long)
  lngPrevProc = SetWindowLong(lngHwnd, GWL_WNDPROC, AddressOf WindowProc)
End Sub
Mfg DjTommy
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
System-Menü eines Forms erweitern II1.214dj.tommy07.03.08 20:27
Re: System-Menü eines Forms erweitern II855Hawker08.03.08 15:34
Re: System-Menü eines Forms erweitern II804Hawker08.03.08 15:38
Re: System-Menü eines Forms erweitern II789dj.tommy08.03.08 16:35
Re: System-Menü eines Forms erweitern II772Hawker08.03.08 18:11
Re: System-Menü eines Forms erweitern II746dj.tommy08.03.08 18:34
Re: System-Menü eines Forms erweitern II771Hawker08.03.08 19:11
Re: System-Menü eines Forms erweitern II732dj.tommy08.03.08 19:20
Re: System-Menü eines Forms erweitern II778dj.tommy09.03.08 10:32
Re: System-Menü eines Forms erweitern II765Hawker10.03.08 20:55
Re: System-Menü eines Forms erweitern II754dj.tommy11.03.08 15:33
Re: System-Menü eines Forms erweitern II865Hawker11.03.08 17:30
Re: System-Menü eines Forms erweitern II855Hawker11.03.08 17:32
Re: System-Menü eines Forms erweitern II816dj.tommy11.03.08 20:21
Re: System-Menü eines Forms erweitern II774Hawker11.03.08 21:02
Re: System-Menü eines Forms erweitern II802dj.tommy11.03.08 21:14

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 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