如何在一个过程中屏蔽鼠标左键,既让鼠标左键点击无效?

解决方案 »

  1.   

    http://search.csdn.net/Expert/topic/554/554847.xml?temp=.5732843
      

  2.   

    module:
    -----------------
    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 GetWindowLong Lib "User32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex 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_LBUTTONDOWN = &H201
    Public Const GWL_WNDPROC = (-4)
    Public preWinProc As Long
    Public Function Wndproc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
        If Msg = WM_LBUTTONDOWN Then  '屏蔽鼠标左键
        Exit Function   '
       Else
        Wndproc = CallWindowProc(preWinProc, hwnd, Msg, wParam, lParam)
        End If
    End Function-------------------------
    in form1
    Option ExplicitPrivate Sub Command1_Click()
    MsgBox "you click command1"
    End SubPrivate Sub Form_Click()
    MsgBox "you click form1"
    End SubPrivate Sub Form_Load()
        Dim ret As Long
        preWinProc = GetWindowLong(Me.hwnd, GWL_WNDPROC)
        ret = SetWindowLong(Form1.hwnd, GWL_WNDPROC, AddressOf Wndproc)
     '如果把Form1.hwnd改为Command1.hwnd则屏蔽Command1上鼠标左键
    End SubPrivate Sub Form_Unload(Cancel As Integer)
        Dim ret As Long
        ret = SetWindowLong(Me.hwnd, GWL_WNDPROC, preWinProc) '这一句不可少,他可以恢复鼠标左键,在适当需要的地方加上它。
    End Sub