1

Тема: AHK: Динамический код

Не знаю точно как это называется, возможно уже и были подобные темы. Можно ли сделать что-то подобное:

Пользователь вводит в поле : MsgBox, Test message
В поле можно попробовать ввести любой код, который захочет.
И он подставляется в сам скрипт и пробует выполнится.


Input_text := "MsgBox, Test message"

F1::
	Input_text
return

Это похоже на функции, только неизвестен сам контекст. Может есть какие-то мысли или даже уже есть что-то подобное ?

GD

2

Re: AHK: Динамический код

В обычном AHK код из переменной можно выполнить, только запустив дополнительный процесс. Проще всего так:

text := "MsgBox, message from the new script"
ExecScript(text)
MsgBox, main script

ExecScript(script, exePath := "") {
   (!exePath && exePath := A_AhkPath)
   shell := ComObjCreate("WScript.Shell")
   exec := shell.Exec(exePath . " *")
   exec.StdIn.Write(script)
   exec.StdIn.Close()
   return exec.ProcessID
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

3

Re: AHK: Динамический код

Этот вопрос неоднократно поднимался. Скрипт не может самому себе динамически ("на лету") изменять код. Но скрипт может отредактировать свой файл и перезапустить себя. Однако, при попытках разобраться, зачем автору это нужно, выяснялось, что это не очень то и нужно. Стоит хорошо подумать, прежде чем копать в этом направлении.

4

Re: AHK: Динамический код

ypppu Я и сам пока не знаю надо ли оно мне, есть ситуация. Купил .dll библиотеки и класс для их управления, за 200у.е. Вставил всё в скрипт. Получается если скинуть другому человеку скрипт, то для корректной работы автоматически скинуться и библиотеки, они же подключены локально. Могу ошибаться, но автор не рассчитывал на такое распространение.
Думал закинуть библиотеки на серв и чтобы скипт удаленно к ним подключался. Мне ответили, что такое возможно, только если в .dll это предусмотрено (а это не предусмотрено). Я подумал может можно тогда сам класс управления этими библиотеками и команды в скрипте, передавать в переменную с сервера по запросу, через WinHTTPRequest, а скрипт бы уже выполнял команды полученные из переменной. 
Не знаю есть ли в этом смысл, но что-то придумать надо.

GD

5

Re: AHK: Динамический код

Не легче ли упаковать всё необходимое в скрипт и затем если нужно извлекать да использовать?

Win10x64, AHK v1.1.37.01 (Unicode 64-bit) | AHK-Wiki | Переменные и выражения | RegEx101

6

Re: AHK: Динамический код

Выполнять команды из переменной невозможно.

7

Re: AHK: Динамический код

Я имею в виду извлекать как файл. В данном случае *.dll.

Win10x64, AHK v1.1.37.01 (Unicode 64-bit) | AHK-Wiki | Переменные и выражения | RegEx101

8

Re: AHK: Динамический код

Ну, можно ещё скачивать библиотеки, и работать с ними из памяти, не сохраняя в файл.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

9

Re: AHK: Динамический код

teadrinker А про это можно где-то почитать ? Не совсем понимаю о чём речь.

GD

10

Re: AHK: Динамический код

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

Win10x64, AHK v1.1.37.01 (Unicode 64-bit) | AHK-Wiki | Переменные и выражения | RegEx101

11

Re: AHK: Динамический код

Нашёл только это. Там показано, как из буфера, в который считана AutoHotkey.dll запускать функции из неё.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

12

Re: AHK: Динамический код

Спасибо.

GD