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 |