大家都知道在VB里的控件都有MouseDown和MouseUp事件,但是这些事件都是在该控件上点的时候才有效,有没有办法让这些事件可以在全局有效呢。
比如让我运行程序1后,在任何地方按下鼠标(包括程序1在后台台的时候),Label1 = "1";抬起Label1 = "2"。
这个可以实现么?

解决方案 »

  1.   

    利用鼠标类的函数,如GetCursorPos,mouse_event,看看跟鼠标有关的api函数把,好久没用vb了,都忘记完了,希望对你还有点帮助
      

  2.   

    GetCursorPos没用过啊,可以给一下代码参考一下吗
      

  3.   

    不难,可以在程序1中设置钩子,捕获鼠标按下和鼠标弹起消息再设置Label1.caption=1或2
    http://download.csdn.net/source/1860777
      

  4.   

    全局鼠标构子:
    先添加一个模块Module1
     Option Explicit
      Private Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (ByRef Destination As Any, ByRef Source As Any, ByVal Length As Long)
      Private Declare Function PtInRect Lib "user32" (lpRect As RECT, ByVal X As Long, ByVal Y As Long) As Long
      Private 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
      Private Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) 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 Const HC_ACTION = 0
      Private Const WH_MOUSE_LL       As Long = 14
      Private Const WM_MOUSEMOVE = &H200
        
      Public Type RECT
              Left   As Long
              Top   As Long
              Right   As Long
              Bottom   As Long
      End Type
        
      Private Type POINTAPI
            X   As Long
            Y   As Long
      End Type
        
        
      Private Type MSLLHOOKSTRUCT
              pt   As POINTAPI
              mouseData   As Long
              Flags   As Long
              time   As Long
              dwExtraInfo   As Long
      End Type
          Public hHook     As Long
      Public Sub EnableHook()
              If hHook = 0 Then
                    hHook = SetWindowsHookEx(WH_MOUSE_LL, AddressOf HookProc, App.hInstance, 0)
              End If
      End Sub
      Public Sub FreeHook()
      If hHook <> 0 Then
            Call UnhookWindowsHookEx(hHook)
            hHook = 0
      End If
      End Sub
        
      Public Function HookProc(ByVal nCode As Long, ByVal wParam As Long, ByVal lparam As Long) As Long
              If nCode < 0 Then
                    HookProc = CallNextHookEx(hHook, nCode, wParam, lparam)
                    Exit Function
              End If
              '你可以在这里加入需要处理的消息代码
              If wParam = WM_MOUSEMOVE Then
                 Debug.Print "Move", wParam
              End If
      End Function然后添加一个窗体进行测试,你可以在窗体内加入任意控件,看看鼠标在任意控件中这个模块是否能捕获到所有的事件
    Option Explicit
    Private Sub Form_Load()
       EnableHook
    End SubPrivate Sub Form_Unload(Cancel As Integer)
       FreeHook
    End Sub要达到楼主所要求的效果,楼主需进一步完善代码