1 (изменено: skeleton, 2015-06-13 22:03:05)

Тема: AHK: Нажатие кнопки в течении времени, количество нажатий

Как будет выглядеть скрипт при алгоритме -

Если "Е" нажата 2 и более секунды или "Е" нажата не менее 4 раз в течении не более 2 сек. - нажать F10, отпустить F10,
нажать F5, отпустить F5.

2 (изменено: yalanne, 2015-06-13 19:43:38)

Re: AHK: Нажатие кнопки в течении времени, количество нажатий

SC014:: ; жмем кнопку е/t
press++ ; в этой переменной будет считаться нажатие этих клавиш
if press = 1 ; если нажатие первое то запускаем таймер
    settimer qq,-2000
keywait SC014 
return

qq: 
if (press = 1) and GetKeyState("SC014","p") ; проверяем  если кнопка не отпускалась
    tooltip 1 ; то делаем это действие.
else if press >= 4 ; Иначе вот это, если нажато 4 и более раза
    tooltip 2
    
press := 0 ; сброс нажатий
return

3

Re: AHK: Нажатие кнопки в течении времени, количество нажатий

yalanne, напрасно не пользуетесь форматированием, выглядит дико. Сделайте уже шаг от говнокодера к программисту!

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

4

Re: AHK: Нажатие кнопки в течении времени, количество нажатий

teadrinker, это еще читабельно! Вот в другом посте про геймпад-клавиатуру, в начале там библиотека нужная автор этой библиотеки все красиво расписал с множеством коментов а после идет мои заклинания на 200> строк без коментов. XD

5

Re: AHK: Нажатие кнопки в течении времени, количество нажатий

Так зачем сравнивать с тем, что ещё хуже? Тех, кто делает что-то плохо, всегда больше, чем тех, кто умеет делать хорошо.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

6 (изменено: yalanne, 2015-06-13 20:03:39)

Re: AHK: Нажатие кнопки в течении времени, количество нажатий

Хоть я и не пользуюсь форматированием скрипта, но я почти всегда во всех своих скриптах(законченных) делаю подробные коменты разве этого мало?

7

Re: AHK: Нажатие кнопки в течении времени, количество нажатий

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

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

8 (изменено: skeleton, 2015-06-13 22:14:53)

Re: AHK: Нажатие кнопки в течении времени, количество нажатий

yalanne пишет:
SC014:: ; жмем кнопку е/t
press++ ; в этой переменной будет считаться нажатие этих клавиш
if press = 1 ; если нажатие первое то запускаем таймер
    settimer qq,-2000
keywait SC014 
return

qq: 
if (press = 1) and GetKeyState("SC014","p") ; проверяем  если кнопка не отпускалась
    tooltip 1 ; то делаем это действие.
else if press >= 4 ; Иначе вот это, если нажато 4 и более раза
    tooltip 2
    
press := 0 ; сброс нажатий
return

Спасибо за помощь!
Только насколько я понял действие либо так, либо иначе... мне нужно чтобы любое из действий приводило к одному результату.

if (press = 1) and GetKeyState("SC014","p") or press >= 4

В AHK есть оператор or?
И qq с одним двоеточием?

И еще извиняюсь один вопрос почему не работает конструкция:

#If T1
*LButton::
   While GetKeyState("LButton", "P")
    {
      Send, {sc21 down}
    } 
   Return

#If
F9:: T1 := !T1

То есть нужно - если нажата ЛКМ нажать и удерживать F, если отпустить ЛКМ - отпустить F

9

Re: AHK: Нажатие кнопки в течении времени, количество нажатий

к одному результату

Вот так подойдет?

SC014:: ; жмем кнопку е/t
press++ ; в этой переменной будет считаться нажатие этих клавиш
if press = 1 ; если нажатие первое то запускаем таймер
    settimer qq,-2000
keywait SC014 
return

qq: 
if ((press = 1) and GetKeyState("SC014","p")) or (press >= 4) 
    tooltip 12
    
press := 0 ; сброс нажатий
return

qq это метка(ее имя может быть другое). К меткам надо одно двоеточие, а к клавишам две.

10 (изменено: skeleton, 2015-06-13 22:17:26)

Re: AHK: Нажатие кнопки в течении времени, количество нажатий

yalanne пишет:
SC014:: ; жмем кнопку е/t
press++ ; в этой переменной будет считаться нажатие этих клавиш
if press = 1 ; если нажатие первое то запускаем таймер
    settimer qq,-2000
keywait SC014 
return

qq: 
if ((press = 1) and GetKeyState("SC014","p")) or (press >= 4) 
    tooltip 12
    
press := 0 ; сброс нажатий
return

qq это метка(ее имя может быть другое). К меткам надо одно двоеточие, а к клавишам две.

Отлично! Спасибо большое завтра буду пробовать!

