1

Тема: AHK: Работа горячей клавиши при единичном нажатии

$1:: Send 21
$3:: Send 23

Необходимо, чтобы данные горячие клавиши срабатывали лишь при единичном нажатии. Т.е. если при первом нажатии на клавишу 1 отправляется 21, то при каждом последующем нажатии отправляется просто 1. Если между повторами нажимается любая другая клавиша, то горячая клавиша вновь становится активной. Помогите, пожалуйста, это реализовать.

2

Re: AHK: Работа горячей клавиши при единичном нажатии

Отключить горячую клавишу можно командой Hotkey.

3

Re: AHK: Работа горячей клавиши при единичном нажатии

Пример использования функции ожидания нажатия любой клавиши

#InstallKeybdHook

if ( WaitForAnyKey( 10000 ) )  ;время в милисекундах
	MsgBox, <любая клавиша> нажата
else
	MsgBox, [WaitForAnyKey] время вышло
ExitApp

WaitForAnyKey( p_timeout )
{
	start := A_TickCount

	loop,
	{
		if ( idle > A_TimeIdlePhysical )
			return, true
		else if ( A_TickCount-start >= p_timeout )
			return, false
	
		idle := A_TimeIdlePhysical

		Sleep, 10
	}
}

4

Re: AHK: Работа горячей клавиши при единичном нажатии

ypppu, как с помощью команды Hotkey можно реализовать описанное в первом посте?

5

Re: AHK: Работа горячей клавиши при единичном нажатии

; Hotkey, KeyName [, Label, Options]
$1::
Send 21
Hotkey, $1, Off
Return

$3::
Send 23
Hotkey, $3, Off
Return

6 (изменено: becauseim, 2016-04-06 12:11:30)

Re: AHK: Работа горячей клавиши при единичном нажатии

ypppu, спасибо! Но выходит ошибка в скрипте, не могу понять, с чем это связано.

nonexistent hotkey variant (ifwin)

$1:: 
Hotkey, $3, On
SendInput {vk4B}{vk4A}
Hotkey, $1, Off
Return

$2::
SendInput k
return

$3::
Hotkey, $1, On
SendInput {vk4B}{vk4C}
Hotkey, $3, Off
Return

Также не смог разобраться, как сделать так, чтобы после первого нажатия горячая клавиша не отключалась, а выполняла другое действие. Например, первое нажатие на 1 отправляет 21, а последующее нажатие отправляло A. Или же имитировало нажатие кнопки A на клавиатуре.

7

Re: AHK: Работа горячей клавиши при единичном нажатии

becauseim, Ваш скрипт у меня работает без ошибок.

чтобы после первого нажатия горячая клавиша не отключалась, а выполняла другое действие

$1:: 
Send, 21
Hotkey, $1, MyLabel
Return

MyLabel:
Send, A
Return

8

Re: AHK: Работа горячей клавиши при единичном нажатии

ypppu, а как сделать так, чтобы счетчик сбивался при нажатии на клавишу "3"?

В целом, необходимо, чтобы при нажатии на 1 отправлялось 21, но только тогда, когда перед этим нажималась клавиша 3.
И наоборот, при нажатии на клавишу 3 отправлялось 23, но только тогда, когда перед ней нажималась клавиша 1.

Начиная со второго нажатия клавиши работают как обычно, т.е. отправляют саму себя.

Особо приветствуется варианнт, основанный на регулярных выражениях. Пожалуйста, помогите реализовать эту функцию.

9

Re: AHK: Работа горячей клавиши при единичном нажатии

$1:: 
var1 := 1
If var3 = 1
{
var3 := 0
Send, 21
}
Else Send, 1
Return


$3::
var3 := 1
If var1 = 1
{
var1 := 0
Send, 23
}
Else Send, 3
Return

10

Re: AHK: Работа горячей клавиши при единичном нажатии

ypppu, Спасибо! Но не получилось заменить 123 на JKL виртуальными кодами.

11

Re: AHK: Работа горячей клавиши при единичном нажатии

Это о чём вообще?

12

Re: AHK: Работа горячей клавиши при единичном нажатии

ypppu, Хотелось бы, чтобы при нажатии на J отправлялось KJ, но только тогда, когда перед этим нажималась клавиша L.
И наоборот, при нажатии на клавишу L отправлялось KL, но только тогда, когда перед ней нажималась клавиша J.

Самостоятельно отредактировать имеющийся вариант не получилось.

13

Re: AHK: Работа горячей клавиши при единичном нажатии

becauseim, у меня всё получается. Выкладывайте свой код, поищем ошибку.

14

Re: AHK: Работа горячей клавиши при единичном нажатии

ypppu, получилось. До этого пытался изменить лишние параметры. Числа ввели в заблуждение. Кстати, в целом, все равботает по задумке, однако хотелось бы уточнить один момент:

..при нажатии на J отправлялось KJ, но только тогда, когда перед этим нажималась непосредственно клавиша L.
И наоборот, ...

15

Re: AHK: Работа горячей клавиши при единичном нажатии

В смысле скрипт должен ещё отслеживать, не была ли нажата ещё какая-нибудь клавиша на клавиатуре?

16 (изменено: becauseim, 2016-05-11 19:29:51)

Re: AHK: Работа горячей клавиши при единичном нажатии

ypppu, точно не знаю. Т.е. если я нажимаю на J, потом на K, а следом на L, то должно отправляться JKL, а сейчас отправляется JKKL. А если нажимаю на J, а следом на L, то как и сейчас, должно отправляться JKL.

В идеале было бы, если условием было неоднократное кол-во нажатий, т.е.:

..при нажатии на J отправлялось KJ, но только тогда, когда перед этим неоднократно, например, дважды, нажималась непосредственно клавиша L.
И наоборот, ...

17

Re: AHK: Работа горячей клавиши при единичном нажатии

точно не знаю

Вот где собака зарыта.

18

Re: AHK: Работа горячей клавиши при единичном нажатии

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

19

Re: AHK: Работа горячей клавиши при единичном нажатии

becauseim пишет:

В идеале было бы, если условием было неоднократное кол-во нажатий, т.е.:

..при нажатии на J отправлялось KJ, но только тогда, когда перед этим неоднократно, например, дважды, нажималась непосредственно клавиша L.
И наоборот, ...

Вот скрипт, идеально подходящий под описание:

vk4A:: 
If var3 > 1
Send, KJ
Else Send, J
var1++
var3 := 0
Return

vk4B:: 
var1 := 0
var3 := 0
Send, K
Return

vk4C::
If var1 > 1
Send, KL
Else Send, L
var3++
var1 := 0
Return

20

Re: AHK: Работа горячей клавиши при единичном нажатии

ypppu, Спасибо! То, что нужно!