1 (изменено: BalRoG, 2012-03-16 01:13:00)

Тема: AHK: Как записать содержимое функции в файл

Да, я понимаю, что задаю дурацкий вопрос,
но вот, допустим, у меня в моем ahk файле есть функция, можно ли записать весь код из нее в файл?

2

Re: AHK: Как записать содержимое функции в файл

Как-то так:

FuncName =   ; указать имя функции
FileName =   ; указать путь к файлу для сохранения

FileRead, text, %A_ScriptFullPath%
t := RegExReplace(text, "s).*?(" FuncName "\([^\)]*?\)(\R|[ \t])*\{.*)", "$1")
Func := i := ""
Loop, parse, t
{
   if (A_LoopField = "{")
      i++
   if (A_LoopField = "}")
      i--
   Func .= A_LoopField
} Until i = 0
FileAppend, % Func, % FileName
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

3

Re: AHK: Как записать содержимое функции в файл

Присоединюсь к этому дурацкому вопросу

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

А существует ли общий метод получения участков кода текущего скрипта?
Или это не реализовано, бессмысленно и не реализуемо?

4

Re: AHK: Как записать содержимое функции в файл

А какая от этого польза?

5

Re: AHK: Как записать содержимое функции в файл

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

6

Re: AHK: Как записать содержимое функции в файл

Нет, какая польза от записи содержимого функции в файл?

7

Re: AHK: Как записать содержимое функции в файл

Тогда вопрос не ко мне

8

Re: AHK: Как записать содержимое функции в файл

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

9 (изменено: BalRoG, 2012-03-16 12:08:40)

Re: AHK: Как записать содержимое функции в файл

Спасибо вам всем! Очень приятно, что не оставили без ответа.
Дело в том, что я сделал такую системку: я в одном скриптовом файле пишу код, и потом записываю его части в файлы .ahk и запускаю, получая тем самым многопоточность, а когда мне нужно завершить работу автохоткея, все созданные файлы автоматом закрыаются и удаляются, соотв. мне достаточно носить с собой только один файл и редактировать только его, к чему я давно привык. Я скорее всего неправильно поставил задачу, и нужно было спрашивать, можно ли вообще какнибудь кроме как представляя код как текст записывать его в файл, потому что щас это выглядит так:

Script=
(
  ...
)
StartThread("MonitorControl",Script,"UTF-8")

где StartThread это моя функция которая записывает текст из переменной Script в файл, запускает его и запоминает его название, чтобы потом можно было выключить и удалить. Может быть есть какие то другие пути это сделать?

10

Re: AHK: Как записать содержимое функции в файл

А чем именно не устраивает существующий путь?

11 (изменено: BalRoG, 2012-03-16 12:10:27)

Re: AHK: Как записать содержимое функции в файл

YMP пишет:

А чем именно не устраивает существующий путь?

Минусы в том что так приходится к символам % подставлять апостроф, а в SciTE получается монтонная подсветка синтаксиса как для текста.
Если есть такая функция как Include которая вкидывает в файл код извне, то такую функцию можно было бы назвать Exclude

12

Re: AHK: Как записать содержимое функции в файл

Апостроф можно и не подставлять, есть опция специальная для сохранения %.

Script=
(%
  ...
)
StartThread("MonitorControl",Script,"UTF-8")

Очень советую не игнорировать справку, там много интересного.
Насчёт подсветки не знаю. Может, там в Scite с правилами пошаманить?

13 (изменено: BalRoG, 2012-03-16 12:31:40)

Re: AHK: Как записать содержимое функции в файл

к сожалению у меня это не работает, пишет ошибки связанные с неправильной интерпретацией кода

14

Re: AHK: Как записать содержимое функции в файл

Что именно не работает? Пример можно неработающий?

15

Re: AHK: Как записать содержимое функции в файл

Error at line 114

Line Text: Process, Priority, , High
SetBatchLines -1
#NoTrayIcon
#NoEnv
#SingleInstance force
#Persi...
Error: Variable name too long

The script was not reloaded....

<LINE 114>Script=
    (%
        Process, Priority, , High
        SetBatchLines -1
        #NoTrayIcon
        #NoEnv
        #SingleInstance force
        #Persistent
        #Include scr_Functions.ahk
        OnExit, Exit
        hHookKeybd := DllCall("SetWindowsHookEx"
                                                    , Int, WH_KEYBOARD_LL := 13
                                                    , UInt, RegisterCallback("LowLevelKeyboardProc", "Fast")
                                                    , UInt, A_PtrSize=8 ? DllCall("GetModuleHandle", UInt, 0, "Fast") : DllCall("GetModuleHandle", UInt, 0) ; A_PtrSize ? 64=8 or 32=4 bit
                                                    , UInt, 0)
        Return
         
        Exit:
            DllCall("UnhookWindowsHookEx", UInt, hHookKeybd)
        ExitApp
         
        LowLevelKeyboardProc(nCode, wParam, lParam) {
            Critical
            SetFormat, Integer, H
            ;ToolTip, `% "KeyState: " . wParam . "``n"
            ;                    . "vkCode: " . KeyCodeGetHex(NumGet(lParam+0,0,"UInt"),"vk") . "``n"
            ;                    . "scCode: " . KeyCodeGetHex(NumGet(lParam+0,4,"UInt"),"sc") . "``n"
            ;                    . "Extended: " .                          NumGet(lParam+0,8,"UInt") & 1 . "``n"
            ;                    . "HookKeybTime: " .                  NumGet(lParam+0,12,"UInt")
            RegWrite, REG_DWORD, HKEY_CURRENT_USER, Software\scrMainScriptHkeys, HookKeybState,     `% wParam
            RegWrite, REG_SZ,      HKEY_CURRENT_USER,    Software\scrMainScriptHkeys, HookKeybvkCode,     `% KeyCodeGetHex(NumGet(lParam+0,0,"UInt"),"vk")
            RegWrite, REG_SZ,      HKEY_CURRENT_USER, Software\scrMainScriptHkeys, HookKeybscCode,     `% KeyCodeGetHex(NumGet(lParam+0,4,"UInt"),"sc")
            RegWrite, REG_DWORD, HKEY_CURRENT_USER, Software\scrMainScriptHkeys, HookKeybExtended,`% NumGet(lParam+0,8,"UInt")
            RegWrite, REG_DWORD, HKEY_CURRENT_USER, Software\scrMainScriptHkeys, HookKeybTime,         `% NumGet(lParam+0,12,"UInt")
            Return DllCall("CallNextHookEx", UInt, 0, Int, nCode, UInt, wParam, UInt, lParam)
        }
    )
    StartThread("KeybHook",Script,"UTF-8")

16

Re: AHK: Как записать содержимое функции в файл

Апострофы-то уберите.

17 (изменено: BalRoG, 2012-03-16 17:16:37)

Re: AHK: Как записать содержимое функции в файл

Спасибо большое, оказалось я убрал апострофы везде, там где не надо тоже :-[
Вобщем вы мне очень помогли! Я счастлив!