1 (изменено: Diman_Express, 2017-12-13 20:51:15)

Тема: AHK: Выполнение переменного кода

Название темы могло повергнуть вас в шок, но ближе к делу.
В моей светлой голове появились проблески годной идеи: что если скачивать файл с сервера (текстовик), где будет код. Далее скрипт должен прочитать его и выполнить то, что там написано (на AHK естественно).

FileRead, scriptcoding, Script.txt
Выполнить все, что в Script.txt

Script.txt содержит: msgbox, Script-Coding

Какой может быть способ реализации? Конечно же просто %scriptcoding% в пустую строку не вставишь, но хотелось бы узнать, возможно ли сделать что-то подобное.

2

Re: AHK: Выполнение переменного кода

Измените расширение на .ahk и запустите командой Run.

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

3

Re: AHK: Выполнение переменного кода

teadrinker, так у тех, у кого нет AHK на компьютере, не запустится файл

4

Re: AHK: Выполнение переменного кода

teadrinker есть ли какой-нибудь вариант скомпилировать скрипт на компьютере у человека, у которого нет AHK?

5

Re: AHK: Выполнение переменного кода

Не" компилируйте". Скачанный файл с кодом запускаете так:

Run % A_AhkPath " " A_ScriptDir "\my.ahk", % A_ScriptDir

6

Re: AHK: Выполнение переменного кода

teadrinker пишет:

Измените расширение на .ahk

А это зачем?

stealzy
Запустить скрипт с параметром в виде пути к файлу, а как это выполнит my.ahk.
Или это про то чтобы перед этим распаковать из экзешника AutoHotkey.exe, почему тогда A_AhkPath.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

7

Re: AHK: Выполнение переменного кода

Создайте для удобства отдельную функцию.
В неё будете передавать параметры:

  • путь скрипта(для компиляции)

  • путь вывода(для готового exe)

В самой функции сделайте проверку на наличие ahk.


if(установлен)
	Компилируем из папки ahk
else ;не установлен
	Скачиваем из интернета файл-компилятор + компилируем
	;(думаю одного компилятора не хватит и поэтому надо будет прихватить вместе с ним несколько dll-шников)

8

Re: AHK: Выполнение переменного кода

serzh82saratov пишет:

А это зачем?

В смысле, зачем? Чтобы проще было запустить командой Run. Я же не знал, что AHK не установлен. В этом случае без FileInstall не обойтись, т. к. с помощью своего собственного интерпретатора скомпилированный скрипт другой код запустить не сможет.

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

9 (изменено: stealzy, 2017-12-15 13:20:42)

Re: AHK: Выполнение переменного кода

MandarinKa02 пишет:

Скачиваем из интернета файл-компилятор

teadrinker пишет:

без FileInstall не обойтись

https://i.imgflip.com/2/db8ny.jpg
Все таки еще раз спрошу, зачем "компилировать"?
Мою ссылку выше проигнорировали, сделаю большую копипасту.

Интерпретатор AutoHotkey при запуске ищет одноименный с ним .ahk в своей директории и если находит, выполняет его.
Интерпретатор можно взять в папке, где установлен AutoHotkey (C:\Program Files\AutoHotkey\AutoHotkey.exe).
Интерпретатор можно переименовать как вам угодно, главное чтобы у .ahk скрипта было такое же имя.
Иконку можно изменить с помощью Menu Tray, Icon, MyScript.ico.
Примерное содержимое папки с переименованным интерпретатором и скриптом:

..
.git
MyScript.ahk     —> это ваш скрипт
MyScript.exe    (да, да, это переименованный AutoHotkey.exe, рекомендую юникод 32-битную версию AutoHotkeyU32.exe)
MyScript.ico
MyScript.ini
MyScript.png

Пользователь кликает по файлу MyScript.exe, а в результате исполняется MyScript.ahk.

Плюсы такого подхода:
• Избавление от возни с "компилированием". Когда вы хотите поделиться с кем-то скриптом, просто архивируете папку и отправляете ее.
• Легкое обновление. Чтобы обновить скрипт, не нужно передавать/скачивать мегабайты интерпретатора и FileInstall.
• Нет проблем с антивирусами. На любой "скомпилированный" скрипт будет десяток ложных детектов, что легко проверить на VirusTotal.
• Из основного скрипта можно выполнить произвольный файл ahk: Run % A_AhkPath " " A_ScriptDir "\SomeScript.ahk", % A_ScriptDir.

