-
AutoIt
(
http://forum.oszone.net/forumdisplay.php?f=103)
Если LCtrl удерживалась меньше 1 секунды, то действие1, иначе действие2.
Возможно ли реализовать такое:
Код:
While 1
_IsPressed("A2") Then _function() ;если нажата клавиша - левый Ctrl то...
Sleep (100)
WEnd
Func _function()
;тут производится обработка, если клавиша - левый ctrl была просто нажата меньше секунды и отпущена то вызов функции
If .... Then
_next()
;если же клавиша левый ctrl была удержана больше секунды то выход из функции
Else
Return
EndIf
EndFunc ;_function()
Func _next()
MsgBox(0,"","тест")
EndFunc ;_next()
P.S. Алгоритм может быть другим, важна суть.
|
Ну чтоб "поймать" нажатие клавиши LCtrl, достаточно в функцию _ EvaluateKey_Proc($nKeyCode) в том примере добавить еще один Case: Case 162. Но вот как там "поймать" отжатие клавиши?
|
Конечно глуповатая функция, и врядли работающая(Честно скажу что не проверял)
Код:
While _IsPressed(11)
$Time += 0.1
Sleep(100)
WEnd
Не пинайте сильно :) Я всего лишь начинающий....
|
Код:
$tHandle = TimerInit()
While _IsPressed($nKeyCode)
Sleep(50)
WEnd
If TimerDiff($tHandle) > 2000 Then
_SomeFunc()
Else
_AnotherFunc()
EndIf
|
Код:
#include <Misc.au3>
While 1
If _IsPressed("A2") Then _function() ;если нажата клавиша - левый Ctrl то...
Sleep (50)
WEnd
Func _function()
;тут производится обработка, если клавиша - левый ctrl была просто нажата меньше секунды и отпущена то вызов функции
$tHandle = TimerInit()
While _IsPressed("A2")
Sleep(50)
WEnd
If TimerDiff($tHandle) <500 Then
_next()
;если же клавиша левый ctrl была удержана больше секунды то выход из функции
Else
Return
EndIf
EndFunc ;_function()
Func _next()
MsgBox(0,"","тест",1)
EndFunc ;_next()
|
Цитата:
Цитата beve
Но вот как там "поймать" отжатие клавиши? »
|
хде-то так:
Код:
#include <WindowsConstants.au3>
#include <StructureConstants.au3>
#include <Timers.au3>
#include <WinAPI.au3>
HotKeySet("{ESC}", "OnAutoItExit")
Global $hStub_KeyProc = DllCallbackRegister("_Key_Proc", "int", "int;ptr;ptr")
Global $hHook = _WinAPI_SetWindowsHookEx($WH_KEYBOARD_LL, DllCallbackGetPtr($hStub_KeyProc), _WinAPI_GetModuleHandle(0))
Global $CtrlState = 0
Global $CtrlLimit = 500
Global $CtrlTimer = 0
While 1
If $CtrlState = 2 Then ; по ходу нажали...
If $CtrlTimer < $CtrlLimit Then _next() ; и сколько держали?
$CtrlState = 0 ; уже обработали!
EndIf
Sleep(100)
WEnd
Func _next()
ConsoleWrite("типа контрал, типа левый, типа быстро, типа нажал..." &@CRLF)
EndFunc
Func _Key_Proc($nCode, $wParam, $lParam)
If $nCode < 0 Then Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam)
Local $KEYHOOKSTRUCT = DllStructCreate($tagKBDLLHOOKSTRUCT, $lParam)
; Обработка нажатия левого CTRL: установка флага и таймера
If $CtrlState=0 And $wParam = $WM_KEYDOWN And DllStructGetData($KEYHOOKSTRUCT,"vkCode")=162 Then
$CtrlTimer = _Timer_Init()
$CtrlState=1
EndIf
; Обработка отжатия левого CTRL: сброс флага, установка таймера
If $CtrlState=1 And $wParam = $WM_KEYUP And DllStructGetData($KEYHOOKSTRUCT,"vkCode")=162 Then
$CtrlTimer = _Timer_Diff($CtrlTimer)
$CtrlState=2
EndIf
Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam)
EndFunc
Func OnAutoItExit()
If $hStub_KeyProc Then DllCallbackFree($hStub_KeyProc)
If $hHook Then _WinAPI_UnhookWindowsHookEx($hHook)
If @HotKeyPressed <> "" Then Exit
EndFunc
|
Время: 17:26.
© OSzone.net 2001-