VB 记录按键的时间

weixin_39505338 2017-07-13 09:05:58
按键盘时,记录按键按了多久
...全文
987 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
VBAHZ 2017-07-31
  • 打赏
  • 举报
回复
引用 12 楼 Chen8013 的回复:
[quote=引用 10 楼 chewinggum 的回复:] [quote=引用 7 楼 Chen8013 的回复:] [quote=引用 6 楼 chewinggum 的回复:] 自己不知道如何解决问题,又不把需求的细节说清楚。 (其实很可能就是它根本就不知道、也考虑不到会有什么“潜在问题”  )
这段描述,就是在说俺领导嘛
舉杯邀明月 2017-07-31
  • 打赏
  • 举报
回复
引用 10 楼 chewinggum 的回复:
[quote=引用 7 楼 Chen8013 的回复:] [quote=引用 6 楼 chewinggum 的回复:] 测试了一下,的确有问题,修正一下

Dim StartTime As Date
Dim KeyAsc As Integer
 
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
   If KeyCode <> KeyAsc Then
    StartTime = Now()
    KeyAsc = KeyCode
    Debug.Print "S", KeyCode, StartTime
   End If
    
End Sub
 
 
Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
    Dim PassTime As Long
    Dim EndTime As Date
    If KeyCode = KeyAsc Then
        EndTime = Now()
        Debug.Print "E", KeyCode, EndTime
        PassTime = DateDiff("s", StartTime, EndTime)
        KeyAsc = 0
        Debug.Print "按键经过" & PassTime & "秒"
    End If
End Sub
我觉得这还是有问题啊。 比如按“组合键”Ctrl+A: 按下Ctrl键,不放开、稍候才按下键A; 然后放开A键、放开Ctrl键。 这是“正常操作”的流程,但你输出的那些“时间”如何去理解? [/quote] 看楼主有没有组合键时间判断的需求或应用场景咯,有再说,没有的话就这样了。[/quote] 是的,要看具体的应用需求。 但那些提问的,自己不知道如何解决问题,又不把需求的细节说清楚。 (其实很可能就是它根本就不知道、也考虑不到会有什么“潜在问题”  )
of123 2017-07-31
  • 打赏
  • 举报
回复
就目前的方案和代码,结果很明确,就是 A 键按下的时间。因为有效地记录开始时间的是最后产生 KeyDown 事件的 KeyCode。而且只有相同 KeyCode 键的 KeyUp 事件结束计时。
脆皮大雪糕 2017-07-31
  • 打赏
  • 举报
回复
引用 7 楼 Chen8013 的回复:
[quote=引用 6 楼 chewinggum 的回复:] 测试了一下,的确有问题,修正一下

Dim StartTime As Date
Dim KeyAsc As Integer
 
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
   If KeyCode <> KeyAsc Then
    StartTime = Now()
    KeyAsc = KeyCode
    Debug.Print "S", KeyCode, StartTime
   End If
    
End Sub
 
 
Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
    Dim PassTime As Long
    Dim EndTime As Date
    If KeyCode = KeyAsc Then
        EndTime = Now()
        Debug.Print "E", KeyCode, EndTime
        PassTime = DateDiff("s", StartTime, EndTime)
        KeyAsc = 0
        Debug.Print "按键经过" & PassTime & "秒"
    End If
End Sub
我觉得这还是有问题啊。 比如按“组合键”Ctrl+A: 按下Ctrl键,不放开、稍候才按下键A; 然后放开A键、放开Ctrl键。 这是“正常操作”的流程,但你输出的那些“时间”如何去理解? [/quote] 看楼主有没有组合键时间判断的需求或应用场景咯,有再说,没有的话就这样了。
  • 打赏
  • 举报
回复
Q2776478814,加我
脆皮大雪糕 2017-07-28
  • 打赏
  • 举报
回复
引用 3 楼 VBAHZ 的回复:
[quote=引用 2 楼 chewinggum 的回复:]

Option Explicit

Dim StartTime As Date
Dim KeyAsc As Integer

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
   If KeyCode <> KeyAsc Then
    StartTime = Now()
    KeyAsc = KeyCode
    Debug.Print "S", StartTime
   End If
   
End Sub


Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
    Dim PassTime As Long
    Dim EndTime As Date
    If KeyCode = KeyAsc Then
        EndTime = Now()
        Debug.Print "E", EndTime
        PassTime = DateDiff("s", StartTime, EndTime)
        MsgBox "按键经过" & PassTime & "秒"
    End If
End Sub
没有复位? 同一按键只能检测一次? [/quote] 第7行和19行的两个判断实际上就是一种配对以及复位的逻辑,你可以试试
VBAHZ 2017-07-28
  • 打赏
  • 举报
回复
引用 7 楼 Chen8013 的回复:
[quote=引用 6 楼 chewinggum 的回复:] 测试了一下,的确有问题,修正一下