Минусы:
• Два файла вместо одного и еще, возможно, файл иконки.
Но если используется #FileInstall, то уже без разницы, потому что и так будет лежать в отдельной папке. Вас ведь не напрягает что установленные в Program Files программы состоят не из одного файла? Да и портативные, состоящие из одного файла весьма редки, будет как минимум файл настроек (.ini). Запускать скрипты также можно ярлыками, на флешке - лаунчерами, нужно просто передать интерпретатору в параметрах путь к скрипту. Ярлык можно создать при первом запуске, т.е. первый раз пользователь запускает из папки, затем по созданному скриптом ярлыку.

If Not FileExist(A_ScriptDir "\MyScript.ini") ; MyScript.ini создается после первого запуска
    FileCreateShortcut, "%A_AHKPath%", %A_Desktop%\MyScript.lnk, "%A_ScriptDir%", "%A_ScriptFullPath%",, %A_ScriptDir%\resource\MyScript.ico

https://s8.hostingkartinok.com/uploads/images/2017/12/ab9301858cf39a5fd71521897c5da923.gif

Но если все же нужно выполнять произвольный код (а-ля eval) из скомпилированного скрипта, то "компилируйте" с помощью ahk_h — он полностью совместимым с обычным ahk кодом, но в нем есть дополнительные возможности, одна из которых позволяет выполнять произвольный код из переменной (файла, и т.п.).

10 (изменено: vlad1986, 2017-12-14 09:29:39)

Re: AHK: Выполнение переменного кода

Diman_Express пишет:

teadrinker есть ли какой-нибудь вариант скомпилировать скрипт на компьютере у человека, у которого нет AHK?

У меня на работе не установлен AHK, скрипты запускаю скомпилированые в exe.

А чтобы скомпилировать скрипт в exe использую Portable версию AHK, есть в сети, компилятор в exe там рабочий, с флешки запускается нормально.

11 (изменено: stealzy, 2017-12-14 09:33:40)

Re: AHK: Выполнение переменного кода

vlad1986, не нужно ничего устанавливать, не нужно ничего "компилировать" — вот что я предлагаю.

12 (изменено: vlad1986, 2017-12-14 09:41:28)

Re: AHK: Выполнение переменного кода

stealzy

Если только 1 скрипт, то я согласен. Но у меня около десятка скриптов под разные задачи. Хранить скрипты в exe в этом случае мне удобнее.

13 (изменено: stealzy, 2017-12-14 10:24:59)

Re: AHK: Выполнение переменного кода

vlad1986
В итоге у вас
1) один и тот же интерпретатор дублируется десяток раз внутри .ехе,
2) вы не можете просто изменить код и запустить, вам надо "компилировать".
По мне удобнее один раз сделать 10 жестких ссылок с соответствующими именами на один файл интерпретатора AutoHotkey.

14 (изменено: vlad1986, 2017-12-14 18:12:49)

Re: AHK: Выполнение переменного кода

stealzy пишет:

По мне удобнее один раз сделать 10 жестких ссылок с соответствующими именами на один файл интерпретатора AutoHotkey.

В свойствах ярлыка?

15

Re: AHK: Выполнение переменного кода

Я так понимаю речь про обычный ярлык. В объект просто пишем путь к "AutoHotkey.ехе" "путь к скрипту".

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

16 (изменено: vlad1986, 2017-12-14 18:17:03)

Re: AHK: Выполнение переменного кода

Спасибо за полезную информацию, надо будет попробовать.

17

Re: AHK: Выполнение переменного кода

Ярлыки — это инструментарий Проводника, а жёсткие ссылки — фишка файловой системы.

18

Re: AHK: Выполнение переменного кода

Интересно.
А как их использовать в данном контексте?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

19 (изменено: stealzy, 2017-12-14 21:41:52)

Re: AHK: Выполнение переменного кода

