1

Тема: AHK: Как в переменную заключить целый скрипт?

Ребят, вот у меня есть некий скрипт


  PixelSearch,,, 681-451
                , 571-321
                , 681+451
                , 571+321
                , 0x23DC23,, Fast
If Errorlevel
{
Sleep 1000
MouseClick, L, 582, 302, 1, 10
}
Else
{
PixelSearch, Px, Py, 0, 0, 1280, 1024, 0x23DC23, 0, fast
MouseClick, left, %Px%, %Py%, 1, 30
}

Я хочу этот скрипт заключить в переменную Var1! Если вы подскажите как это сделать, то сразу подскажите как мне его выполнять. Ну например:


F1::
MsgBox, Привет =)
Var1
MsgBox? Пока =(
Return

И можно ли будет эту переменную использовать в ней самой!?
Пример:


  PixelSearch,,, 681-451
                , 571-321
                , 681+451
                , 571+321
                , 0x23DC23,, Fast
If Errorlevel
{
Sleep 1000
MouseClick, L, 582, 302, 1, 10
Var1
}
Else
{
PixelSearch, Px, Py, 0, 0, 1280, 1024, 0x23DC23, 0, fast
MouseClick, left, %Px%, %Py%, 1, 30
}

Зарание спасибо.

2 (изменено: Irbis, 2013-10-29 18:26:20)

Re: AHK: Как в переменную заключить целый скрипт?

Если цель состоит именно в том, чтобы в переменной был скрипт(???), то вряд ли кто может помочь.
Если же нужно вынести первый скрипт за пределы хоткея F1, то его можно оформить в виде процедуры.

3 (изменено: Indomito, 2013-10-30 11:11:57)

Re: AHK: Как в переменную заключить целый скрипт?

gydzibity пишет:

Как в переменную заключить целый скрипт?

воспользуйся ООП(Object-oriented programming).

Создай объект и определи его метод(ы), можно в одну переменную/массив "засунуть" кучу действий, причём взаимосвязанных, там и данные будут и функции.

Почитай англ. справку в формате CHM, твой вариант/твоё желание весьма легко воплощается/реализуется.

P.S. Для начала прочти мою тему, правда у меня проблемы совсем другие, хотя решаемые, но надо лезть в классы, а мне не хочется AHK: Ассоциативные массивы около трёх вопросов.

UPD

Irbis пишет:

то его можно оформить в виде процедуры.

а лучше в виде функции, что бы локализовать переменные, ну и уже не обращать больше на неё внимания - на вход ТО-то, а на выходе ЭТО.

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
Для NotePad++(подсветка синтаксиса, автозавершение и плагины(AutoSave и RunMe).
OS Windows 10 x64 Pro

4

Re: AHK: Как в переменную заключить целый скрипт?

Indomito пишет:
gydzibity пишет:

Как в переменную заключить целый скрипт?

воспользуйся ООП(Object-oriented programming).

Создай объект и определи его метод(ы), можно в одну переменную/массив "засунуть" кучу действий, причём взаимосвязанных, там и данные будут и функции.

Почитай англ. справку в формате CHM, твой вариант/твоё желание весьма легко воплощается/реализуется.

P.S. Для начала прочти мою тему, правда у меня проблемы совсем другие, хотя решаемые, но надо лезть в классы, а мне не хочется AHK: Ассоциативные массивы около трёх вопросов.

Можете подробнее описать.

5

Re: AHK: Как в переменную заключить целый скрипт?

Может стоит справку прочесть?

Custom Objects

+ открыть спойлер

Objects in AutoHotkey are prototype-based rather than class-based. That is, an object can inherit properties and methods from its prototype or base object, but do not need to have a pre-defined structure. Properties and methods can also be added to (or removed from) an object or any of the objects it derives from at any time. However, AutoHotkey emulates classes by translating class definitions into ordinary objects. For more complex or specialized situations, the base object can override the standard behaviour by defining meta-functions.

To create an object derived from another object, scripts can assign a base or use the new keyword:

baseObject := {foo: "bar"}
obj1 := Object(), obj1.base := baseObject
obj2 := {base: baseObject}
obj3 := new baseObject
MsgBox % obj1.foo " " obj2.foo " " obj3.foo

ИЛИ

Prototypes

+ открыть спойлер

Prototype or base objects are constructed and manipulated the same as any other object. For example, an ordinary object with one property and one method might be constructed like this:

; Create an object.
thing := {}
; Store a value.
thing.foo := "bar"
; Create a method by storing a function reference.
thing.test := Func("thing_test")
; Call the method.
thing.test()

thing_test(this) {
   MsgBox % this.foo
}

When thing.test() is called, thing is automatically inserted at the beginning of the parameter list. However, for backward-compatibility, this does not occur when a function is stored by name (rather than by reference) directly in the object (rather than being inherited from a base object). By convention, the function is named by combining the "type" of object and the method name.

An object is a prototype or base if another object derives from it:

other := {}
other.base := thing
other.test()

In this case, other inherits foo and test from thing. This inheritance is dynamic, so if thing.foo is modified, the change will be reflected by other.foo. If the script assigns to other.foo, the value is stored in other and any further changes to thing.foo will have no effect on other.foo. When other.test() is called, its this parameter contains a reference to other instead of thing.

P.S. Переводить я не стал, т.к. могу не соблюсти точность терминологии.

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
Для NotePad++(подсветка синтаксиса, автозавершение и плагины(AutoSave и RunMe).
OS Windows 10 x64 Pro

6

Re: AHK: Как в переменную заключить целый скрипт?

Пример обычного числового объекта в виде двухмерного массива

Test := {sasa:{KeyA: 1, KeyB: 2, KeyB: 3}, tata:{KeyC: 10, KeyD: 20, KeyE: 30}}

Читать a:=Test.sasa.KeyB получим 2
Писать Test.тата.KeyЕ++ значение увеличители на +1 было 30 стало 31

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

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
Для NotePad++(подсветка синтаксиса, автозавершение и плагины(AutoSave и RunMe).
OS Windows 10 x64 Pro

7

Re: AHK: Как в переменную заключить целый скрипт?

Справился с проблемой при помощи

block1:

и

Goto, block1

8

Re: AHK: Как в переменную заключить целый скрипт?

Это жестоко, честное слово, потом же будешь на свои же грабли наступать, лучше так:

Gosub Block1
;-----код
ExitApp

Block1:
; Выполняем то что нужно
return

а проще ещё так

Block1()
;-----код
ExitApp


Block1(){
global ;======убрать если нужно локализовать переменные функции
;----Тело функции
return
}
"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
Для NotePad++(подсветка синтаксиса, автозавершение и плагины(AutoSave и RunMe).
OS Windows 10 x64 Pro