-
Notifications
You must be signed in to change notification settings - Fork 72
/
Copy pathDynaExpr.ahk
92 lines (76 loc) · 2.21 KB
/
DynaExpr.ahk
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;; Evaluates expression and returns the result.
DynaExpr_EvalToVar(sExpr)
{
sTmpFile := A_Temp "\temp.ahk"
sScript:="
(
#NoTrayIcon
FileDelete " sTmpFile "
val := " sExpr "
FileAppend %val%, " sTmpFile "
)"
PID:=DynaRun(sScript)
Process,WaitClose,%PID%
FileRead sResult, %sTmpFile%
return sResult
}
;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;; Simply executes sExpr
DynaExpr_Eval(sExpr)
{
sTmpFile := A_Temp "\temp.ahk"
sScript:="
(
#NoTrayIcon
FileDelete " sTmpFile "
" sExpr "
)"
PID:=DynaRun(sScript)
Process, WaitClose, %PID%
FileRead sResult, %sTmpFile%
return sResult
}
;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;; Dynamically call a function from a string.
DynaExpr_FuncCall(sFunc, ByRef rbRet=0)
{
; Determine if this is a function or not.
bCouldBeFunction := InStr(sFunc, "(")
sPossibleFunc := SubStr(sFunc, 1, InStr(sFunc, "(")-1)
; Is this Cmd actually a function?
if (bCouldBeFunction && IsFunc(sPossibleFunc))
{
fn := Func(sPossibleFunc)
; Extract parameters.
iPosOfFirstParm := InStr(sFunc, "(")+1,
sParms := SubStr(sFunc, iPosOfFirstParm, StrLen(sFunc)-iPosOfFirstParm)
; Put parameters into an array (Best method I could find for passing any more than 1 variable was from this document):
; http://www.autohotkey.com/board/topic/84950-dynamic-function-calls-an-unknown-number-of-parameters/)
; and this: http://l.autohotkey.net/docs/Functions.htm#Variadic
asParms := []
Loop, Parse, sParms, `,
asParms.Insert(Trim(A_LoopField, A_Space))
; Call the function
rbRet := fn.(asParms*)
return true
}
return false
}
;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;; Dynamically set a class member variable.
DynaExpr_SetMemVar(ByRef this, sVarName, vVal)
{
; TODO: Make this work.
sSetExpr = % Object("this."sVarName)
%sSetExpr% := vVal
return
}
;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;