1 (изменено: HASBULAT, 2018-06-14 23:03:51)

Тема: Одновременно зажатые клавиши

Привет, не могу найти как сделать так, чтобы если нажаты одновременно клавиши А и B , нажималась бы клавиша 5.
Если так

+ открыть спойлер

a & b::5

То получается при ЗАЖАТОЙ "А", нажимая на "B"  - нажимается "5". При этом "А" не работает.
А как сделать так, чтобы А и Б работали как обычно, но если они обе одновременно зажаты то - с ними ещё и цифра 5 нажималась бы ?

2

Re: Одновременно зажатые клавиши

Никто не знает? Или "боги программирования" не хотят опускаться до уровня чайников ?

3

Re: Одновременно зажатые клавиши

Читайте справку.

4 (изменено: qqlexa, 2018-06-15 19:30:22)

Re: Одновременно зажатые клавиши

Сам даже забыл, почитал справку и вспомнил.

~sc1E & sc30::Send, 5 ; ~a & b::Send, 5 

5

Re: Одновременно зажатые клавиши

qqlexa
Здравствуйте, тоже хотелось бы присоединиться к этой теме.
на вашем примере попробовал адаптировать свой скрипт, но к сожалению он не работает при комбинации моих клавиш.
Подскажите пожалуйста, в чем проблема?


~backspace & E::
{
Send {E}
Send {4}
Send, {RButton}
Sleep, 500
Send {2}
}
return

6 (изменено: qqlexa, 2018-06-19 11:12:57)

Re: Одновременно зажатые клавиши

У меня всё работает идеально, попробуйте заменить клавиши на виртуальные коды.


~backspace & sc12:: ; ~ значит что backspace не будет блокироваться если нажимать его без комбинации
{
Send {sc12}           ; Виртуальный код клавиши "E"
Send {sc5}            ; Виртуальный код клавиши "4"
Send, {RButton}
Sleep, 500
Send {sc3}            ; Виртуальный код клавиши "2"
}
return

7

Re: Одновременно зажатые клавиши

qqlexa
Так работает, спасибо за помощь

8

Re: Одновременно зажатые клавиши

qqlexa
Я извиняюсь, а как можно прописать скрипт так чтобы после нажатия первой горячей клавиши я мог нажать вторую и скрипт сработал? т.е. Нажимаю backspace, отпускаю, и в течении 1500 мл.с. если успеваю нажать вторую горячую клавишу {E} то скрипт срабатывает, если не успеваю, то скрипт не срабатывает, как бы клавиша {E} нажимается как обычная клавиша.
Пытался на такой манер сделать, но ни чего не выходит:


~backspace & sc12::
{
Send {Blind}{sc12}
Send {Blind}{sc5}
Send {Blind}{RButton}
Sleep, 500
Send {Blind}{sc3}
}
{
#If (A_PriorKey = sc12) And (A_TimeSincePriorHotkey < 1500)
}
return

В чем может быть проблема?

9 (изменено: qqlexa, 2018-06-20 01:40:31)

Re: Одновременно зажатые клавиши

Примитивно и работает.
Если уже пользуешься форумом, подписывай коды , не все их знают (в том числе я).


#NoTrayIcon ; Мешает глазу прыгающая иконка в трее
#SingleInstance , Force ; Перезапускать без создания копий
~backspace::
SetTimer, a , 1500 ; Создаем таймер на 1500 мс
wait:
If !GetKeyState("sc12", "P")   
	goto wait
; Разрешаем проход дальше
SetTimer, a , off ; Выключаем таймер , чтобы не перезапустил скрипт
Send {Blind}{sc5} ; {Blind} - так и не понял что оно делает :D . sc5 - 4 
Send {Blind}{RButton} 
Sleep, 500
Send {Blind}{sc3} ; sc3 - 2
return

#z::
ExitApp

a:
reload

Там E проходит как E без этих блиндов. Если нужно исправить - попробую.

10

Re: Одновременно зажатые клавиши

UPD:


#NoTrayIcon ; Мешает глазу прыгающая иконка в трее
#SingleInstance , Force ; Перезапускать без создания копий
~backspace::
SetTimer, a , 1500 ; Создаем таймер на 1500 мс
wait:
If !GetKeyState("sc12", "P")   
	goto wait
; Разрешаем проход дальше
SetTimer, a , off ; Выключаем таймер , 
Send {Blind}{sc5} ; sc5 - 4 
Send {Blind}{RButton} 
Sleep, 500
Send {Blind}{sc3} ; sc3 - 2
return

#z::
ExitApp

