当前位置:编程学习 > VB >>

鼠标按键的判断


Option Explicit
'---------------------------------
'模块
Public Type KEYMSGS
       vKey As Long          '虚拟码  (and &HFF)
       sKey As Long          '扫描码
       flag As Long          '键按下:128 抬起:0
       time As Long          'Window运行时间
End Type
Public Type MOUSEMSGS
       X As Long            'x座标
       Y As Long            'y座标
       a As Long
       b As Long
       time As Long         'Window运行时间
End Type
Public Type POINTAPI
    X As Long
    Y As Long
End Type
Public Const WH_KEYBOARD_LL = 13
Public Const WH_MOUSE_LL = 14
Public Const Alt_Down = &H20
'-----------------------------------------
'消息
Public Const HC_ACTION = 0
Public Const HC_SYSMODALOFF = 5
Public Const HC_SYSMODALON = 4
'键盘消息
Public Const WM_KEYDOWN = &H100
Public Const WM_KEYUP = &H101
Public Const WM_SYSKEYDOWN = &H104
Public Const WM_SYSKEYUP = &H105
'鼠标消息
Public Const WM_MOUSEMOVE = &H200       '鼠标移动
Public Const WM_LBUTTONDOWN = &H201     '鼠标左键按下
Public Const WM_LBUTTONUP = &H202       '鼠标左键弹起
Public Const WM_LBUTTONDBLCLK = &H203   '鼠标左键双击
Public Const WM_RBUTTONDOWN = &H204     '鼠标右键按下
Public Const WM_RBUTTONUP = &H205       '鼠标右键弹起
Public Const WM_RBUTTONDBLCLK = &H206   '鼠标右键双击
Public Const WM_MBUTTONDOWN = &H207     '鼠标中键按下
Public Const WM_MBUTTONUP = &H208       '鼠标中键弹起
Public Const WM_MBUTTONDBLCLK = &H209   '鼠标中键双击
Public Const WM_MOUSEACTIVATE = &H21    '
Public Const WM_MOUSEFIRST = &H200
Public Const WM_MOUSELAST = &H209
Public Const WM_MOUSEWHEEL = &H20A      '鼠标滚轮
Public strKeyName As String * 255
Public keyMsg As KEYMSGS
Public MouseMsg As MOUSEMSGS
Public lHook As Long
'----------------------------------------
'模拟鼠标
Private Const MOUSEEVENTF_LEFTDOWN = &H2
Private Const MOUSEEVENTF_LEFTUP = &H4
Private Const MOUSEEVENTF_ABSOLUTE = &H8000 '  absolute move
Public 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
Public Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long
Public Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
Public Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal nCode As Long, ByVal wParam As Long, lParam As Any) As Long
Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (lpvDest As Any, ByVal lpvSource As Long, ByVal cbCopy As Long)
Public Declare Function GetKeyNameText Lib "user32" Alias "GetKeyNameTextA" (ByVal lParam As Long, ByVal lpBuffer As String, ByVal nSize As Long) As Long
Public Declare Function GetActiveWindow Lib "user32" () As Long
Public Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)
Public Declare Function ClientToScreen Lib "user32" (ByVal hwnd As Long, lpPoint As POINTAPI) As Long
'模拟按键
Public Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Public Declare Function GetFocus Lib "user32" () As Long
Public Declare Function GetObjectType Lib "gdi32" (ByVal hgdiobj As Long) As Long
Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Public Declare Sub GetActiveObject Lib "oleaut32.dll" (ByVal rclsid As Long, pvReserved As Any, ByVal ppunk As Long)
Public Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Public Declare Function WindowFromPoint Lib "user32" (ByVal xPoint As Long, ByVal yPoint As Long) As Long

Public Sub AddHook()
    '加载钩子
    lHook = SetWindowsHookEx(WH_MOUSE_LL, AddressOf MouseMB, App.hInstance, 0)
End Sub

Public Sub DelHook()
 '卸钩子
  UnhookWindowsHookEx lHook
End Sub

