bdrdc 发表于 2011-9-7 16:37:15

简单问题:如何判断同一个键在500ms内被按下2次?

用途:双击小键盘0键,启动某个事件:60为小键盘0键$dll = DllOpen("user32.dll")
        If _IsPressed("60", $dll) Then         $mark = 1
        TrayTip("",$mark,30,1)
        DllClose($dll)
        ;Sleep(2000)
        If $mark = 1 Then
                $dll = DllOpen("user32.dll")
                $begin = TimerInit()
                Do
                       
                        If _IsPressed("60", $dll) Then
                                ;MsgBox(0, "TEST内", TimerDiff($begin)&@CRLF&_IsPressed("60", $dll))

                                TrayTip("", TimerDiff($begin) & @CRLF & _IsPressed("60", $dll), 30, 1)
                                ;DllClose($dll)
                                ;ExitLoop
                        Else
                                TrayTip("", "NO-KEY", 30, 1)
                               

                        EndIf
                       
                Until TimerDiff($begin) > 2500

上述思路居然不成,因为DO循环检测的还是第1次按下的小键盘0键。

tryhi 发表于 2011-9-7 18:53:53

#Include <Misc.au3>
$begin = TimerInit()
$dll = DllOpen("user32.dll")
While 1
        If _IsPressed("60",$dll) Then
                If TimerDiff($begin) < 500 Then
                        $begin = TimerInit()
                        MsgBox(0,0,"你快速按了两次0")
                Else
                        $begin = TimerInit()
                EndIf
        EndIf
        Sleep(100)
WEnd
DllClose($dll)

tryhi 发表于 2011-9-7 18:54:45

貌似有BUG,检测为500毫秒,但延迟却100,请自测

netegg 发表于 2011-9-7 20:59:44

可以,不过相当麻烦,用*Performance*api 可以精确到500微秒(好象是)

chinafla 发表于 2011-9-9 11:19:20

这个有用处 学习

chinafla 发表于 2011-9-9 11:36:00

就是精确度问题 学习

天堂九队 发表于 2011-9-12 00:27:48

timediff自己误差就挺大的吧!

netegg 发表于 2011-9-12 18:51:58

本帖最后由 netegg 于 2011-9-12 18:54 编辑

楼主可以看看下面这个函数
#Include <WinAPIEx.au3>
_WinAPI_ZwDelayExecution
页: [1]
查看完整版本: 简单问题:如何判断同一个键在500ms内被按下2次?