1

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

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

Например, при русской раскладке клавиатуры:

Одиночное нажатие клавиши "и" = "и"
Одиночное нажатие при нажатом Shift или CapsLock клавиши "И" = "И"

Двойное нажатие клавиши "и" = "і"
Двойное нажатие при Shift или CapsLock клавиши "И" = "І"
Многоразовое быстрое нажатие клавиши "и" или "И" = "ііііі" или "ІІІІІ"

Удерживание клавиши  "И" =  "ИИИИИИИ"
Удерживание клавиши  "и" =  "ииииииии"

Можно ли это реализовать  максимально просто, что бы не тормозилась печать и работа системы?

Например можно сделать так:

:c*:ИИ::І
:c*:ии::і

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

Например для такой замены это более актуально, так как я часто печатаю несколько коротких тире подряд.

:?*:--::—

2 (изменено: serzh82saratov, 2023-03-11 17:56:31)

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

Как то сложно получилось.


ih := InputHook("V L0")
ih.OnChar := Func("OnChar")
ih.Start()
Return

OnChar(InputHook, Char) {  
	Critical 
	Static PrChar, PrTime
	, Chars := {"#и":"i","#И":"I"} 
	If !Chars["#" Char]
		Return 
	InputHook.Stop()
	KeyWait % Format("sc{:x}", GetKeySC(Char)), T0.25
	If ErrorLevel
	{
		KeyWait % Format("sc{:x}", GetKeySC(Char))
		PrTime := 0 
		Return InputHook.Start()
	}
	If (PrChar == Char && A_TickCount - PrTime < 250)
	{
		SendInput % "{Backspace 2}"
		SendInput % "{Text}" Chars["#" Char]
	}  
	PrChar := Char, PrTime := A_TickCount
	InputHook.Start()
}
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

3

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

У меня не работает, никакой реакции.

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

4

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

А ты что нажимаешь и как?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

5

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

Я по-всякому пробовал. Сейчас с ноутбука. А как нужно?

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

6 (изменено: avens, 2023-03-12 00:41:10)

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

serzh82saratov, у меня тоже не работает, нет никакой реакции, всё как по умолчанию для клавиши "и" и "И".
У меня версия AutoHotkey 1.1.34.04

7

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

teadrinker
В блокноте печатать "и". У меня 1.1.34.01.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

8

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

Так и делал. В любом случае лучше использовать актуальную версию.

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

9

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

На последней запустил, всё работает также, отключите другие скрипты.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

10

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

Не, не помогло.

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

11

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

Любопытно, на анк 64 у меня тоже не работает.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

12

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

На анк 32 как?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

13

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

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

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

14

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

Ага, но у меня работает.
Посмотри код, что там работать у тебя не должно?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

15

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

У меня всегда срабатывает это if, независимо от скорости нажатия:

	KeyWait % Format("sc{:x}", GetKeySC(Char)), T0.25
	If ErrorLevel

Проверял так:


ih := InputHook("V L0")
ih.OnChar := Func("OnChar")
ih.Start()
Return

