1

Тема: AHK: Команда HotKey и три клавиши

Работает      - HotKey  LWin & a, NoLabel
Не работает - HotKey  LCtrl & LWin & a, NoLabel
Не работает - HotKey  LWin & LCtrl & a, NoLabel

Как записать что бы срабатывали три клавиши, не используя акронимы, в команде Hotkey?

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
Для NotePad++(подсветка синтаксиса, автозавершение и плагины(AutoSave и RunMe).
OS Windows 10 x64 Pro

2

Re: AHK: Команда HotKey и три клавиши

http://forum.script-coding.com/viewtopi … 239#p56239

3

Re: AHK: Команда HotKey и три клавиши

Немного не то, т.к. у меня динамическое определение, а по ссылке статическое.

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
Для NotePad++(подсветка синтаксиса, автозавершение и плагины(AutoSave и RunMe).
OS Windows 10 x64 Pro

4

Re: AHK: Команда HotKey и три клавиши

Я решил задачу, вот так

kWin := "Win" 
kCtrl := "Ctrl"
kShift := "Shift"
kAlt := "Alt"

assigKey :=[[kWin,"#"]
           ,[kCtrl,"^"]
           ,[kShift,"+"]
           ,[kAlt,"!"]]
C := assigKey[2,2]
W := assigKey[1,2]
Hotkey, %C%%W%A, NoLabel

Правда хотел иначе, но вроде верно.

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
Для NotePad++(подсветка синтаксиса, автозавершение и плагины(AutoSave и RunMe).
OS Windows 10 x64 Pro

5 (изменено: creature.ws, 2012-04-12 00:35:14)

Re: AHK: Команда HotKey и три клавиши

Можно использовать функцию, получающую в качестве параметра «LWin|LAtlt|RCtrl»  и возвращающую «#|!|^»

6 (изменено: Indomito, 2012-04-12 12:43:12)

Re: AHK: Команда HotKey и три клавиши

creature.ws пишет:

Можно использовать функцию, получающую в качестве параметра «LWin|LAtlt|RCtrl»  и возвращающую «#|!|^»

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

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
Для NotePad++(подсветка синтаксиса, автозавершение и плагины(AutoSave и RunMe).
OS Windows 10 x64 Pro

7 (изменено: Indomito, 2012-04-14 06:15:38)

Re: AHK: Команда HotKey и три клавиши

О реализации... Искомая функция 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
}
"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
Для NotePad++(подсветка синтаксиса, автозавершение и плагины(AutoSave и RunMe).
OS Windows 10 x64 Pro