找回密码
 加入
搜索
查看: 2024|回复: 3

[AU3基础] [已解决]如何判断“按下一个键持续超过3秒”

[复制链接]
发表于 2016-4-2 19:23:23 | 显示全部楼层 |阅读模式
本帖最后由 godhawk 于 2016-4-3 09:47 编辑

现在需要这样一个功能

当按下ins键超过3秒的时候,就触发弹出对话框“警告”

如果只按住2秒,则无反应

我本来考虑用user32.dll的 If _IsPressed("2D", $user32dll) Then

但是具体怎么写没有思路,请教大家应该怎么实现
发表于 2016-4-2 20:25:03 | 显示全部楼层
哎,网络不好。发不了贴。
按照你的思路,借帮助文档基础,增加3行代码既可
#include <Misc.au3>

Local $hDLL = DllOpen("user32.dll")
Local $o = 3 ;第1行 设置秒


While 1
        If _IsPressed("10", $hDLL) Then
                $inss = TimerInit() ;第2行 ,计时
                ConsoleWrite("_IsPressed - Shift Key was pressed." & @CRLF)
                ; 一直等待,直到按键被释放
                While _IsPressed("10", $hDLL)
;~                         Sleep(250)
                if TimerDiff($inss)/1000+1 >$o Then MsgBox(8096 ,'' ,'按下Shift已有 '&$o &' 秒' & @CR &'不信点确定再按 '&$o&' 秒') ;第3行 ....
                WEnd
                ConsoleWrite("_IsPressed - Shift Key was released." & @CRLF)
        ElseIf _IsPressed("1B", $hDLL) Then
                MsgBox(4096, "_IsPressed", "The Esc Key was pressed, therefore we will close the application.")
                ExitLoop
        EndIf
        Sleep(250)
WEnd

DllClose($hDLL)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
 楼主| 发表于 2016-4-3 01:17:02 | 显示全部楼层
谢谢,昨天我想了一下,用了另外一个办法

                If _IsPressed("2D", $user32dll) Then
                        If TimerDiff($Time) < 300 Then
                                $Count += 1
                        Else
                                $Count = 0
                        EndIf
                        $Time = TimerInit()
                        If $Count > 10 Then msgbox(0,0,"警告")
                EndIf

原理和你的应该是差不多的,优点是不用设置while循环,能让线程自由,不影响其它部分的代码运作……缺点是时间不准确,只能根据误差调整count的上限来修正……
总之再次感谢。
发表于 2016-4-3 19:16:35 | 显示全部楼层
也可以用注册热键的形式,优先级别高,对主脚本影响小
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-5-17 10:20 , Processed in 0.077210 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表