OnChar(InputHook, Char) {
   static counter := 0
	Critical 
	Static PrChar, PrTime
	, Chars := {"#и":"i","#И":"I"} 
	If !Chars["#" Char]
		Return 
   
	InputHook.Stop()
	KeyWait % Format("sc{:x}", GetKeySC(Char)), T0.25
	If ErrorLevel
	{
      ToolTip % ++counter
		KeyWait % Format("sc{:x}", GetKeySC(Char))
		PrTime := 0 
		Return InputHook.Start()
	}
	If (PrChar == Char && A_TickCount - PrTime < 250)
	{
		SendInput % "{Backspace 2}"
		SendInput % "{Text}" Chars["#" Char]
	}  
	PrChar := Char, PrTime := A_TickCount
	InputHook.Start()
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

16

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

teadrinker пишет:

У меня всегда срабатывает это if, независимо от скорости нажатия:

Ну так по твоему должно так быть?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

17

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

А, понял, у тебя язык по умолчанию наверно русский. Если английский, тогда вот это

1:: MsgBox, % GetKeySC("и")

возвращает 0. Попробуй вызвать главное окно скрипта из трея и переключить на английский.

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

18

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

Да, ерунда. Ну тогда в массив сканы ещё добавлять.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

19

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

Это как?



ih := InputHook("V L0")
ih.OnChar := Func("OnChar")
ih.Start()
Return

OnChar(InputHook, Char) {  
	Critical 
	Static PrChar, PrTime
	, Chars := {"#и":"i","#И":"I"} 
	If !Chars["#" Char]
		Return 
	InputHook.Stop()
	Key := GetKeySC(Char) ? Format("sc{:x}", GetKeySC(Char)) : Format("sc{:x}", GetKeySC(Chars["#" Char])) 
	KeyWait % Key, T0.25
	If ErrorLevel
	{
		KeyWait % Key
		PrTime := 0 
		Return InputHook.Start()
	}
	If (PrChar == Char && A_TickCount - PrTime < 250)
	{
		SendInput % "{Backspace 2}"
		SendInput % "{Text}" Chars["#" Char]
	}  
	PrChar := Char, PrTime := A_TickCount
	InputHook.Start()
}

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

20

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

При двойном нажатии меняет, при удержании печатает и сразу стирает, то-есть стоит на месте.

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

21

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

Да, ну не знаю тогда, лень копать.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

22

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

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

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

23

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

serzh82saratov пишет:

Да, ну не знаю тогда, лень копать.

Ну, мне тоже лень.

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

24

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

teadrinker пишет:

А, понял, у тебя язык по умолчанию наверно русский. Если английский, тогда вот это

Там получается что GetKeySC берёт от раскладки окна скрипта, а не от активного. То есть можно менять раскладку окна скрипта на русскую, тогда будет работать. Но тут проще добавить кнопку в массив.


ih := InputHook("V L0")
ih.OnChar := Func("OnChar")
ih.Start()
Return

OnChar(InputHook, Char) {  
	Critical 
	Static PrChar, PrTime
	, Chars := {"#и":"i","#И":"I"} 
	, Keys := {"#и":"sc30","#И":"sc30"} 
	If !Chars["#" Char]
		Return 
	InputHook.Stop()
	Key := GetKeySC(Char) ? Format("sc{:x}", GetKeySC(Char)) : Keys["#" Char]
	KeyWait % Key, T0.25
	If ErrorLevel
	{
		KeyWait % Key
		PrTime := 0 
		Return InputHook.Start()
	}
	If (PrChar == Char && A_TickCount - PrTime < 250)
	{
		SendInput % "{Backspace 2}"
		SendInput % "{Text}" Chars["#" Char]
	}  
	PrChar := Char, PrTime := A_TickCount
	InputHook.Start()
}
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

25

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

serzh82saratov, у меня частично работает описанный функционал в этом скрипте:
Есть баги если по два раза быстро нажимать "ии" то идет замена на "ii" но иногда не заменяет остаётся "и" далее при повторном нажатии идёт один Backspace и "и" удаляется.
Плюс эта функция не работает:

Многоразовое быстрое нажатие клавиши "и" или "И" = "ііііі" или "ІІІІІ"

Другие символы добавлять в массив Chars и Keys для аналогичной замены?

Пока использую такой вариант, так как два "ии" есть в словах.

:c*?:ИИИ::І
:c*?:иии::і

26

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

avens пишет:

Плюс эта функция не работает:

Так попробуйте.

ih := InputHook("V L0")
ih.OnChar := Func("OnChar")
ih.Start()
Return

OnChar(InputHook, Char) {  
	Critical 
	Static PrChar, PrTime, PrTime2
	, Chars := {"#и":"i","#И":"I"} 
	, Keys := {"#и":"sc30","#И":"sc30"} 
	If !Chars["#" Char]
		Return PrTime2 := 0
	InputHook.Stop()
	Key := GetKeySC(Char) ? Format("sc{:x}", GetKeySC(Char)) : Keys["#" Char]
	KeyWait % Key, T0.25
	If ErrorLevel
	{
		KeyWait % Key
		PrTime := 0 
		Return InputHook.Start()
	}
	If (PrChar == Char && A_TickCount - PrTime < 250)
	{
		SendInput % "{Backspace " 1 + (A_TickCount - PrTime2 > 250) "}"
		SendInput % "{Text}" Chars["#" Char]
		PrTime2 := A_TickCount
	}  
	PrChar := Char, PrTime := A_TickCount
	InputHook.Start()
}
avens пишет:

Другие символы добавлять в массив Chars и Keys для аналогичной замены?

Да.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

27 (изменено: avens, 2023-03-19 23:37:37)

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

serzh82saratov, этот скрипт вроде полноценно работает как и описано в первом сообщении темы. Благодарю. Попробую в использовать и протестирую более детально.

Объекты можно записать так:

Chars := 
(Join QC
{
	"#и":"i", ; Comment
	"#И":"I"
}
),

Keys := 
(Join Q
{
	"#и":"sc30",
	"#И":"sc30"
}
)