Dim StartTime As Date
Dim KeyAsc As Integer
 
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
   If KeyCode <> KeyAsc Then
    StartTime = Now()
    KeyAsc = KeyCode
    Debug.Print "S", KeyCode, StartTime
   End If
    
End Sub
 
 
Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
    Dim PassTime As Long
    Dim EndTime As Date
    If KeyCode = KeyAsc Then
        EndTime = Now()
        Debug.Print "E", KeyCode, EndTime
        PassTime = DateDiff("s", StartTime, EndTime)
        KeyAsc = 0
        Debug.Print "按键经过" & PassTime & "秒"
    End If
End Sub
我觉得这还是有问题啊。 比如按“组合键”Ctrl+A: 按下Ctrl键,不放开、稍候才按下键A; 然后放开A键、放开Ctrl键。 这是“正常操作”的流程,但你输出的那些“时间”如何去理解? [/quote] 雪糕又要满脸黑线咯
舉杯邀明月 2017-07-28
  • 打赏
  • 举报
回复
引用 6 楼 chewinggum 的回复:
测试了一下,的确有问题,修正一下

Dim StartTime As Date
Dim KeyAsc As Integer
 
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
   If KeyCode <> KeyAsc Then
    StartTime = Now()
    KeyAsc = KeyCode
    Debug.Print "S", KeyCode, StartTime
   End If
    
End Sub
 
 
Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
    Dim PassTime As Long
    Dim EndTime As Date
    If KeyCode = KeyAsc Then
        EndTime = Now()
        Debug.Print "E", KeyCode, EndTime
        PassTime = DateDiff("s", StartTime, EndTime)
        KeyAsc = 0
        Debug.Print "按键经过" & PassTime & "秒"
    End If
End Sub
我觉得这还是有问题啊。 比如按“组合键”Ctrl+A: 按下Ctrl键,不放开、稍候才按下键A; 然后放开A键、放开Ctrl键。 这是“正常操作”的流程,但你输出的那些“时间”如何去理解?
of123 2017-07-28
  • 打赏
  • 举报
回复
Option Explicit

Dim StartTime As Date
Dim KeyAsc As Integer

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
   If (KeyCode <> KeyAsc) Or StartTime = 0 Then
    StartTime = Now()
    KeyAsc = KeyCode
    Debug.Print "S", StartTime
   End If   
End Sub

Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
    Dim PassTime As Long
    Dim EndTime As Date
    If KeyCode = KeyAsc Then
        EndTime = Now()
        Debug.Print "E", EndTime
        PassTime = DateDiff("s", StartTime, EndTime)
        MsgBox "按键经过" & PassTime & "秒"
        StartTime = 0
    End If
End Sub
脆皮大雪糕 2017-07-28
  • 打赏
  • 举报
回复
测试了一下,的确有问题,修正一下

Dim StartTime As Date
Dim KeyAsc As Integer
 
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
   If KeyCode <> KeyAsc Then
    StartTime = Now()
    KeyAsc = KeyCode
    Debug.Print "S", KeyCode, StartTime
   End If
    
End Sub
 
 
Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
    Dim PassTime As Long
    Dim EndTime As Date
    If KeyCode = KeyAsc Then
        EndTime = Now()
        Debug.Print "E", KeyCode, EndTime
        PassTime = DateDiff("s", StartTime, EndTime)
        KeyAsc = 0
        Debug.Print "按键经过" & PassTime & "秒"
    End If
End Sub
VBAHZ 2017-07-28
  • 打赏
  • 举报
回复
引用 2 楼 chewinggum 的回复:

Option Explicit

Dim StartTime As Date
Dim KeyAsc As Integer

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
   If KeyCode <> KeyAsc Then
    StartTime = Now()
    KeyAsc = KeyCode
    Debug.Print "S", StartTime
   End If
   
End Sub


Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
    Dim PassTime As Long
    Dim EndTime As Date
    If KeyCode = KeyAsc Then
        EndTime = Now()
        Debug.Print "E", EndTime
        PassTime = DateDiff("s", StartTime, EndTime)
        MsgBox "按键经过" & PassTime & "秒"
    End If
End Sub
没有复位? 同一按键只能检测一次?
脆皮大雪糕 2017-07-13
  • 打赏
  • 举报
回复

Option Explicit

Dim StartTime As Date
Dim KeyAsc As Integer

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
   If KeyCode <> KeyAsc Then
    StartTime = Now()
    KeyAsc = KeyCode
    Debug.Print "S", StartTime
   End If
   
End Sub


Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
    Dim PassTime As Long
    Dim EndTime As Date
    If KeyCode = KeyAsc Then
        EndTime = Now()
        Debug.Print "E", EndTime
        PassTime = DateDiff("s", StartTime, EndTime)
        MsgBox "按键经过" & PassTime & "秒"
    End If
End Sub
脆皮大雪糕 2017-07-13
  • 打赏
  • 举报
回复
keydown 事件中记录开始时间 keyup 事件中记录结束时间 然后相减

1,502

社区成员

发帖
与我相关
我的任务
社区描述
VB 网络编程
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