2017-02-08 2 views
1

У меня есть txt-файл с именем подпрограммы.ahk в нем находится нижняя горячая строка.AHK Load hotstrings без использования #Include Subroutines.ahk

::btw::Thank you for the help 

Я знаю, что если я хочу, чтобы запустить свою строку автозамены из другого сценария все, что я должен сделать, это включить его в этом сценарии с помощью:

#include subroutines.ahk 

Но я не хочу, чтобы сделать это вместо другого сценария Я хочу, чтобы Loop читал содержимое подпрограмм.ahk и загружал переменные hotstring таким образом.

Loop, read,subroutines.ahk 
{ 
    Loop, parse, A_LoopReadLine, %A_Tab% 
{ 
    MsgBox, Field number %A_Index% is %A_LoopField%. 
} 
} 

Я бы очень признателен за вашу помощь в том, как я могу загрузить переменные hotstring в другой скрипт таким образом.

Я планирую кодировать hotsrings в подпрограммах.ahk и декодировать содержимое подпрограмм.ahk во второй программе и загрузить его в память. В приведенном выше примере, хотя я сначала пытаюсь выяснить, как я могу зацикливать чтение txt-файла и запускать горячие строки оттуда.

ответ

1

Демонстрирует использование горячих клавиш, отображающих для динамических значений

; Replace hash values with whatever method you use to decrypt your hotstrings 
decrypted := {abc: "alpha", def: "beta"} 

::abc:: 
    Send % decrypted["abc"] 
    return 
::def:: 
    Send % decrypted["def"] 
    return 

При вводе "ABC", появляется "альфа" вместо

1

# директивы обрабатываются только один раз при запуске скрипта. Чтобы обойти это ограничение, вы можете использовать reload для выполнения динамически сгенерированного скрипта, который включает в себя директивы #.

Пример кода:

Когда F1 нажата, используйте содержимое "subroutines.ahk" для создания и выполнения кода, который использует # директивы:

F1:: reload_hotstrings() 

#Include temp.ahk 

reload_hotstrings() 
{ 
    FileDelete temp.ahk 
    loop read, subroutines.ahk 
    { 
    MsgBox Hotstring number %A_Index% is %A_LoopReadLine%. 
    FileAppend %A_LoopReadLine%`n, temp.ahk 
    } 
    reload 
} 

В качестве альтернативы, если вы хотите автоматически генерирует код горячих клавиш при каждом запуске autohotkey:

Я использую source.dat для вашего subroutines.ahk файла

Пример кода:

FileGetTime source_time, source.dat 
FileGetTime compiled_time, compiled.ahk 
; calculate time difference between source and compiled files 
EnvSub source_time, %compiled_time%, Seconds 

; compile and run if source newer 
if source_time > 0 
{ 
    FileDelete compiled.ahk 
    loop read, source.dat 
    { 
    FileAppend %A_LoopReadLine%`n, compiled.ahk 
    } 
    reload 
} 

#Include compiled.ahk 
+0

Эта хорошо, за исключением того, что он возвращается к добавлению к #Include compiled.ahk и перезагружает его ... Я пытаюсь избежать этого, потому что у меня будет source.dat, что я s зашифрован, когда я загружаю источник, что я буду, чем расшифровать его ... вот проблема, когда я расшифровываю его. Я просто хочу загрузить его и запустить, я не хочу сохранять дешифрованный контент на диске. – user3548161

+0

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

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