Поскольку речь про флешку, ярлыки работать не будут из-за разного имени диска флешки.
Жесткая ссылка - то же самое, что скопировать файл на тот же диск с другим именем, просто ссылка не будет занимать дополнительно места на диске.
Создать жесткую ссылку можно с помощью консольной утилиты mklink /J, либо в файловых менеджерах Far или Total Commander по Alt+F6.

20

Re: AHK: Выполнение переменного кода

stealzy пишет:

Поскольку речь про флешку, ярлыки работать не будут из-за разного имени диска флешки.

Но ярлык ведь можно и с относительным путём сделать.
А про жесткую ссылку мне не ясно, что на что ссылатся должно.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

21

Re: AHK: Выполнение переменного кода

serzh82saratov, если можно пример ярлыка с относительным путем к интерпретатору и относительным параметром к файлу ahk.

22 (изменено: serzh82saratov, 2017-12-14 23:24:49)

Re: AHK: Выполнение переменного кода

Про параметр не знаю.
Но зачем утилиты, есть cmd, vb, js...

Вот файл js:


var str = "\"Новая папка\\AutoHotkey.exe\" \"Script - копия.ahk\"";

// WScript.Echo(str);
sh = new ActiveXObject("WScript.Shell");
sh.Run(str);

Так не проще?

Или так, чтобы помнить только про экранирование слэша:


var script = "Script - копия.ahk";
var ahk = "Новая папка\\AutoHotkey.exe";

var path = "\"" + ahk + "\" \"" + script + "\""
// WScript.Echo(path);
sh = new ActiveXObject("WScript.Shell");
sh.Run(path);
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

23 (изменено: YMP, 2017-12-14 23:25:30)

Re: AHK: Выполнение переменного кода

serzh82saratov пишет:

А про жесткую ссылку мне не ясно, что на что ссылатся должно.

На файл ссылается запись в каталоге, в котором этот файл "находится". Обычно файл прописан в каком-то одном каталоге. Но в принципе можно прописать и в нескольких, тогда файл будет лежать в нескольких каталогах одновременно, физически оставаясь в одном экземпляре. Или в одном каталоге сделать несколько записей с разными именами для файла.

Т.е. это альтернатива копированию файла. Удобно, например, если файл периодически обновляется, т.к. обновлённый файл не надо копировать во все папки, где этот файл используется.

24

Re: AHK: Выполнение переменного кода

Спасибо, это я уже прочитал в вики. Я не пойму как это материализуется.
Например как постом выше, создаём файл .js, пишем относительно него пути, запускаем, то что в %ahk% запускается с параметром что в %script%.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

25 (изменено: stealzy, 2017-12-15 01:31:10)

Re: AHK: Выполнение переменного кода

serzh82saratov пишет:

как это материализуется

x := [1]
y := x ; аналогия создания жесткой ссылки
MsgBox % x[1] "`n" y[1]
x[1] := 42
MsgBox % x[1] "`n" y[1]

Хотел изобразить с помощью переменных, указывающих на один адрес в памяти, но я не очень понимаю как работать с указателями в ahk:

x := 123
px := &x
y := *px
MsgBox % x "`n" y

26

Re: AHK: Выполнение переменного кода

Это что?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

27

Re: AHK: Выполнение переменного кода

Как непосредственно это помогает запустить файл с флэшки?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

28

Re: AHK: Выполнение переменного кода

serzh82saratov пишет:

Спасибо, это я уже прочитал в вики. Я не пойму как это материализуется.
Например как постом выше, создаём файл .js, пишем относительно него пути, запускаем, то что в %ahk% запускается с параметром что в %script%.

Прописываем один файл AutoHotkey.exe несколько раз под разными именами и для каждого имени создаём соответствующий файл АНК, который автоматически будет выполняться при запуске AutoHotkey.exe через соответствующее имя. Так я понял замысел.

29

Re: AHK: Выполнение переменного кода

По моему скрипт js проще, удобнее и нагляднее, но...

Можно всё таки увидеть, каким кодом это всё делается, а не "y := x".

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

30

Re: AHK: Выполнение переменного кода

Думаю можно c:
https://msdn.microsoft.com/en-us/librar … s.85).aspx

31

Re: AHK: Выполнение переменного кода

Я это находил, но хотелось бы с пояснениями.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

32

