1

Тема: AHK: Исполнение динамического внешнего кода

В общем, к сути проблемы: Имеется AHK-скрипт, обращающийся к PHP-скрипту на сервере. Тот, в зависимости от переданных GET-данных, возвращает блок AHK-кода (1-15 строк).

Необходимо, чтобы этот возвращаемый код как-то исполнялся, при условии, что на компьютере-исполнителе отсутствует интерпретатор AHK.

По-сути, на данный момент имеется только переменная, содержащая весь этот блок кода на возврате, а вот как его привести в исполнение - главный вопрос. Вынос в другой файл и запуск - не вариант из-за отсутствия AHK на компьютере.

Буду благодарен за любую помощь.

2

Re: AHK: Исполнение динамического внешнего кода

Ничего не выйдет.

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

3

Re: AHK: Исполнение динамического внешнего кода

stealzy пишет:

А он как исполняется без интерпретатора?

Видимо, скомпилированный.

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

4

Re: AHK: Исполнение динамического внешнего кода

Да, верно, сам скрипт предназначен для исполнения в скомпилированном виде. Как я понял, такая реализация невозможна? И если да, то посоветуйте альтернативные методы решения проблемы, пожалуйста.

5

Re: AHK: Исполнение динамического внешнего кода

Пусть сервер возвращает не код АНК, а какие-то инструкции для вашего скрипта, что ему надо делать.

6

Re: AHK: Исполнение динамического внешнего кода

Wexter, а зачем он скомпилирован? Разве нельзя распространять интерпретатор, переименованный в имя вашего скрипта, в одной папке с вашим скриптом. При запуске интерпретатора будет исполняться ваш скрипт.

7

Re: AHK: Исполнение динамического внешнего кода

Можно сделать так, чтобы скрипт принятый код сохранял в include-файл.

8

Re: AHK: Исполнение динамического внешнего кода

Это не то? http://www.autohotkey.net/~HotKeyIt/Aut … c-txt.html

Как сказал мой дед - Я твой дед

9

Re: AHK: Исполнение динамического внешнего кода

sergeiplugatyr, то, только не в AHK_L.

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

10

Re: AHK: Исполнение динамического внешнего кода

А что, обязательно обходиться одним скомпилированным файлом?

Вынос в другой файл и запуск - не вариант из-за отсутствия AHK на компьютере.

А как же на компьютер попадёт скомпилированный скрипт? А если он таки попал на компьютер, что мешает командой FileInstall извлечь из него файл интерпретатора?

11

Re: AHK: Исполнение динамического внешнего кода

ypppu пишет:

что мешает командой FileInstall извлечь из него файл интерпретатора?

Или как вариант, если код известен (свой), то переносить в файл анк, указав в #Include *i к нему путь, и запустить свой скомпилированный с параметром ком. строки и директивой #SingleInstance Off перейдя в метку с Include.

teadrinker пишет:

sergeiplugatyr, то, только не в AHK_L.

Кстати давно хотел спросить, а что мешает всем дружно перейти на AutoHotkey_H? Он же вроде с кучей плюшек.

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

12

Re: AHK: Исполнение динамического внешнего кода

Каждому в отдельности ничего не мешает, а всем вместе — AHK_L более популярен.

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

13

Re: AHK: Исполнение динамического внешнего кода

Так если там есть всё что и в AHK_L, и ещё добавлено полезного, почему тогда менее популярен, или там есть подводные камни?

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

14

Re: AHK: Исполнение динамического внешнего кода

Менее популярен потому, что меньше разрекламирован. Вопросы-то на форуме по AHK_L. А вообще, если нужен более мощный скриптовый язык — то есть Python. Там ещё больше плюшек.

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

15

Re: AHK: Исполнение динамического внешнего кода

serzh82saratov пишет:

Или как вариант, если код известен (свой), то переносить в файл анк, указав в #Include *i к нему путь, и запустить свой скомпилированный с параметром ком. строки и директивой #SingleInstance Off перейдя в метку с Include.

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

16

Re: AHK: Исполнение динамического внешнего кода

teadrinker пишет:

Каждому в отдельности ничего не мешает, а всем вместе — AHK_L более популярен.

Кто-то тут у нас должен перейти, изучить и начать бешено рекламировать возможности АНК_Н, постя код с этими самыми плюшками. Тогда, глядишь, народ начнёт подтягиваться. А так, с порога, даже не очень понятно, что это за АНК_Н, где его брать, как использовать, чем отличается. В общем, как в пословице: рубль тому, кто придумал, десять тому, кто сделал, и сто тому, кто продал. Если последнего нет, то будет прозябание на обочине и широкая популярность в узких кругах.

17

Re: AHK: Исполнение динамического внешнего кода

Кстати давно хотел спросить, а что мешает всем дружно перейти на AutoHotkey_H? Он же вроде с кучей плюшек.

Как я понял, для того, чтобы получить эти плюшки в автохотки, необязательно переходить на  AHK_H, а достаточно вызывать AutoHotkey.dll от AHK_H.

18

Re: AHK: Исполнение динамического внешнего кода

