Option Explicit
Public Declare Function SetWindowLong Lib "user32" Alias "SetwindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
'Public Declare Function WindowProc Lib " " (ByVal hWnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Public Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Const GWL_WNDPROC As Long = (-4)
Private Const WM_CONTEXTMENU As Long = &H7B
Private defWndProc As Long
Public Sub Hook(hWnd As Long)
If defWndProc = 0 Then
defWndProc = SetWindowLong(hWnd, GWL_WNDPROC, AddressOf WindowProc)'*** Error in here ***
End If
End Sub
Public Sub UnHook(hWnd As Long)
If defWndProc > 0 Then
Call SetWindowLong(hWnd, GWL_WNDPROC, defWndProc)
defWndProc = 0
End If
End Sub
Public Function WindowProc(ByVal hWnd As Long, _
ByVal uMsg As Long, _
ByVal wParam As Long, _
ByVal lParam As Long) As Long
Select Case uMsg
Case WM_CONTEXTMENU
WindowProc = 1
Case Else
WindowProc = CallWindowProc(defWndProc, hWnd, uMsg, wParam, lParam)
EndSelect
End Function
Public Declare Function SetWindowLong Lib "user32" Alias "SetwindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
'Public Declare Function WindowProc Lib " " (ByVal hWnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Public Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Const GWL_WNDPROC As Long = (-4)
Private Const WM_CONTEXTMENU As Long = &H7B
Private defWndProc As Long
Public Sub Hook(hWnd As Long)
If defWndProc = 0 Then
defWndProc = SetWindowLong(hWnd, GWL_WNDPROC, AddressOf WindowProc)'*** Error in here ***
End If
End Sub
Public Sub UnHook(hWnd As Long)
If defWndProc > 0 Then
Call SetWindowLong(hWnd, GWL_WNDPROC, defWndProc)
defWndProc = 0
End If
End Sub
Public Function WindowProc(ByVal hWnd As Long, _
ByVal uMsg As Long, _
ByVal wParam As Long, _
ByVal lParam As Long) As Long
Select Case uMsg
Case WM_CONTEXTMENU
WindowProc = 1
Case Else
WindowProc = CallWindowProc(defWndProc, hWnd, uMsg, wParam, lParam)
EndSelect
End Function
在vb 中是不分大小写的吧,user32 加不加.dll 一样的。以上两种方法我都试过了,还是不行。如果你有时间,最好调试一下。
我当然试过了,要不然那么小的错误我可找不到
还有,vb是不区分大小,但SetwindowLongA是dll中的,不是vb本身的
我调试通过,无问题
再说了,这种错误,肯定是声明问题!