Re: AHK: Выполнение переменного кода

Задача-то в конечном итоге какая? И исходная ситуация? Я уже потерял нить, если честно. Если сначала запускается компилированный скрипт, а в его папке также лежит AutoHotkey.exe, то для чего JScript нужен? Или в папке лежат текстовый скрипт и AutoHotkey.exe? А там в чём проблема?

33 (изменено: serzh82saratov, 2017-12-15 12:44:11)

Re: AHK: Выполнение переменного кода

Есть в папке на флешке файл AutoHotkey.exe, и несколько файлов анк, например в другой папке на этой же флешке .
Надо из корня этой флешки запускать файлы анк, по аналогии как запуск с ярлыка.
Само собой речь про то что AutoHotkey не установлен.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

34 (изменено: Malcev, 2017-12-15 12:46:35)

Re: AHK: Выполнение переменного кода

DllCall("CreateHardLink", Str, "1_link.txt", Str, "1.txt", Int, 0)

35 (изменено: YMP, 2017-12-15 12:48:07)

Re: AHK: Выполнение переменного кода

serzh82saratov пишет:

Есть в папке на флешке файл AutoHotkey.exe, и несколько файлов анк, например в другой папке на этой же флешке .
Надо из корня этой флешки запускать файлы анк, по аналогии как запуск с ярлыка.
Само собой речь про то что AutoHotkey не установлен.

Ну так поместить в корень скомпилированный скрипт, а он может потом запускать остальные через AutoHotkey.exe. Или тут где-то подвох?

36

Re: AHK: Выполнение переменного кода

YMP
Так я же говорю, хочу чтобы они были в разных папках.
Malcev
Появился файл, что с ним делать?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

37

Re: AHK: Выполнение переменного кода

Malcev
Кстати в свойствах папки размер указывается будто файла уже два.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

38

Re: AHK: Выполнение переменного кода

На самом деле он один.
Делаешь хардлинки autohotkey.exe с нужными названиями, такими же как названия скриптов.
Только смысл этим всем заниматься?
Из-за экономии менее чем в 1 mb на 1 скрипт?

39

Re: AHK: Выполнение переменного кода

Malcev пишет:

нужными названиями, такими же как названия скриптов.

Так скрипты в папке, а запускать хочу с корня.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

40 (изменено: serzh82saratov, 2017-12-15 13:04:57)

Re: AHK: Выполнение переменного кода

Malcev пишет:

Из-за экономии менее чем в 1 mb на 1 скрипт?

В первую очередь для простого редактирования.
Ну и если скриптов много, то и это тоже.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

41

Re: AHK: Выполнение переменного кода

serzh82saratov пишет:

Так я же говорю, хочу чтобы они были в разных папках.

Кто они? Подробнее можно расписать диспозицию?

42 (изменено: Malcev, 2017-12-15 13:16:24)

Re: AHK: Выполнение переменного кода

serzh82saratov пишет:

Так скрипты в папке, а запускать хочу с корня.

Тогда тут нужно применять Directory Junction.
Используй либо утилиту, что порекоммендовал stealzy

mklink /J

Либо можно самому написать, но там думаю непросто всё:
https://msdn.microsoft.com/en-us/librar … s.85).aspx

43

Re: AHK: Выполнение переменного кода

serzh82saratov, ну пишите свой лаунчер на vbs, js, bat, ahk, чем угодно, или скачиваете любой из десятков представленных в сети.

44 (изменено: serzh82saratov, 2017-12-15 13:20:58)

Re: AHK: Выполнение переменного кода

YMP

Они - Скрипты.
Он - Скрипт, здесь:

%DISK%:\папка 1\папка 2\Script.ahk

Запускать его хочу отсюда:

%DISK%:\
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

45

Re: AHK: Выполнение переменного кода

Malcev пишет:

но там думаю непросто всё

И я про то же.

stealzy пишет:

serzh82saratov, ну пишите свой лаунчер на vbs, js

Вот так здрасте, а это что было предложено?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

46

Re: AHK: Выполнение переменного кода

serzh82saratov пишет:

YMP

Они - Скрипты.
Он - Скрипт, здесь:

%DISK%:\папка 1\папка 2\Script.ahk

Запускать его хочу отсюда:

%DISK%:\

Ну так положите туда скомпилированный скрипт и в нём выбирайте, что запускать. А то ведь и JS с  VBS'ом могут быть запрещены на компе.

47

Re: AHK: Выполнение переменного кода

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

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

48

Re: AHK: Выполнение переменного кода

Может, но это один риск. А если использовать ещё и JS, то два.

49

Re: AHK: Выполнение переменного кода

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

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

50 (изменено: Malcev, 2017-12-15 14:45:53)

Re: AHK: Выполнение переменного кода

Можно передавать название экзешника файлу autohotkey.exe, который будет открывать соответствующий ahk файл.

Run, % "autohotkey.exe Lib\" SubStr(A_ScriptName, 1, -4) ".ahk"
serzh82saratov пишет:
Malcev пишет:

Из-за экономии менее чем в 1 mb на 1 скрипт?

Ну и если скриптов много, то и это тоже.

Это сколько должно быть скриптов, чтобы волноваться из-за места при современных ёмкостях флешек?

51

Re: AHK: Выполнение переменного кода

Malcev пишет:

Можно передавать название экзешника файлу autohotkey.exe, который будет открывать соответствующий ahk файл.

Зачем, для чего, где, когда?

Malcev пишет:

Это сколько должно быть скриптов

Много, но главный довод не использовать компилированные, я там же привёл.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

52

Re: AHK: Выполнение переменного кода

OFF:: Кажется, этот спор никогда не кончится...

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

53

Re: AHK: Выполнение переменного кода

serzh82saratov пишет:

Зачем, для чего, где, когда?

Не понял вопросов. Уточни.

54 (изменено: serzh82saratov, 2017-12-15 16:38:13)

Re: AHK: Выполнение переменного кода

А понял, ты про то чтоб вместо "ярлыков" использовать компилированные скрипты, ну так это надо их компилировать, если новый на флехе создавать, то сначала надо создать текстовик, потом его на компилятор перенести, текстовик удалить чтобы мусора не было.
Не пойму чем это лучше js, который можно просто просмотреть или поправить в блокноте.
Если уже js запрещён на ПК, так на нём уже постарались наверное и остальную чужеродность не пускать.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

55

Re: AHK: Выполнение переменного кода

1) Компилируем один скрипт:

Run, % "autohotkey.exe Lib\" SubStr(A_ScriptName, 1, -4) ".ahk"

2) Дублируем его столько раз, сколько у нас скриптов.
3) Переименовываем эксешники в названия скриптов ахк.
Больше ничего делать не надо, будь то старая флешка или новая.

56

Re: AHK: Выполнение переменного кода

Так пути не изменишь, только имя.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

57

Re: AHK: Выполнение переменного кода

А зачем менять пути?
Создал папку Scripts и всё.

58 (изменено: Alectric, 2017-12-15 17:33:58)

Re: AHK: Выполнение переменного кода

Скомпилировать рядом с AutoHotkeyU32.exe и положить в корень флешки.

#SingleInstance,Force

ahkPath:=a_temp

FileInstall,AutoHotkeyU32.exe,%ahkPath%\AutoHotkeyU32.exe,1

gui,add,ListView,xm ym w600 h400 Grid gScriptsList,Папка|Имя
gui,add,StatusBar
gui,show

paths:=[]
names:=[]
Dirs:=[]
loop,% a_scriptdir "\*.ahk",,1
{
  paths[a_index]:=A_LoopFileFullPath
  names[a_index]:=A_LoopFileName
  Dirs[a_index]:=A_LoopFileDir
  SB_SetText("Сканирование...`t" a_index " скриптов")
}
SB_SetText("Найдено " names.maxindex() " скриптов")

loop,% names.maxindex()
{
  if (Dirs[a_index]!=olddir)
    LV_Add(,Dirs[a_index],names[a_index])
  else
    LV_Add(,,names[a_index])
  olddir:=Dirs[a_index]
}
LV_ModifyCol()
return

guiclose:
exitapp