11 (изменено: skeleton, 2015-06-13 22:40:25)

Re: AHK: Нажатие кнопки в течении времени, количество нажатий

Усложним задачу. ) Имеем скрипт:


Изначально оба действия отключены и сначала кнопкой F11/F12 включается любое из них

#If D1
   Действие 1
#If
F12:: D1 := !D1

#If D2
   Действие 2
#If
F11:: D2 := !D2

SC014:: ; жмем кнопку е/t
press++ ; в этой переменной будет считаться нажатие этих клавиш
if press = 1 ; если нажатие первое то запускаем таймер
    settimer qq,-2000
keywait SC014 
return

qq: 
if ((press = 1) and GetKeyState("SC014","p")) or (press >= 4) 
    Если на данный момент активно Действие 2/1 переключиться на Действие 1/2
    (То есть нужно определить какое действие на данный момент активно и переключиться на другое)
press := 0 ; сброс нажатий
return

12

Re: AHK: Нажатие кнопки в течении времени, количество нажатий

Не совсем понял, но вот что получилось:

#If !D ; Это условие истина если D равно 0(пустоте).
F11::tooltip 1
F12::tooltip 2
#If

#If D ; Это условие истина если D равно положительному числу.
F11::tooltip 3
F12::tooltip 4
#If

SC014:: ; жмем кнопку е/t
press++ ; в этой переменной будет считаться нажатие этих клавиш
if press = 1 ; если нажатие первое то запускаем таймер
    settimer qq,-2000
keywait SC014 
return

qq: 
if ((press = 1) and GetKeyState("SC014","p")) or (press >= 4) ;если это условие сработало то 
    D := !D ; то переменная поменяет свой статус. (если было 0 то будет 1 и наоборот)
press := 0 ; сброс нажатий
return

то?

13 (изменено: skeleton, 2015-06-14 17:19:08)

Re: AHK: Нажатие кнопки в течении времени, количество нажатий

Если я правильно понял изначально тот или иной блок уже должен быть активен. Мне нужно что бы при запуске макроса оба блока F11 и F12 были неактивны и какой запустить первым решал я сам нажав либо F11 либо F12, а затем макрос по описанному ниже нажатию "Е" определял какой блок работает и переключался на другой.

Уточню.

#If D11
*LButton::
   While GetKeyState("LButton", "P")
    Sendinput {sc21 down}
     {
      Click
      Sleep, 680
     } 
   Return

#If
F11:: D11 := !D11

#If D12
*LButton::
   While GetKeyState("LButton", "P")
     {
      Click
      Sleep, 2800
     } 
   Return

#If
F12:: D12 := !D12

SC014:: ; жмем кнопку е/t
press++ ; в этой переменной будет считаться нажатие этих клавиш
if press = 1 ; если нажатие первое то запускаем таймер
    settimer qq,-2000
keywait SC014 
return

qq: 
if ((press = 1) and GetKeyState("SC014","p")) or (press >= 4) 

Если на данный момент активно F11:: переключиться на F12::. (А если на тот момент было активно F12:: переключиться на F11::) т.е. определить какой блок был активен и переключиться на другой.

press := 0 ; сброс нажатий
return

14

Re: AHK: Нажатие кнопки в течении времени, количество нажатий

skeleton, не нужно цитировать предыдущий пост.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

15

Re: AHK: Нажатие кнопки в течении времени, количество нажатий

#If D11
*LButton::
   While GetKeyState("LButton", "P")
    Sendinput {sc21 down}
     {
      Click
      Sleep, 680
     } 
   Return

#If
F11:: D11 := !D11

#If D12
*LButton::
   While GetKeyState("LButton", "P")
     {
      Click
      Sleep, 2800
     } 
   Return

#If
F12:: D12 := !D12

SC014:: ; жмем кнопку е/t
press++ ; в этой переменной будет считаться нажатие этих клавиш
if press = 1 ; если нажатие первое то запускаем таймер
    settimer qq,-2000
keywait SC014 
return

qq: 
if ((press = 1) and GetKeyState("SC014","p")) or (press >= 4) 
%     (D11 and !D12) ? ( (D12:=1) and (D11:=0) ) ; Если D11=1>, а D12=0 
    : (D12 and !D11) ? ( (D11:=1) and (D12:=0) ) ; Или если D12=1>, а D11=0      то меняем их ние статусы.
    : ""
press := 0 ; сброс нажатий
return

16 (изменено: skeleton, 2015-06-15 08:31:13)

Re: AHK: Нажатие кнопки в течении времени, количество нажатий

yalanne вы гений! )) Я счастлив! ))

Все работает как часы! За исключением одного - кнопка Е не работает в нормальном режиме... только как переключатель, даже в тексте не печатается... а она нужна...

PS Посмотрите почту.