О реализации...
Искомая функция fnAssigKey 
; Индексы
сSizeA := 0 ; Размер массива, расчитывается один раз при старте скрипта.
сKeys := 1 ; Название клавиши, заполняется при инициализации скрипта
сLabels := 2 ; Метка обработки клавиши
сText := 3 ; Текст описания, если он пуст (=kNone) то конец обработки массива
cExTxt := 3 ; Текст печатаемый при запуске
сHKey := 4 ; Начало HotKey клавиш
; Сокращения и сообщения
tErrOfExit := "The script has finished its work because of an error"
kWin := "Win"
kCtrl := "Ctrl"
kShift := "Shift"
kAlt := "Alt"
kNone := ""
kSps := " "
kGap := "—"
kNoLbL := "NoLabel" ; метка- заглушка, что бы не срабатывал вызов
vLenExTxt := 0 ; Длина текста печатуего при запуске
kAsKeyN := 1
kAsKeyA := 2
assigKey :=[[kWin,"#"]
,[kCtrl,"^"]
,[kShift,"+"]
,[kAlt,"!"]]
arrayKey := [[kNone,kNoLbL,kSps] ; Если 3-й элемент kNone то конец массива
,[kNone,kNoLbL,"---------------- Запуск основных приложений"]
,[kNone,"FireFox","Запуск Mozilla FireFox",kWin,"A"]
;--- много элементов... пропущено....
,[kNone,"WinBlock","Блокировка Windows",kCtrl,kWin,"F12"]
,[kNone,kNoLbL,kNone]]
;---Определение размера массива и валидности меток
i := 1
while (arrayKey[i,сText] != "")
{
if (!IsLabel(arrayKey[i, сLabels]))
{
tTitl := "Error in script generation"
tInd := "An error of array declaration is in an index = " i
tLbl := """"arrayKey[i, сLabels]"""" " label is not defined or does not exist"
tTxt := tErrOfExit
MsgBox ,0
, %tTitl%
, %tInd% `n`n %tLbl% `n`n %tTxt%
,30
ExitApp
}
vLenTMP := StrLen(arrayKey[i,cExTxt])
if (vLenTMP > vLenExTxt)
vLenExTxt := vLenTMP
i++
}
сSizeA := i
vLenExTxt += 35
;---Генерация имён клавиш и хоткеев
i := 1
loop %сSizeA%
{
j := сHKey
bfName := kNone
bfHotK := kNone
while (arrayKey[i,j])
{
bfHotK := bfHotK fnAssigKey(arrayKey[i,j])
if (j = сHKey)
bfName := arrayKey[i,j]
else
bfName := bfName kGap arrayKey[i,j]
j++
}
if (bfName)
{
arrayKey[i,сKeys] := bfName ; Пишем названия клавиш
vLabel := arrayKey[i,сLabels] ; Генерируем HotKey
HotKey %bfHotK%,%vLabel%
}
; msgbox bfName= %bfName% `n bfHotK= %bfHotK%
i++
}
;-------Конец определений
return
;---Функция возврата акронима спец. клавиш
fnAssigKey(Key)
{
global assigKey, kNone, tErrOfExit, kAsKeyN, kAsKeyA
sKey := Key
i :=1
while (assigKey[i,kAsKeyN] != kNone)
{
if (assigKey[i,kAsKeyN] = Key)
{
sKey := assigKey[i,kAsKeyA]
break
}
i++
}
return sKey
}
;---Функция возврата индекса по имени метки
fnRetIndexOfLabel(sLabel)
{
global arrayKey, сLabels, сSizeA, tErrOfExit
if (!IsLabel(sLabel))
{
MsgBox ,0
, Error
, Erroneous label name = "%sLabel%" `n`n %tErrOfExit%
,30
ExitApp
}
i := 1
loop %сSizeA%
{
if (arrayKey[i, сLabels] = sLabel)
{
vRetIndex := i
break
}
i++
}
return vRetIndex
}