Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Если LCtrl удерживалась меньше 1 секунды, то действие1, иначе действие2.

Ответить
Настройки темы
[решено] Если LCtrl удерживалась меньше 1 секунды, то действие1, иначе действие2.

Аватара для beve

Старожил


Сообщения: 307
Благодарности: 137


Конфигурация

Профиль | Отправить PM | Цитировать


Возможно ли реализовать такое:
Код: Выделить весь код
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. Алгоритм может быть другим, важна суть.

-------
Не в кількості знань полягає освіта, а в повному розумінні і вмілому використанні того, що знаєш.


Отправлено: 09:46, 26-08-2009

 

Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


beve, не понял - у тебя ведь уже была похожая задача?
[решено] Отслеживание нажатий клавиш на клавиатуре (чтоб узнать код нажатой клавиши)

- фиксируешь нажатие, включаешь таймер
- фиксируешь отжатие, измеряешь время, далее в зависимости от интервала
Это сообщение посчитали полезным следующие участники:

Отправлено: 09:48, 27-08-2009 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для beve

Старожил


Сообщения: 307
Благодарности: 137

Профиль | Отправить PM | Цитировать


Цитата amel27:
у тебя ведь уже была похожая задача?
[решено] Отслеживание нажатий клавиш на клавиатуре (чтоб узнать код нажатой клавиши)
- фиксируешь нажатие, включаешь таймер
- фиксируешь отжатие, измеряешь время, далее в зависимости от интервала »
Ну чтоб "поймать" нажатие клавиши LCtrl, достаточно в функцию _EvaluateKey_Proc($nKeyCode) в том примере добавить еще один Case: Case 162. Но вот как там "поймать" отжатие клавиши?

-------
Не в кількості знань полягає освіта, а в повному розумінні і вмілому використанні того, що знаєш.


Отправлено: 12:43, 27-08-2009 | #3


Аватара для Medic84

$AutoITer


Автор проектов


Сообщения: 446
Благодарности: 44

Профиль | Отправить PM | Цитировать


Конечно глуповатая функция, и врядли работающая(Честно скажу что не проверял)

Код: Выделить весь код
While _IsPressed(11)
$Time += 0.1
Sleep(100)
WEnd
Не пинайте сильно Я всего лишь начинающий....

-------

AutoIT Русское сообщество| Моя лаборатория


Отправлено: 13:07, 27-08-2009 | #4


Аватара для SyDr

Старожил


Сообщения: 215
Благодарности: 62

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
$tHandle = TimerInit()
While _IsPressed($nKeyCode)
Sleep(50)
WEnd
If TimerDiff($tHandle) > 2000 Then
_SomeFunc()
Else
_AnotherFunc()
EndIf

-------

"Что мы думаем, знаем или во что верим в конце концов не так уж и важно.
Важно лишь то, что мы делаем."
Джон Раскин

Это сообщение посчитали полезным следующие участники:

Отправлено: 13:18, 27-08-2009 | #5


Аватара для beve

Старожил


Сообщения: 307
Благодарности: 137

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
#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()

-------
Не в кількості знань полягає освіта, а в повному розумінні і вмілому використанні того, що знаєш.


Отправлено: 14:24, 27-08-2009 | #6


Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


Цитата 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
Это сообщение посчитали полезным следующие участники:

Отправлено: 09:37, 28-08-2009 | #7



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Если LCtrl удерживалась меньше 1 секунды, то действие1, иначе действие2.

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[решено] php|Преобразовать секунды в дату morgan1991 Вебмастеру 11 30-12-2009 00:14
Доступ - Вирус просит отправить СМС, иначе никак не войти... poisonkit Лечение систем от вредоносных программ 4 03-11-2009 13:52
[решено] ОС показывает меньше ОЗУ чем стоит asus a9rp Материнские платы и память 3 15-12-2008 17:26
Разное - [решено] Свободное место на жестком диске меньше ожидаемого. HellFire_MZ Microsoft Windows 2000/XP 2 28-06-2008 14:42
Разное - [решено] Стал подвисать комп на 2-3 секунды из-за заражения Bester Лечение систем от вредоносных программ 30 01-01-2008 15:24




 
Переход