Тема: AHK: Исполнение кода из стороннего файла
Добрый день.
Возможно ли в AHK исполнение кода из стороннего файла? (Имеется ввиду чтение некоторого кода из файла и исполнение его в рабочем (если возможно, то в скомпилированном) скрипте).
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Добрый день.
Возможно ли в AHK исполнение кода из стороннего файла? (Имеется ввиду чтение некоторого кода из файла и исполнение его в рабочем (если возможно, то в скомпилированном) скрипте).
Да, возможно через AutoHotkey.dll, гуглите.
Спасибо, щас попробую)
teadrinker
! Проблему решил, нужно было просто вынести LoadLibrary за цикл !
При запуске этого кода на AHK_H выдает ошибки (Exit code: 3221226525, Exit code: 3221225477, Exit code: 3221226356):
#SingleInstance Force
Loop {
FileRead, Read, test.txt
if RegExMatch(Read, "123") {
dllpath := A_WorkingDir . "\AutoHotkey.dll"
DllCall("LoadLibrary", "Str", dllpath)
Code =
(
#SingleInstance, Force
Function_Run() {
SoundBeep, 500
}
Function_Run()
While DllCall(dllpath "\ahkReady") {
Sleep, 100
}
)
dll := DllCall(dllpath "\ahktextdll","Str",Code,"Str","","Str","","CDecl")
VarSetCapacity(dll, 0)
FileDelete, test.txt
continue
}
}
-::
FileAppend, 123, test.txt
return
Не знаете, в чем может быть дело? (ошибка появляется после 2-5 запуска нового потока)
Я уже не пишу на AHK v1, лень разбираться.
Должно быть так:
script =
(
#NoTrayIcon
counter := 0
Loop 30 {
ToolTip `% ++counter
Sleep 100
}
)
; битность dll должна соответствовать битности скрипта, в котором она загружается
dllPath := A_ScriptDir . "\AutoHotkey.dll"
if !DllCall("LoadLibrary", "Str", dllpath) {
MsgBox Не удалось загрузить AutoHotkey.dll
}
DllCall(dllpath . "\ahktextdll", "Str", script, "Str", "", "CDecl")
While DllCall(dllpath . "\ahkReady") {
Sleep 100
}
Этот цикл
While DllCall(dllpath . "\ahkReady") {
Sleep 100
}
нужен только для того, чтобы основной скрипт не завершился раньше, чем тот, который запускается через dll. Вместо этого можно просто добавить в начало #Persistent:
#Persistent
script =
(
#NoTrayIcon
counter := 0
Loop 30 {
ToolTip `% ++counter
Sleep 100
}
)
; битность dll должна соответствовать битности скрипта, в котором она загружается
dllPath := A_ScriptDir . "\AutoHotkey.dll"
if !DllCall("LoadLibrary", "Str", dllpath) {
MsgBox Не удалось загрузить AutoHotkey.dll
}
DllCall(dllpath . "\ahktextdll", "Str", script, "Str", "", "CDecl")
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться