-
Notifications
You must be signed in to change notification settings - Fork 6
/
Meta_Script.ahk
126 lines (93 loc) · 3.3 KB
/
Meta_Script.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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
/*
AHK元编程模板 - @心如止水_Zen
- 主要功能:完全控制 __Get __Set __Call , 实现类的高度自定义
- 小提示:是以"Test"这个类为例子搞的,到时候批量替换成自己的名字就行
- 关于Class:会创建两个最外层的类,一个是 Test 一个是 TestBase ,编程的三个方法也要创建类,但是为了节约外部命名空间,所以放入 Test类 内部了.
*/
Class Test{
;----------------------------------------------------------------------
class TestCallBase{
__Call(aThis,aFuncName,aParams*){
aNameLen:=StrLen(aName)
if(ObjHasKey(this,aFuncName)){ ;这里的this指代,真正的元函数本身
OutPut :=this[aFuncName].Call(aThis,aParams) ;第一个参数必须是 this ,另外,aParams已经是数组了
return OutPut
}
else{
throwWithSt(_Ex.NoExistMethod) ;找不到方法,就抛出异常
}
}
}
;----------------------------------------------------------------------
class TestGetBase{
__Call(aThis,aVariateName,aParams*){
if(ObjHasKey(this,aVariateName)){
OutPut :=this[aVariateName]
return OutPut
}
else{
throwWithSt(_EX.NoExistVariate) ;如果找不到,那么就抛出值不存在异常
return ""
}
}
}
;----------------------------------------------------------------------
;主要是为了实现保护写入,也就是保证里面的东西是常量
class TestSetBase{
__Call(aThis,aVariateName,aParams*){
if(ObjHasKey(TestBase.__Get,aVariateName)){
throwWithSt(_EX.SetConst) ;如果已经存在,那么就抛出常量写入异常
return ""
}
else{
throwWithSt(_EX.NoExistVariate) ;如果找不到,那么就抛出变量不存在异常
}
}
}
;----------------------------------------------------------------------
} ;Test Class End
;----------------------------------------------------------------------
;----------------------------------------------------------------------
Test.base:=new TestBase()
;----------------------------------------------------------------------
;----------------------------------------------------------------------
Class TestBase{
Class __Set extends Test.TestSetBase{
;主要目的就是为了防止写入,所以里面往往什么也不用填写
}
Class __Get extends Test.TestGetBase{
Static Msg := 0x111
Static Open := 65300 ;打开窗口
Static Reload := 65400 ;重启
Static Edit := 65401 ;编辑
Static Spy := 65402 ;Spy
Static Pause := 65403 ;暂停
Static Suspend := 65404 ;挂起
Static Exit := 65405 ;退出
Static Lines := 65406 ;最近运行
Static Variable := 65407 ;变量信息
Static HotKeys := 65408 ;热键信息
Static KeyHistory := 65409 ;按键历史信息
Static Refresh := 65410 ;刷新 信息窗口
Static Help := 65411 ;打开CHM帮助文件
Static WebSite := 65412 ;打开 https://www.autohotkey.com
}
;----------------------------------------------------------------------
Class __Call extends Test.TestCallBase{
;可以在里面填写各种方法
FuncA(){
MsgBox,% A_LineNumber " : " A_ThisFunc
return
}
FuncB(){
MsgBox,% A_LineNumber " : " A_ThisFunc
return
}
FuncC(){
MsgBox,% A_LineNumber " : " A_ThisFunc
return
}
}
;----------------------------------------------------------------------
} ;TestBase Class End