Почитал немного, интересно, конечно. Но AHK_H вряд ли станет столь же популярным, как AHK_L. Дело в том, что AHK позиционируется как язык, лёгкий для изучения новичками в программировании, а фишки, которые предлагает AHK_H, могут быть использованы лишь опытными разработчиками. Да ещё и требуется ручная установка.

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

19 (изменено: stealzy, 2016-09-07 18:31:18)

Re: AHK: Исполнение динамического внешнего кода

_H обещает поддержку sleep в команде send, что интересно,
в _L тоже можно использовать sleep, только ведет себя он как-то странно (времени проходит раз в 15 больше).

Send tic{sleep 100}tak

20

Re: AHK: Исполнение динамического внешнего кода

YMP пишет:
serzh82saratov пишет:

Или как вариант, если код известен (свой), то переносить в файл анк, указав в #Include *i к нему путь, и запустить свой скомпилированный с параметром ком. строки и директивой #SingleInstance Off перейдя в метку с Include.

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

А, правильно, с компилированными редко работаю, привычка.

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

21

Re: AHK: Исполнение динамического внешнего кода

Это не тот Sleep, это посыл клавиши Sleep.

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

22

Re: AHK: Исполнение динамического внешнего кода

teadrinker, как одно противоречит другому? AHK_H делает язык непонятным для новичков?
Автоматическую установку даже я мог бы сделать .

23

Re: AHK: Исполнение динамического внешнего кода

Не-а, он просто не нужен для новичков. Так зачем им ещё какую-то dll устанавливать, когда они даже не знают, что это такое.

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

24 (изменено: stealzy, 2016-09-07 18:42:49)

Re: AHK: Исполнение динамического внешнего кода

Ну так можно скачать сразу exe.
Также можно сказать про AHK_L - он просто не нужен для новичков, им достаточно Basic.
Если на оффсайте разместят _H, то все спокойно перейдут, мне кажется.
Вопрос к ним, наверно.

25

Re: AHK: Исполнение динамического внешнего кода

stealzy пишет:

Ну так можно скачать сразу exe.

И что с ним дальше делать? Кроме того, ещё нужен AutoHotkeySC.bin и компилятор.

stealzy пишет:

Если на оффсайте разместят _H, то все спокойно перейдут, мне кажется.

Даже с AHK-basic годами многие не могли перейти.

stealzy пишет:

после небольшого знакомства с AutoIt, пытался освоить AHK и был в ужасе от нелогичного синтаксиса

Новичок не знает, что такое логичный или нелогичный синтаксис. Я просто открыл русский хэлп и сразу стал программировать.

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

26 (изменено: Malcev, 2016-09-07 19:47:55)

Re: AHK: Исполнение динамического внешнего кода

Если на оффсайте разместят _H, то все спокойно перейдут, мне кажется.

Так он уже размещен на оффсайте:
https://autohotkey.com/
В разделе Forks.
Кстати тут разумно пишут, какую версию стоит выбрать:
http://maul-esel.github.io/ahkbook/en/W … hoose.html

27

Re: AHK: Исполнение динамического внешнего кода

teadrinker пишет:

И что с ним дальше делать? Кроме того, ещё нужен AutoHotkeySC.bin и компилятор.

А если скомпилировать скрипт под _H, на другом ПК нужен будет DLL?

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

28

Re: AHK: Исполнение динамического внешнего кода

Да я пока не изучал подробно, но скорее всего нет.

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

29

Re: AHK: Исполнение динамического внешнего кода

Весь сыр-бор из-за лишних файлов? Задача нормально решается на AutoHotkey_L, просто нужно создать два дополнительных файла рядом с основным.

30

Re: AHK: Исполнение динамического внешнего кода

В общем, не зря говорят: Тот кто ищет, тот всегда найдет. Поставил себе AHK_H 1.1 и начал экспериментировать...

Перепробовал кучу DLL-библиотек с амерских форумов, пробовал подключать несколько функций из AutoHotkey.dll, но почти всё работало только в некомпилированном виде, а после компиляции выдавало разного рода ошибки, причем DLL-файл не вшивался в EXE, нужно было его иметь рядом со скомпилированным скриптом (или в любом другом месте, как указать директорию).

В результате все решилось с помощью функции в AHK_H AhkThread(). Я думал, что для нее придется вызывать DllCall, потом держать вместе с EXEшником DLLку, но все оказалось до неприличия просто:

func := AhkThread()
func.ahkExec[ExecVar]

Во время компиляции эта функция сама вызывает AutoHotkey.dll, и что не менее важно для меня, вшивает все в EXEшник. В результате можно на компьютере, где даже никогда не было AHK, спокойно ею пользоваться. По-сути она исполняет код из переменной ExecVar, а добавить туда его перед этим можно многими способами. Код исполняет даже многострочный, пока не пробовал давать ей функции из инклудов, но думаю, что должна обрабатывать.

Собственно, готовую модель работы я уже протестировал, когда PHP возвращает блок кода, и он исполняется без создания каких-либо дополнительных файлов и в компилированном скрипте. Благодарю всех за дискуссию, что не остались равнодушны

P.S. Я понимаю, что AhkExec это стандартная функция AHK_H, но прямым вызовом она не работала.