2013-09-12 3 views
1

Я хочу создать скрипт, который позволяет мне отправлять строки из массива, один за другим, при нажатии горячей клавиши. (Нажмите один раз, и первая строка будет отправлена, нажмите еще раз, а вторая строка будет отправлена ​​и т. Д.), Но мое (пока ограниченное) понимание AutoHotKey не дает мне возможности.AHK Горячие клавиши не допускаются внутри функции

Это то, что я до сих пор (»заимствованы» бит на constructiong массив из АХК - сайт)

;Write to the array: 
ArrayCount = 0 
Loop, Read, C:\My_little_dir\test.txt{ ;test.txt contains 6-digit numbers separated only by ENTER/newline. 
    ArrayCount += 1 ; Keep track of how many items are in the array. 
    Arr_Bookings%ArrayCount% := A_LoopReadLine ; Store this line in the next array element. 
} 

element=1 

Change(direction, element, ArrayCount){ 
    if (direction = "next"){ 
     ;incrementing from the last element gets us back to the first element 
     if (element = %ArrayCount%) 
      {element=1} 
     else 
      {element+=1} 
    } 
    else{ 
     if (direction = "previous"){ 
      ;decrementing from the first element gets us back to the last element 
      if (element=0) 
      {element=%ArrayCount%} 
     else 
      {element-=1} 
     } 
    } 
Return Arr_Bookings%element% 
} 

#N::Send % Change(next,element, ArrayCount) 
#B::Send % Change(previous,element, ArrayCount) 

Однако, когда я запускаю его, я получаю ErrorMessage:

Line Text: #N::Send Change(next,element, ArrayCount)

Error:Hotkeys/hotstrings are not allowed inside functions.

Я проверял снова и снова за испорченные фигурные скобки, но безрезультатно (пробелы не имеют никакого значения ... правильно?).

Любые идеи, что вызывает это?

Кроме того, если вы видите что-то еще ужасное в этом коде, не стесняйтесь упоминать об этом.

Заранее благодарен! /Leo

ответ

0

Autohotkey не любит ваш стиль отступа. Используйте Allman style.

i.e поместите каждую скобку в свою линию и не используйте ее, если вам не нужно; например:

if (element = %ArrayCount%) 
    {element=1} 
else 
    {element+=1} 

брекеты здесь совершенно лишние.

я обычно не делать этого, но так как у меня уже есть код, вот ваш раскатали код:

;Write to the array: 
ArrayCount = 0 
Loop, Read, C:\My_little_dir\test.txt 
{ ;test.txt contains 6-digit numbers separated only by ENTER/newline. 
    ArrayCount += 1 ; Keep track of how many items are in the array. 
    Arr_Bookings%ArrayCount% := A_LoopReadLine ; Store this line in the next array element. 
} 

element=1 

Change(direction, element, ArrayCount) 
{ 
    if (direction = "next") 
    { 
     ;incrementing from the last element gets us back to the first element 
     if (element = %ArrayCount%) 
      { 
      element=1 
      } 
     else 
      { 
      element+=1 
      } 
    } 
    else 
    { 
     if (direction = "previous") 
     { 
      ;decrementing from the first element gets us back to the last element 
      if (element=0) 
      { 
      element=%ArrayCount% 
      } 
     else 
      { 
      element-=1 
      } 
     } 
    } 
Return Arr_Bookings%element% 
} 

#N::Send Change(next,element, ArrayCount) 
#B::Send Change(previous,element, ArrayCount) 
+0

Исходя из Python, я имел ограниченный опыт работы с этими различными типами кронштейнов. Спасибо за указатель! – Leo308

Смежные вопросы