1 (изменено: guildkafra, 2019-08-21 22:13:49)

Тема: AHK: Не сохраняет переменную из GUI HotKey в бесконечном цикле

Читал предыдущие сноски и справочник по GUI HotKey, по примерам решил посмотреть что будет если использовать ее в бесконечном цикле, появились проблемы - не сохраняет переменную "vHotKey_2".
Помогите решить проблему, пожалуйста.

#SingleInstance, Force
SetWorkingDir, %A_ScriptDir%  

#Include Function.ahk

Gui, Add, Checkbox, x62 y89 w90 h30 +Center vCheckBox_2, Test
Gui, Add, Picture, x12 y89 w30 h30 , %A_ScriptDir%\Images\TestImage.png
Gui, Add, Hotkey, x172 y89 w30 h30 vHotKey_2, %HotKey_2%
Gui, Show, w253 h298, Untitled GUI
return

GuiClose:
ExitApp

$!q::
    ifWinActive, ahk_class WinTest ; Подставляем класс любого желаемого окна.
        Loop
        {    
        
		if (HotKey_2) ; Проверяем пустой ли хоткей.
			Hotkey, % HotKey_2, off, UseErrorLevel 
	
		Gui, Submit, NoHide ; Сохраняем последующие изменения в GUI.  
			Hotkey, %HotKey_2%, key, on, UseErrorLevel  ; самой метки нету, не понимаю как реализовать ее в бесконечном цикле, но в метке должна быть ниже приведенная функция.

        GuiControlGet, CheckBox_2
            If (CheckBox_2 = 1) ; Если чек-бокс не пустой, то отправляем путь к файлу, нашу выбранную клавишу и значение дилэй в функцию.
            {
				imagepath = %A_ScriptDir%\Images\TestImage.png
                Key := vHotKey_2
                Delay := 25
                CheckEffect1(ImagePath, Key, Delay) 
				; Функция с нахождением изображения и нажатием передаваемой клавиши, при определенных параметрах - работает корректно. Функция вызывается из Function.ahk
            }

        setkeydelay 0 
        #MaxHotKeysPerInterval 2500 
        }
    return
return 

2 (изменено: belyankin12, 2019-08-23 12:51:03)

Re: AHK: Не сохраняет переменную из GUI HotKey в бесконечном цикле

А почему вы считаете что метка должна быть в бесконечном цикле обязательно? GuiControlGet вам не нужен, так как submit все время обновляет все эти переменные, следовательно текущее значение Checkbox2 всегда хранится в переменной Checkbox2.

oldkey := ""
Gui, Add, Checkbox, x62 y89 w90 h30 +Center vCheckBox_2, Test
Gui, Add, Picture, x12 y89 w30 h30 , %A_ScriptDir%\Images\TestImage.png
Gui, Add, Hotkey, x172 y89 w30 h30 vHotKey_2, %HotKey_2%
Gui, Show, w253 h298, Untitled GUI
return

!1::
msgbox, Скрипт активирован
Loop {
	Gui, Submit, NoHide
	
	if (oldkey != "") and (oldkey != HotKey_2) {
		Hotkey, %oldkey%, off, UseErrorLevel
		oldkey := HotKey_2
		continue
	}
	
	if (!HotKey_2) {
		Hotkey, %HotKey_2%, off, UseErrorLevel
		oldkey := ""
		continue
	}
	
	Hotkey, %HotKey_2%, MyKey2, on, UseErrorLevel
	oldkey := HotKey_2
}
return

MyKey2:
msgbox, Текущая клавиша %A_ThisHotkey%, чекбокс: %CheckBox_2%
return

Однако по мне, гораздо проще и эффективнее сделать кнопку "Сохранить изменения", чем в бесконечном цикле отлавливать изменения в контролах.

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

3

Re: AHK: Не сохраняет переменную из GUI HotKey в бесконечном цикле

По уму вроде и не нужны бесконечные циклы и дополнительные кнопки.  Во все ЭУ, состояние которых нужно обновлять, добавляется метка перехода типа gMySubroutine. А в этой подпрограмме уже Gui, Submit, NoHide.

4

Re: AHK: Не сохраняет переменную из GUI HotKey в бесконечном цикле

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

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

5 (изменено: guildkafra, 2019-08-24 13:24:58)

Re: AHK: Не сохраняет переменную из GUI HotKey в бесконечном цикле

belyankin12 пишет:

А почему вы считаете что метка должна быть в бесконечном цикле обязательно? GuiControlGet вам не нужен, так как submit все время обновляет все эти переменные, следовательно текущее значение Checkbox2 всегда хранится в переменной Checkbox2.

oldkey := ""
Gui, Add, Checkbox, x62 y89 w90 h30 +Center vCheckBox_2, Test
Gui, Add, Picture, x12 y89 w30 h30 , %A_ScriptDir%\Images\TestImage.png
Gui, Add, Hotkey, x172 y89 w30 h30 vHotKey_2, %HotKey_2%
Gui, Show, w253 h298, Untitled GUI
return

!1::
msgbox, Скрипт активирован
Loop {
	Gui, Submit, NoHide
	
	if (oldkey != "") and (oldkey != HotKey_2) {
		Hotkey, %oldkey%, off, UseErrorLevel
		oldkey := HotKey_2
		continue
	}
	
	if (!HotKey_2) {
		Hotkey, %HotKey_2%, off, UseErrorLevel
		oldkey := ""
		continue
	}
	
	Hotkey, %HotKey_2%, MyKey2, on, UseErrorLevel ; Начало работы назначенного HotKey
	oldkey := HotKey_2
}
return

MyKey2:
msgbox, Текущая клавиша %A_ThisHotkey%, чекбокс: %CheckBox_2%
return

Однако по мне, гораздо проще и эффективнее сделать кнопку "Сохранить изменения", чем в бесконечном цикле отлавливать изменения в контролах.

Вставляю свою функцию после включения назначенного HotKey-я, передаваемое значение HotKey_2 в функцию - не сохраняется.
Не знаю что делать дальше.

6 (изменено: guildkafra, 2019-08-24 17:32:57)

Re: AHK: Не сохраняет переменную из GUI HotKey в бесконечном цикле

ypppu В данном случае, в бесконечном цикле проверяется функция по поиску изображения на экране, HotKey просто необходим для того чтобы передать назначенную клавишу в функцию, но вот только проблема в том, что он в переменную не сохраняет этот самый назначенный HotKey и в функции, за счет этого, вместо нажатия клавиши - пустота

Должно работать так, что вызывается GUI, я используя Gui HotKey - назначаю клавишу и она сама нажимается (в бесконечном цикле) при выполнении функции(в функцию передается значение назначенной клавиши). Ну как-то так должно быть, но вот только он не передает значение в функцию :с

7

Re: AHK: Не сохраняет переменную из GUI HotKey в бесконечном цикле

guildkafra, Вы знаете, что такое метка перехода для элемента управления?

8 (изменено: guildkafra, 2019-08-24 14:30:30)

Re: AHK: Не сохраняет переменную из GUI HotKey в бесконечном цикле

ypppu Если что-то меняется в ЭУ, то переходят по метке, ну и дальше то что?
Я уже выше описал проблему, причем тут метки ЭУ (я пока не вижу ее применения в моей проблеме)
В частности по метке у HotKey выполняется действие при нажатии HotKey, но мне то нужно просто значение вытащить из него (значение назначенной клавиши), которое не вытаскивается в функцию.

9

Re: AHK: Не сохраняет переменную из GUI HotKey в бесконечном цикле

Тогда объясните ещё раз. Есть переменная HotKey_2, в которой хранится назначенная горячая клавиша. В GUI есть элемент управления Hotkey, который предназначен для изменения значение переменной vHotKey_2. В окне GUI Вы ставите фокус на э. у. Hotkey, затем нажимаете нужную клавишу и её название появляется в э. у. Hotkey. Но при этом она не сохраняется в переменную vHotKey_2.
Я правильно понял?

10

Re: AHK: Не сохраняет переменную из GUI HotKey в бесконечном цикле

Да, все верно, она где-то теряется в метке (но я не уверен).
Возьмем в пример выше представленный код от belyankin12.
Все работает отлично, при переходе на метку вызывается MsgBox где говорится что за клавиша была нажата и что в CheckBox находится.
Немного поменяем его, по метке будет сохранятся значение HotKey_2 и дальше вызываем функцию, которую использует эту переменную. (Вот тут проблема - в функцию попадает пустота)

11

Re: AHK: Не сохраняет переменную из GUI HotKey в бесконечном цикле

guildkafra, прочитайте здесь про gMySubroutine.

12 (изменено: guildkafra, 2019-08-24 17:38:02)

Re: AHK: Не сохраняет переменную из GUI HotKey в бесконечном цикле

Спасибо большое, вы были правы, метка помогла с данной проблемой все работает отлично с:
Простите, что до меня долго доходило :DD