Центурион пишет:Нужен любой наглядный пример с возможным решением данной задачи! Самому с ноля пока не по силам справиться! Заранее благодарен за помощь!
Исходя из выше написанного, я не понял причём тут клавиша "4", так что даю некий обобщённый пример.
1. Из скрипта для упрощения убраны определители HotKey (включение и выключение)
2. Отсутствует работа с таймерами и многопоточностью.
3. Скрипт не тестировался, а его объёмность это множество комментариев.
Конечно можно было написать проще, но как я сказал выше - "даю некий обобщённый пример"
По всем вопросам пиши отвечу исправлю поправлю
;-----Инициализация
; Скрипт не выгружается
#Persistent
; Запрет повторного запуска
#SingleInstance
; Точка выхода, смотри описание по AHK
OnExit, lExample
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; Данный вариант должен удволитворить все требования по вызову чего угодно.
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
cNone := "" ; false? нет это true! Определитель конца массива, что бы не писать индексы.
cNoLbL := "lNonempty" ; блокиратор метки, т.е. метка которая есть, но она ничего не делает
cSps := " " ; Обычный пробел - для удобства.
; Не нужный фрагмент скрипта - дань моей привычке
;----------------------------------------------------
i := 0 ; Индекс в массиве (не нужно)
MaxAr := i ; Максимальное значение массива (не нужно)
MaxArSize := 4 ; Число записей в одном элементе массива (не нужно)
;------------------------------------------------------
; Индексы внутри массива (естественно их может быть больше)
; НО!!! iText всегда должен быть последним,
; так как этот индекс определяет последовательность клавиш, а так же служит указателем конца массива
iKeys := 1 ; Базовая клавиша, индекс или что то ещё, но не (=cNone) иначе пропуск
iLabels := 2 ; Метка обработки клавиши или что то ещё
iSupply := 3 ; Резерв - можно текст или что угодно.
iText := 4 ; Последовательность посылки, если он пуст, т.е. начинается с (=cNone) то конец обработки
;----------------------Формат для одного элемента массива
; [
; ,cNone(Базовая клавиша или что то ещё)
; ,cNone(Резерв для вызова подпрограммы)
; ,cNone(Резерв) - можно текст или что угодно.
; ,cNone(Начало последовательности клавиш) - Запись через "," последний элемент должен быть (=cNone) ВСЕГДА!!!
; ]
; И так описываем то что нужно (пример записи)
arMain := [[cNone,cNone,cNone,cSps] ; Если 4-й элемент cNone то конец массива, т.к. cNone не может быть клавишей.
,["5",cNoLbL ,"Hello Wold!" ,"1","8","9",cNone]
,[cNone ,cNoLbL ,"Это не сработает, т.к. конец массива" ,cNone]]
;----------------------
; Описание закончено, программа резидентна, а её вызов можно сделать или по клавише или иным способом.
; Первый вызов мы всё же сделаем
fFirstEntry := True
Gosub lReparMain
fFirstEntry := !fFirstEntry
Return
;---->>>> Точка первичного/повторного обработки массива.
lReparMain:
i := 1
while (!arMain[i,iText] = cNone) ; Выполнять пока arMainKey[i,iText] != cNone
{
vKeysFirst := arMain[i,iKeys] ; Сохраняем клавишу или что там написано, проверку не делаю.
if (!IsLabel(arMainKey[i, iLabels]))
{
; Тут обработка если метки нет
; Выход через метку lExample
; C диагностикой, что бы знать в чём ошибка
}
else
{
vKeysLabel := arMainKey[i, iLabels] ; Сохраняем метку
}
if ((arMain[i,iSupply]) = cNone))
{
; Резерв пуст, можно выдать сообщение и выйти через метку lExample (не обязательно)
; Можно просто проигнорировать когда - arMain[i,iSupply]) = cNone
}
else
{
vSupply := arMain[i,iSupply] ; Сохоаняем резерв, для чего, для общего примера
}
; Вызов подпрограммы для заполнения массива вторичных клавиш
Gosub lSubKeys
; Внимание!!!
; Метка обхода первого вызова - lFirstEntryCall
; Следить за флагом fFirstEntry, если он True(ИСТИНА), то можно проигнорировать запуск, до полной инициализации
; А так же проверить правильнось клавиш и меток
; Тут или в подпрограмме/функции делаем то что нужно.
; vKeysFirst - Первичная клавиша или индекс или просто нужное число, т.е. что угодно.
; vKeysLabel - Mетка(уже проверенная) для вызова подпрограммы - Gosub %vKeysLabel%
; vSupply - Резерв, может использоваться например как задержка - Delay %vSupply%
; arSubKeys - Массив вторичных клавиш, как вызывать - ваше дело.
; MaxSubKeys - Число вторичных клавиш.
; Обработка сл. элемента массива.
lFirstEntryCall:
i++
}
; Массив закончился, точка повтора или выхода.
if (fFirstEntry) Return
Goto lReparMain ; И так до бесконечности, причём массив arMain можно заполнять динамически, но соблюдая правила заполнения.
; Подпрограмма заполнения массива вторичных клавиш
lSubKeys:
iSubKeys := 1
j := iText
while (arMain[i,j] != cNone)
{
arSubKeys[iSubKeys] := arMain[i,j]
iSubKeys++
}
MaxSubKeys := iSubKeys
Return
; Подпрограмма-заглушка
lNonempty:
return
; Точка выхода
lExample:
; Тут делаем то что хотим сделать перед выходом
; И выходим
ExitApp
;---------------------------------------
;Тут пишем что угодно, код, таймеры, функции, подпрограммы, etc.
"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 10 x64 Pro(AutoHotkey v1.1.37.02)