'鼠标钩子,用以获得控件句柄
Public Function MouseMB(ByVal code As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    Dim Pt As POINTAPI
    Dim lngP As Long
    If code = HC_ACTION Then
        
        '鼠标移动
        If wParam = WM_MOUSEMOVE Then
            Form1.Text1.Text = "鼠标移动"
        End If
        
        '滚轮
        If wParam = WM_MOUSEWHEEL Then
            Form1.Text1.Text = "滚轮滚动"        
        End If
        
        '按下左键
        If wParam = WM_LBUTTONDOWN Then
          Form1.Text1.Text = "按下左键"
         End If
        
        '释放左键
        If wParam = WM_LBUTTONUP Then
          Form1.Text1.Text = "释放左键"
         End If
        
        '双击左键
        If wParam = WM_LBUTTONDBLCLK Then
            Form1.Text1.Enabled = False
        End If
        
        '按下右键
        If wParam = WM_RBUTTONDOWN Then
          Form1.Text1.Text = "按下右键"
        End If
        
        '释放右键
        If wParam = WM_RBUTTONUP Then
         Form1.Text1.Text = "释放右键"
        End If
        
        '双击右键
        If wParam = WM_RBUTTONDBLCLK Then
           Form1.Text1.Enabled = True
        End If
        
        '按下中键
        If wParam = WM_MBUTTONDOWN Then
          Form1.Text1.Text = "按下中键"
         End If
        
        '释放中键
        If wParam = WM_MBUTTONUP Then
          Form1.Text1.Text = "释放中键"
         End If
        
        '双击中键
        If wParam = WM_MBUTTONDBLCLK Then
           Form1.Text1.Text = "双击中键"
        End If
        
    End If
'    Debug.Print wParam
    If code <> 0 Then
        MouseMB = CallNextHookEx(0, code, wParam, lParam)
    End If
End Function



以上代码由网上找到,测试发现,,,双击左键,双击中键,双击右键 无效,,,怎么回事??还有就是滚轮如何修改可以判断向上还是向下滚动,,,,,帮忙找下错误和修改下,谢谢了 --------------------编程问答-------------------- hook 的是“直接”的鼠标消息(WM_xBUTTONDOWN, WM_xBUTTONUP),由鼠标驱动生成;
而双击是“间接”的鼠标消息,由程序(当然很多时候是系统提供的默认过程)根据两次单击的间隔生成的。

就是说在消息处理中, hook 过程只是处理原料的,这时候是看不到成品的。 --------------------编程问答-------------------- WH_MOUSE_LL中是不会拦截到双击消息的,因为双击消息仅针对客户区窗口有效,同时那个窗口的类样式还必须拥有CS_DBLCLKS样式才会产生双击消息.

要想在WH_MOUSE_LL中得到双击,就要自己写代码判断.

双击判定的原理是,得到单击的坐标与时间戳,并与上一次此按键(左,中,或右键)的坐标与时间戳相比较,如果坐标相差在某个范围以内(例如4x4像素,由HKEY_CURRENT_USER\Control Panel\Mouse键下DoubleClickWidth与DoubleClickHeight决定区域的宽与高),并且两次单击时间差在某个值以内(例如500ms,控制面板中鼠标属性中可调节,HKEY_CURRENT_USER\Control Panel\Mouse键下DoubleClickSpeed也可调节),那么就判定当前键产生了双击.

但是如果当前客户区类样式中不包含CS_DBLCLKS样式的话,则不会将此消息投递到消息循环中去.

因此你的代码不能拦截到双击消息是对的.

双击原理说完了,现在说说滚轮的方向判定.

根据MSDN中的描述(说到这里,说明你又是一个典型的不看MSDN的同学,都写在里面呢),LowLevelMouseProc中lParam指向一个MSLLHOOKSTRUCT结构,而这个结构中mouseData成员就是专用于滚轮判断的.

它的高字值为正的WHEEL_DELTA时说明滚轮正在向上滚动,负值则是向下滚动.

理论都说完了,那么你的代码想要拦截到双击消息与滚轮滚动方向,则就是一个判定双击与取mouseData成员高字的事,代码非常简单:

'先添加结构定义:
Private Type POINTAPI
    x As Long
    y As Long
End Type

Private Type DWORD_HI_LO    '用这个结构,就不用运算一次或CopyMemory一次来取高低字了
    LO As Integer           'DWORD低字
    HI As Integer           'DWORD高字
End Type

'MSDN中描述的MSLLHOOKSTRUCT结构
'typedef struct tagMSLLHOOKSTRUCT {
'    DWORD pt;
'    DWORD mouseData;
'    DWORD flags;
'    DWORD time;
'    DWORD dwExtraInfo;
'} MSLLHOOKSTRUCT, FAR *LPMSLLHOOKSTRUCT, *PMSLLHOOKSTRUCT;

Private Type MSLLHOOKSTRUCT
    pt As POINTAPI              '偷个懒,直接用结构代替
    mouseData As DWORD_HI_LO    '偷个懒,直接用结构代替
    flags As Long
    time As Long              '消息产生时的时间戳
    dwExtraInfo As Long
End Type


    '然后在你的MouseMB过程中添加下面代码即可判断双击与滚轮方向了.
    '只写了中键的,其它键一样,自己写吧,变量都给你声明好了
    Static lastLBT As Long, lastRBT As Long, lastMBT As Long
    Static lastLBPT As POINTAPI, lastRBPT As POINTAPI, lastMBPT As POINTAPI
    Dim mST As MSLLHOOKSTRUCT

    Call CopyMemory(mST, ByVal lParam, LenB(mST))
    Select Case wParam
        Case WM_MBUTTONUP
            If Abs(lastMBPT.x - mST.pt.x) < 4 And Abs(lastMBPT.y - mST.pt.y) < 4 Then
                '鼠标位置判断,4x4范围内算是同一位置单击.
                '严格来说此时应该从HKEY_CURRENT_USER\Control Panel\Mouse键下DoubleClickWidth与DoubleClickHeight来得到区域
                If mST.time - lastMBT < 200 Then
                    '两次单击时间间隔判断.一定时间内的两次单击就是双击了.
                    '严格来说应该从KEY_CURRENT_USER\Control Panel\Mouse键下DoubleClickSpeed来得到双击判定时间间隔
                    Debug.Print "MButton DBClick!"
                End If
            End If
            lastMBT = mST.time          '更新时间
            lastMBPT = mST.pt           '更新位置
        Case WM_MOUSEWHEEL
            If mST.mouseData.HI = WHEEL_DELTA Then
                Debug.Print "MouseWheel UP!"
            Else
                Debug.Print "MouseWheel Down!"
            End If
    End Select
--------------------编程问答-------------------- http://download.csdn.net/detail/veron_04/1860777 --------------------编程问答--------------------
引用 2 楼  的回复:
WH_MOUSE_LL中是不会拦截到双击消息的,因为双击消息仅针对客户区窗口有效,同时那个窗口的类样式还必须拥有CS_DBLCLKS样式才会产生双击消息.

要想在WH_MOUSE_LL中得到双击,就要自己写代码判断.

双击判定的原理是,得到单击的坐标与时间戳,并与上一次此按键(左,中,或右键)的坐标与时间戳相比较,如果坐标相差在某个范围以内(例如4x4像素,由HKEY_CURRENT_……


            If mST.mouseData.HI = WHEEL_DELTA Then
                Form1.Text1.Text = "滚轮向上"
            Else
                Form1.Text1.Text = "滚轮向下"
            End If

变量未定义,红色部分,,,加入Dim WHEEL_DELTA ,测试得出的都是向下,,,,WHEEL_DELTA 要怎么定义
--------------------编程问答--------------------

public Const WHEEL_DELTA = 120

谢谢老马,定义完后测试成功,,,,, --------------------编程问答-------------------- 老马你好,,下面的代码是网上找到的,下面是直接判断出来的,而不是判断松开时间得到的,,但是我不知道怎么把有用的代码加入到我的 MouseMB 过程中呢?最后帮我一下问题就能完全解决了

Option Explicit 

Public 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 Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long 
Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long 
Public Const GWL_WNDPROC = (-4) 
Public Const WM_USER = &H400 
Public Const WM_MBUTTONDBLCLK = &H209 
Public Const WM_MBUTTONDOWN = &H207 
Public Const WM_MBUTTONUP = &H208 
Public Const WM_LBUTTONUP = &H202 
Public Const WM_LBUTTONDOWN = &H201 
Public Const WM_LBUTTONDBLCLK = &H203 
Public Const WM_RBUTTONDBLCLK = &H206 
Public Const WM_RBUTTONDOWN = &H204 
Public Const WM_RBUTTONUP = &H205 
Public OldWindowProc As Long 
Public Myform As Form 
Public AA As Long 
Public Sub CheckMouse(A As Form) 
Set Myform = A 
OldWindowProc = GetWindowLong(Myform.hwnd, GWL_WNDPROC) 
SetWindowLong Myform.hwnd, GWL_WNDPROC, AddressOf NewWindowProc 
End Sub 
Public Function NewWindowProc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long 
Select Case Msg 
Case WM_LBUTTONUP 
Form1.Text1.Text = Form1.Text1.Text + "LBUTTONUP" 
Case WM_LBUTTONDOWN 
Form1.Text1.Text = "LBUTTONDOWN" 
Case WM_LBUTTONDBLCLK 
Form1.Text1.Enabled = True 
Case WM_RBUTTONDBLCLK 
Form1.Text1.Enabled = False 
Case WM_RBUTTONDOWN 
Form1.Text1.Text = "RBUTTONDOWN" 
Case WM_RBUTTONUP 
Form1.Text1.Text = "RBUTTONUP" 
End Select 
NewWindowProc = CallWindowProc(OldWindowProc, hwnd, Msg, wParam, lParam) 
End Function 


ForM_load() 
checkMouse form1 
end sub


--------------------编程问答--------------------
引用 6 楼  的回复:
老马你好,,下面的代码是网上找到的,下面是直接判断出来的,而不是判断松开时间得到的,,但是我不知道怎么把有用的代码加入到我的 MouseMB 过程中呢?最后帮我一下问题就能完全解决了
VB code

Option Explicit 

Public Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (B……

你大约没看明白老鸟说的是什么意思,估计也没看我2楼对老鸟意思的详细解释....

WM_xBUTTONDBLCLK消息仅针对客户区窗口有效的意思是,仅会出现在窗口消息循环中,并且需要这个窗体的类样式中包含CS_DBLCLKS样式才会产生.

6楼代码是窗口子类化,那么仅会在这个窗口对象拥有焦点时才会响应.

如果你的鼠标点击不是发生在checkMouse form1中的form1上面,就算是在那个text1中,也是无效的.

老实用我的代码吧. --------------------编程问答--------------------
引用 7 楼  的回复:
引用 6 楼 的回复:

老马你好,,下面的代码是网上找到的,下面是直接判断出来的,而不是判断松开时间得到的,,但是我不知道怎么把有用的代码加入到我的 MouseMB 过程中呢?最后帮我一下问题就能完全解决了
VB code

Option Explicit

Public Declare Function CallWindowProc Lib "user32" Alias "Cal……


是没能理解到老鸟的意思就是6楼的代码,自己太莱了,,,不过新的问题又出现了,,,就是输出到文本框1的时候,当双击左键的时候,输出的顺序分别是:按下左键,释放左键,按下左键,双击左键,释放左键....一共文本框1里的文本刷新了5次,,,而我要文本框真正输出的只是第四次的双击左键,,,,不知道代码要怎么修改才能正确的输出呢,,,双击左键,滚轮,右键,都是出现一样的效果,,,,



'鼠标钩子,用以获得控件句柄
Public Function MouseMB(ByVal code As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    Dim Pt As POINTAPI
    Dim lngP As Long
  '-----------------------------------------------------------------------------
   '判断鼠标滚轮向上向下和判断鼠标左键,中键,右键双击
    Static lastLBT As Long, lastRBT As Long, lastMBT As Long
    Static lastLBPT As POINTAPI, lastRBPT As POINTAPI, lastMBPT As POINTAPI
    Dim mST As MSLLHOOKSTRUCT
    Call CopyMemory(mST, ByVal lParam, LenB(mST))
                                    
    Select Case wParam
      '-----------------------------------------------------------
        '双击左键
        Case WM_LBUTTONUP
            If Abs(lastMBPT.X - mST.Pt.X) < 4 And Abs(lastMBPT.Y - mST.Pt.Y) < 4 Then
                '鼠标位置判断,4x4范围内算是同一位置单击.
                '严格来说此时应该从HKEY_CURRENT_USER\Control Panel\Mouse键下DoubleClickWidth与DoubleClickHeight来得到区域
                If mST.time - lastMBT < 200 Then
                    '两次单击时间间隔判断.一定时间内的两次单击就是双击了.
                    '严格来说应该从KEY_CURRENT_USER\Control Panel\Mouse键下DoubleClickSpeed来得到双击判定时间间隔
                    Form1.Text1.Text = "双击左键"
                          If Form1.Timer2.Enabled = True Then
                          End If
                End If
            End If
            lastMBT = mST.time          '更新时间
            lastMBPT = mST.Pt           '更新位置
      '-----------------------------------------------------------
        '双击右键
        Case WM_RBUTTONUP
            If Abs(lastMBPT.X - mST.Pt.X) < 4 And Abs(lastMBPT.Y - mST.Pt.Y) < 4 Then
                If mST.time - lastMBT < 200 Then
                    Form1.Text1.Text = "双击右键"
                End If
            End If
            lastMBT = mST.time
            lastMBPT = mST.Pt
      '-----------------------------------------------------------
        '双击中键
        Case WM_MBUTTONUP
            If Abs(lastMBPT.X - mST.Pt.X) < 4 And Abs(lastMBPT.Y - mST.Pt.Y) < 4 Then
                If mST.time - lastMBT < 200 Then
                    Form1.Text1.Text = "双击中键"
                End If
            End If
            lastMBT = mST.time
            lastMBPT = mST.Pt
      '-----------------------------------------------------------
        '鼠标滚轮
        Case WM_MOUSEWHEEL
            If mST.mouseData.HI = WHEEL_DELTA Then
                Form1.Text1.Text = "滚轮向上"
            Else
                Form1.Text1.Text = "滚轮向下"
            End If
    End Select
    
  If code = HC_ACTION Then
                                            
       '按下左键
       If wParam = WM_LBUTTONDOWN Then
          Form1.Text1.Text = "按下左键"
        End If
                   
       '释放左键
       If wParam = WM_LBUTTONUP Then
          Form1.Text1.Text = "释放左键"
       End If
                    
       '按下右键
       If wParam = WM_RBUTTONDOWN Then
         Form1.Text1.Text = "按下右键"
       End If
        
       '释放右键
       If wParam = WM_RBUTTONUP Then
          Form1.Text1.Text = "释放右键"
       End If
                    
       '按下中键
       If wParam = WM_MBUTTONDOWN Then
          Form1.Text1.Text = "按下中键"
       End If
        
       '释放中键
       If wParam = WM_MBUTTONUP Then
          Form1.Text1.Text = "释放中键"
       End If
                                                
        '鼠标移动
        If wParam = WM_MOUSEMOVE Then
            Form1.Text1.Text = "鼠标移动"
        End If
                
        '双击左键
        'If wParam = WM_LBUTTONDBLCLK Then
            'Form1.Text1.Text = "双击左键"
        'End If
        
        '双击中键
        'If wParam = WM_MBUTTONDBLCLK Then
        '   Form1.Text1.Text = "双击中键"
       ' End If
       
        '双击右键
        'If wParam = WM_RBUTTONDBLCLK Then
        '    Form1.Text1.Text = "双击右键"
        'End If
End If
     Debug.Print wParam   '测试输出的wParam
    If code <> 0 Then
        MouseMB = CallNextHookEx(0, code, wParam, lParam)
    End If
End Function

--------------------编程问答-------------------- 晕,既然不需要WM_xBUTTONDOWN和WM_xBUTTONUP的响应,后面的:

       '按下左键
       If wParam = WM_LBUTTONDOWN Then
          Form1.Text1.Text = "按下左键"
        End If
                   
       '释放左键
       If wParam = WM_LBUTTONUP Then
          Form1.Text1.Text = "释放左键"
       End If

这些代码还要来干嘛. --------------------编程问答--------------------
引用 9 楼  的回复:
晕,既然不需要WM_xBUTTONDOWN和WM_xBUTTONUP的响应,后面的:

  '按下左键
  If wParam = WM_LBUTTONDOWN Then
  Form1.Text1.Text = "按下左键"
  End If
   
  '释放左键
  If wParam = WM_LBUTTONUP Then
  Form1.Text1.Text = "释放……


要的,单击的时候要的,我的意思是当我按下鼠标的时候,显示的是按下,释放的时候显示的是释放,这样就形成了一个单击过程,而双击的时候,显示的是双击,而现在是一起显示了,没法区分开来,,, --------------------编程问答-------------------- 汗,我认为这不太可能吧.

以拍手为比喻,你又要双拍(一定时间内拍两次),又不允许在同时有任何一次单拍的出现,这可能么?

"双拍"永远是两次单拍组成的,它并不是一个确实存在的东西,只是对两次单拍的一种"命名方式"而已.

你可以用SPY++拦截一下窗体的消息,然后双击窗体,看看是不是也是先出现按下与抬起消息再出现的双击消息...

如果实在是要做到那种效果,那只能按时间分析,也就是说,一定时间内如果没有按下两次鼠标,则判定为单击,产生单击消息.否则产生双击消息.

这样的后果就是每次单击消息将在鼠标按下后再延迟一定时间才会产生,但是却可以实现你要的效果,自己取舍一下吧. --------------------编程问答-------------------- 我的意思是,既然知道了双击输出的顺序是:按下左键,释放左键,按下左键,双击左键,释放左键,那思路可以先把数据输出到一个变量里存储,在判断变量里是否有:双击左键 这几个关键字,如果有把他输出到文本一,否者就输出的是按下就输出按下,弹起就输出弹起,,,我要实现的功能是,获取到关键字,然后再通过判断关键字向某句柄发送鼠标命令的,,,我知道前台鼠标2次按下和弹起等于双击,,可是后台鼠标不一样,2次再快的按下弹起他也是等于2次单击而已,,,他有独立的双击命令,,,,不知道我上面说的思路可行不,,,, --------------------编程问答--------------------
引用 12 楼  的回复:
我的意思是,既然知道了双击输出的顺序是:按下左键,释放左键,按下左键,双击左键,释放左键,那思路可以先把数据输出到一个变量里存储,在判断变量里是否有:双击左键 这几个关键字,如果有把他输出到文本一,否者就输出的是按下就输出按下,弹起就输出弹起,,,我要实现的功能是,获取到关键字,然后再通过判断关键字向某句柄发送鼠标命令的,,,我知道前台鼠标2次按下和弹起等于双击,,可是后台鼠标不一样,2次再快的按……

可以,你要仔细看看老马在11F说的吧。
“如果实在是要做到那种效果,那只能按时间分析,也就是说,一定时间内如果没有按下两次鼠标,则判定为单击,产生单击消息.否则产生双击消息.

这样的后果就是每次单击消息将在鼠标按下后再延迟一定时间才会产生,但是却可以实现你要的效果……… ” --------------------编程问答--------------------
引用 13 楼  的回复:
引用 12 楼 的回复:
我的意思是,既然知道了双击输出的顺序是:按下左键,释放左键,按下左键,双击左键,释放左键,那思路可以先把数据输出到一个变量里存储,在判断变量里是否有:双击左键 这几个关键字,如果有把他输出到文本一,否者就输出的是按下就输出按下,弹起就输出弹起,,,我要实现的功能是,获取到关键字,然后再通过判断关键字向某句柄发送鼠标命令的,,,我知道前台鼠标2次按下和弹起等于双击,,可是……

不用很长时间判断的,马上按就能马上显示顺序为:按下左键,释放左键,按下左键,双击左键,释放左键 了,然后在判断是否有双击左键这记录,有几输出双击左键,没有就输出按下就输出按下左键,释放就输出释放左键,,, --------------------编程问答-------------------- 自己顶,,,,,没人知道最后一个问题怎么解决吗,帮我解决下8楼的问题吧,,,,,代码要怎么写啊 --------------------编程问答-------------------- --------------------编程问答-------------------- 这个..............我真不知道如何回答了
补充:VB ,  基础类
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,