AHK在不使用#Include Subroutines.ahk的情况下加载热字符串

时间:2017-02-08 11:01:11

标签: autohotkey filereader

我有一个名为subroutines.ahk的txt文件,下面是hotstring。

::btw::Thank you for the help

我知道如果我想从另一个脚本运行我的hotstring我只需要使用以下命令将其包含在该脚本中:

#include subroutines.ahk

但我不想这样做而是从另一个脚本中我想循环读取子程序.ahk的内容并以这种方式加载hotstring变量。

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

我非常感谢您对如何将我的hotstring变量加载到另一个脚本中的帮助。

我打算在subroutines.ahk中对hotsrings进行编码,然后在第二个程序中解码subroutines.ahk的内容并将其加载到内存中。 在上面的例子中虽然我首先想弄清楚如何循环读取txt文件并从那里运行热字符串。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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”时,会出现“alpha”