a:
SetTimer, a , off ; Выключаем таймер
return

11

Re: Одновременно зажатые клавиши

qqlexa
Спасибо большое)) все получилось)) правда с первым вариантом работает, В UPD варианте по каким то причинам таймер халтурит, временной разрыв не соблюдается, он так или иначе ждет нажатия Е после бакспейса. Спасибо, здорово выручил

12 (изменено: qqlexa, Вчера 13:11:13)

Re: Одновременно зажатые клавиши

Да и правда, ночью голова варит плохо, и таймер в Update варианте был бесполезным.
Вот как хотел его использовать:

#NoTrayIcon ; Мешает глазу прыгающая иконка в трее
#SingleInstance , Force ; Перезапуск без создания копий
timer := 0 ; Переменная которая будет регулировать задержку
~backspace::
SetTimer, a , 1500 ; Создаем таймер на 1500 мс
timer := 1 ; Таймер идёт
wait: ; Цикл проверки
If timer = 0 ; Если таймер остановлен 
	return ; Остановить цикл goto wait
If !GetKeyState("sc12", "P")   
	goto wait ; Идём обратно
; Разрешаем проход дальше
SetTimer, a , off ; Выключаем таймер , 
Send {Blind}{sc5} ; sc5 - 4 
Send {Blind}{RButton} 
Sleep, 500
Send {Blind}{sc3} ; sc3 - 2
return

a:
timer := 0 ; Удалить таймер
SetTimer, a , off ; Выключаем таймер
return
#z::
ExitApp

Так работает? Просто использовать первый вариант с перезагрузкой скрипта ненадёжно.

13

Re: Одновременно зажатые клавиши

qqlexa
Так даже очень хорошо работает) огромное спасибо)) Реально выручил)) Ну и для кучи хотелось бы задать пару нубских вопросов если можно))
1) - Сколько скриптов одновременно можно запускать? просто у меня в одном скрипте уже четыре макроса набролось) и создается впечатление будто бы малость тормозят, думал есть ли смысл их разделять?
2) - Все клавиши блиндовал для того чтобы скрипт не перебивал и можно было использовать спец.клавиши, в моем случае это Sift. Почему макрос откзывается работать при зажатом шифте? Дело в том что в моем старом скрипте таймера не было и из-за этого он был не удобен, но совместно с шифтом он работал(т.е. удерживал шифт, после гор.клавиши и скрипт срабатывал) сейчас  же этого нет. Почему так?

14 (изменено: qqlexa, Вчера 13:11:05)

Re: Одновременно зажатые клавиши

1) Как я знаю ограничений практически нет. У меня один раз код кривой был и скрипт делал перезагрузку сразу после включения и горячей клавиши на выключение скрипта я не сделал. В итоге открылось около 100 копий этого скрипта потому что даже директива

#SingleInstance , Force ; Перезапуск без создания копий

дала сбой. Сделал сразу Ctrl + Alt + Delete и нажал на выход из системы. Ждал минуты 3 чтобы оно всё закрылось.
2) Без понятия как таймер повлиял на нажатия шифта.

15

Re: Одновременно зажатые клавиши

Mr.Valerij-Zlo пишет:

при зажатом шифте

Потому что вы так установили горячую клавишу. Подробнее → справка → горячие клавиши → символы-модификаторы.

Групповой символ: запускает горячую клавишу, даже если удерживаются дополнительные модификаторы. Обычно этот символ используется в сочетании с переназначением клавиш или кнопок.

16 (изменено: qqlexa, Сегодня 11:08:06)

Re: Одновременно зажатые клавиши

stealzy,

Не понял где, но для вас нужно использовать:

*~Горячая_клавиша::

Я Вас так понял, правильно?
Но у него здесь нет "*" а всё работает и с шифтом.
Почему работает так как нужно тогда?


~backspace & sc12::
{
Send {Blind}{sc12}
Send {Blind}{sc5}
Send {Blind}{RButton}
Sleep, 500
Send {Blind}{sc3}
}
{
#If (A_PriorKey = sc12) And (A_TimeSincePriorHotkey < 1500)
}
return

17

Re: Одновременно зажатые клавиши

qqlexa
Да вы его правильно поняли, почитал про горячие клавиши, этот символ "*" и вправду отвечает за то чтобы можно было одновременно использовать спец.клавиши. Добавил этот мод вот сюда:


~*Backspace::

Думал что AHK ругаться будет мул (зачем используешь два модификатора) А оказывается все работает именно так как нужно
Спасибо ребят, благодаря вам этот скрипт достигнут вершины совершенства