[已解决]如何判断“按下一个键持续超过3秒”
本帖最后由 godhawk 于 2016-4-3 09:47 编辑现在需要这样一个功能
当按下ins键超过3秒的时候,就触发弹出对话框“警告”
如果只按住2秒,则无反应
我本来考虑用user32.dll的 If _IsPressed("2D", $user32dll) Then
但是具体怎么写没有思路,请教大家应该怎么实现{:face (245):} 哎,网络不好。发不了贴。
按照你的思路,借帮助文档基础,增加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)
谢谢,昨天我想了一下,用了另外一个办法
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的上限来修正……
总之再次感谢。 也可以用注册热键的形式,优先级别高,对主脚本影响小
页:
[1]