1 (изменено: RacalCucumber, 2023-07-26 02:12:40)

Тема: AHK: Hotkey через GUI и Hotkey через например ~I:: на удержание

Итак, задача сделать макрос, который бы при нажатии кнопки делал что то одно, а при отпускании что то другое.

В случае с хоткеями из просто макроса это делается:

~g::
		<Делаем при нажатии>
		KeyWait g
		<Делаем при отпускании>
	return

И все прекрасно работает.

А как это реализовать из GUI с назначаемой кнопкой?

HK_1 = "g"
Gui, 1: Font, s9
	Gui, 1:  Add, Hotkey, x272 y32 w120 h21, gChk vHK, %HK%
	Gui, 1:  Show, w777 h446, $%$
Chk:
	Gui, 1:  submit, NoHide
	Hotkey, ~%HK_1%, HK, on В T5 UseErrorLevel
Return

HK:
		<Делаем при нажатии>
		KeyWait g
		<Делаем при отпускании>
	return

не останавливается на "KeyWait g"

Я что-то неправильно делаю или из GUI такое не получится сделать? И если неправильно - то что неправильно?

2

Re: AHK: Hotkey через GUI и Hotkey через например ~I:: на удержание

RacalCucumber пишет:

Я что-то неправильно делаю

Честно говоря, практически всё. Прежде всего, код, который вы запостили, невозможно запустить, сразу выдаёт ошибки. Если вы спрашиваете, как сделать так, чтобы срабатывало и при нажатии, и при отпускании, нужно понимать, что вариант при нажатии у вас работает? Если да, можете запостить рабочий код?

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

3 (изменено: RacalCucumber, 2023-07-26 03:04:50)

Re: AHK: Hotkey через GUI и Hotkey через например ~I:: на удержание

Работает:

#NoEnv 
; #Warn
SendMode Input 
SetWorkingDir 

~g::
{
	MsgBox key G pressed
	KeyWait g
	MsgBox key G unpressed
}
Return

не работает, спамя нажатия и не останавливаясь на KeyWait g

#NoEnv  
; #Warn  ;
SendMode Input  
SetWorkingDir %A_ScriptDir%  

HK_1 = g
Gui, 1: Font, s9
Gui, 1:  Add, Hotkey, x272 y32 w120 h21, gChk vHK_1, %HK_1%
Gui, 1:  Show, w777 h446, windows
Chk:
Gui, 1:  submit, NoHide
Hotkey, ~%HK_1%, HK, on В T5 UseErrorLevel
MsgBox %HK_1%
Return

HK:
{
	MsgBox key G pressed
	KeyWait g
	MsgBox key G unpressed
}
Return

Или второй вариант, с GUI не реализуется в рамках этого языка, кроме так варварского способа, прописать в теле макроса все кнопки в качестве хоткеев,  от ~q:: до ~m:: и через набор условий(которое и будет в GUI назначением той или иной кнопки) или ничего не делать, если кнопка не назначена или перенаправлять исполнение на ту или иную подпрограмму?

4

Re: AHK: Hotkey через GUI и Hotkey через например ~I:: на удержание

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

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

5

Re: AHK: Hotkey через GUI и Hotkey через например ~I:: на удержание

#NoEnv 
SendMode Input 

~g::
{
	Send key G pressed
	KeyWait g
	Send key G unpressed
}
Return

6

Re: AHK: Hotkey через GUI и Hotkey через например ~I:: на удержание

Лучше всего устанавливать горячую клавишу по кнопке:

Gui, Add, Hotkey, vHK
Gui, Add, Button, gSetHotkey, Set Hotkey
Gui, Show

SetHotkey() {
   global HK
   GuiControlGet, HK
   if (HK = "") {
      MsgBox Горячая клавиша не установлена!
      Return
   }
   Hotkey, % HK, Label, On
}

Label() {
   hk := SubStr(A_ThisHotkey, 0)
   MsgBox,,, Клавиша нажата, .5
   KeyWait, % hk
   MsgBox,,, Клавиша отпущена, .5
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

7

Re: AHK: Hotkey через GUI и Hotkey через например ~I:: на удержание

Спасибо, пошел разбираться. Интересно, почему я ничего подобного ни в одном из примеров не видел...

8

Re: AHK: Hotkey через GUI и Hotkey через например ~I:: на удержание

Если что непонятно — спрашивайте.

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

9

Re: AHK: Hotkey через GUI и Hotkey через например ~I:: на удержание

В стандартной справке действительно порой мало примеров, например про 'KeyWait' нет инфы что можно указать переменную.

Win10x64, AHK v1.1.37.01 (Unicode 64-bit), AHK v2.0.17| AHK-Wiki | Переменные и выражения | RegEx101

10

Re: AHK: Hotkey через GUI и Hotkey через например ~I:: на удержание

Именно в статье про KeyWait нет, но в любой команде в параметрах можно использовать переменные аналогичным образом, читайте здесь.

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