ScriptsList:
if (A_GuiEvent="DoubleClick")
{
  run,% ahkPath "\AutoHotkeyU32.exe """ paths[A_EventInfo] """",,UseErrorLevel
  if !errorlevel
    exitapp
  else
    msgbox,Ошибка.
}
return

...

С сортировкой нужно разобраться.

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

59

Re: AHK: Выполнение переменного кода

По мне так, гуи только тормозит работу с файлами.

60 (изменено: Alectric, 2017-12-15 17:14:25)

Re: AHK: Выполнение переменного кода

Зато не нужно плодить кучу файлов, заниматься бесконечной компиляцией, и плодить ссылки на области памяти.

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

61

Re: AHK: Выполнение переменного кода

Про какую компиляцию речь?
Один раз надо скомпилировать один скрипт.
Какие ссылки в области памяти вы имеете в виду?
Скомпилированный экзешник запустил обработчик и выгрузился из памяти.

62 (изменено: Alectric, 2017-12-15 17:32:03)

Re: AHK: Выполнение переменного кода

Malcev пишет:

Какие ссылки в области памяти вы имеете в виду?

Имею ввиду Junction. И не в области, а на.

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

63

Re: AHK: Выполнение переменного кода

Мне это ни о чем не говорит.
Но я только что запустил 1000 скомпилированных скриптов с кодом tooltip - никаких негативных последствий от

плодить ссылки на области памяти

не обнаружил.

64 (изменено: Alectric, 2017-12-15 18:00:41)

Re: AHK: Выполнение переменного кода

Я не про последствия, я про рутину.

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

65

Re: AHK: Выполнение переменного кода

Что происходит? http://i.smiles2k.net/icq_smiles/5.gif

66 (изменено: Alectric, 2017-12-15 18:03:47)

Re: AHK: Выполнение переменного кода

ypppu, у меня тот же вопрос возник, когда я прочитал эту тему. Видимо зачарованное название темы, вдумайтесь только "Выполнение переменного кода". Это как обсуждать переменный ток (если есть электрики), можно обсуждать бесконечно.

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

67 (изменено: svoboden, 2018-04-28 04:11:30)

Re: AHK: Выполнение переменного кода

Тоже заинтересовался данной темой. Пришел к тому, что ahk все же должен быть установлен. Вот так, например, можно выполнить любой код в блокноте, не создавая никаких файлов:

F1::
		ControlGetFocus, ControlName, ahk_exe notepad.exe
		if (InStr(ControlName, "Edit1"))
		{
			ControlGetText, ScriptText, %ControlName%, ahk_exe notepad.exe
			RunTempScript(ScriptText, "Unsaved Script - " A_TickCount)
		}
return

RunTempScript(TempScript, name="")
{
	If name =
	pipe_name := A_TickCount
	Else
	pipe_name := name
	pipe_ga := CreateNamedPipe(pipe_name, 2)
	pipe    := CreateNamedPipe(pipe_name, 2)
	if (pipe=-1 or pipe_ga=-1)
	{
		MsgBox CreateNamedPipe failed.
		ExitApp
	}
	Run, %A_AhkPath% "\\.\pipe\%pipe_name%",,,PID
	DllCall("ConnectNamedPipe","uint",pipe_ga,"uint",0)
	DllCall("CloseHandle","uint",pipe_ga)
	DllCall("ConnectNamedPipe","uint",pipe,"uint",0)
	Script := chr(0xfeff) TempScript
	if !DllCall("WriteFile","uint",pipe,"str",Script,"uint",(StrLen(Script)+1)*2,"uint*",0,"uint",0)
		MsgBox WriteFile failed: %ErrorLevel%/%A_LastError%
	DllCall("CloseHandle","uint",pipe)
	Return PID
}

CreateNamedPipe(Name, OpenMode=3, PipeMode=0, MaxInstances=255)
{
    return DllCall("CreateNamedPipe","str","\\.\pipe\" Name,"uint",OpenMode
        ,"uint",PipeMode,"uint",MaxInstances,"uint",0,"uint",0,"uint",0,"uint",0)
}

68

Re: AHK: Выполнение переменного кода

Diman_Express пишет:

что если скачивать файл с сервера (текстовик), где будет код. Далее скрипт должен прочитать его и выполнить

Подозреваю, на форуме есть примеры этой процедуры, но не знаю, как правильно искать. Есть действенный вариант такого метода чтения кода онлайн из Google Docs, например? Ткните, пожалуйста. Гугл выдал пару примеров некоторой давности - у меня не сработали.

69 (изменено: Malcev, 2018-04-28 13:17:40)

Re: AHK: Выполнение переменного кода

В справке всё написано:
https://autohotkey.com/docs/commands/Run.htm

code := "msgbox 1`nmsgbox 2"
ExecScript(code, false)

ExecScript(Script, Wait:=true)
{
    shell := ComObjCreate("WScript.Shell")
    exec := shell.Exec("AutoHotkey.exe /ErrorStdOut *")
    exec.StdIn.Write(script)
    exec.StdIn.Close()
    if Wait
        return exec.StdOut.ReadAll()
}

70

Re: AHK: Выполнение переменного кода

Кстати, такой код не всегда годится:

code := "msgbox ✓"
ExecScript(code, false)

ExecScript(Script, Wait:=true)
{
    shell := ComObjCreate("WScript.Shell")
    exec := shell.Exec("AutoHotkey.exe /ErrorStdOut *")
    exec.StdIn.Write(script)
    exec.StdIn.Close()
    if Wait
        return exec.StdOut.ReadAll()
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

71 (изменено: Malcev, 2018-04-29 00:10:58)

Re: AHK: Выполнение переменного кода

Да, такие символы wscript похоже не понимает.
Можно конвертировать:

code := "msgbox % Chr(10003)"
ExecScript(code, false)

ExecScript(Script, Wait:=true)
{
    shell := ComObjCreate("WScript.Shell")
    exec := shell.Exec("AutoHotkey.exe /ErrorStdOut *")
    exec.StdIn.Write(script)
    exec.StdIn.Close()
    if Wait
        return exec.StdOut.ReadAll()
}

Или через именованные каналы:

code := "msgbox ✓"
DynaRun(code)

DynaRun(TempScript, pipename="")
{
   static _:="uint",@:="Ptr"
   If pipename =
      name := "AHK" A_TickCount
   Else
      name := pipename
   __PIPE_GA_ := DllCall("CreateNamedPipe","str","\\.\pipe\" name,_,2,_,0,_,255,_,0,_,0,@,0,@,0)
   __PIPE_    := DllCall("CreateNamedPipe","str","\\.\pipe\" name,_,2,_,0,_,255,_,0,_,0,@,0,@,0)
   if (__PIPE_=-1 or __PIPE_GA_=-1)
      Return 0
   Run, %A_AhkPath% "\\.\pipe\%name%",,UseErrorLevel HIDE, PID
   If ErrorLevel
      MsgBox, 262144, ERROR,% "Could not open file:`n" __AHK_EXE_ """\\.\pipe\" name """"
   DllCall("ConnectNamedPipe",@,__PIPE_GA_,@,0)
   DllCall("CloseHandle",@,__PIPE_GA_)
   DllCall("ConnectNamedPipe",@,__PIPE_,@,0)
   script := (A_IsUnicode ? chr(0xfeff) : (chr(239) . chr(187) . chr(191))) TempScript
   if !DllCall("WriteFile",@,__PIPE_,"str",script,_,(StrLen(script)+1)*(A_IsUnicode ? 2 : 1),_ "*",0,@,0)
        Return A_LastError,DllCall("CloseHandle",@,__PIPE_)
   DllCall("CloseHandle",@,__PIPE_)
   Return PID
}

72

Re: AHK: Выполнение переменного кода

Malcev пишет:

Можно конвертировать

В этом нет смысла, код, как правило, заранее неизвестен.

Или через именованные каналы

Так это понятно, я просто хотел сказать, что данный код из хелпа не всегда годится.

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

73

Re: AHK: Выполнение переменного кода

teadrinker пишет:

я просто хотел сказать, что данный код из хелпа не всегда годится.

Наверное стоило бы на этот момент в хелпе заострить внимание (сделать пометку).

74

Re: AHK: Выполнение переменного кода

Пиши lexikos'у.

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

75

Re: AHK: Выполнение переменного кода

Написал, посмотрим, что ответит.

76

Re: AHK: Выполнение переменного кода

Malcev
Что нибудь ответили?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

77

Re: AHK: Выполнение переменного кода

Нет.