官方文档

Main Page

Cheat Engine:Lua

图标

窗口左上角图标修改:

1
2
3
4
-- 加载外部图标文件 (.ico 格式)
icon = createIcon()
icon.loadFromFile('C:\\Users\\1\\Documents\\CE\\b1.ico')
form.Icon = icon

生成exe文件时可以选择应用图标

启动/关闭窗口

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
-- 窗体关闭事件处理
form.OnClose = function()
closeCE() -- 关闭Cheat Engine
return caFree -- 释放窗体资源
end

-- 检测CE版本
RequiredCEVersion=7.5
if (getCEVersion==nil) or (getCEVersion()<RequiredCEVersion) then
messageDialog('Please install Cheat Engine '..RequiredCEVersion, mtError, mbOK)
closeCE()
return caFree
end

targetProcess = "b1-Win64-Shipping.exe" -- 替换成你的目标进程名

-- 获取进程 ID
pid = getProcessIDFromProcessName(targetProcess)

-- 检查进程是否存在
if pid == nil or pid == 0 then
-- 进程未运行,提示用户
showMessage("错误", "请先运行游戏!")
closeCE()
return caFree
end

-- 附加进程
openProcess(targetProcess)
-- 显示窗口
form.show()

热键

热键列表

keys列表:Virtual Key Code Values

GenericHotkey类

1
2
3
4
5
createHotkey(function, keys, ...)
-- 返回一个已初始化的 GenericHotkey 类对象,最多支持 5 个按键组合

createHotkey(function, {keys, ...})
-- 通过表(table)形式传入按键组合,初始化一个快捷键,最多 5 个按键

属性

DelayBetweenActivate

类型integer(整数,毫秒)
功能
设置快捷键两次激活之间的最小时间间隔(单位:毫秒)。

  • 如果设置为 **0**,则使用全局默认延迟(由系统或框架定义)。
  • 如果设置为 正整数值(如 500),则强制在该时间间隔内禁止重复触发

用途
防止因按键抖动或用户快速连续触发导致多次执行回调函数

onHotKey

类型function(函数)
功能
绑定快捷键触发时调用的回调函数
用途
热键提示音;更新窗口UI

方法

getKeys()

  • 作用:获取当前设置的热键组合(返回一个列表)。

  • 返回{key1, key2, ...}

setKeys(key1, key2, ...)

  • 作用:设置新的热键组合

  • 参数:可变参数,每个参数是一个键名(字符串)。

setOnHotkey(callbackTable)

  • 作用:设置热键触发时的回调函数(传入一个包含 __call 方法的表或函数)。

  • 参数{ __call = function() ... end } 或直接传入函数。

getOnHotkey()

  • 作用:获取当前设置的热键回调函数。

  • 返回:回调函数(或回调表)。

示例

1
2
3
4
5
6
7
8
function test():
local DoubleMoney = getAddressList().getMemoryRecordByDescription("收益翻倍")
DoubleMoney.active = not DoubleMoney.active
end
-- 热键Ctrl+F
hotkey = createHotkey(test, VK_CONTROL, VK_F)
-- 1秒内仅允许触发一次
hotkey.DelayBetweenActivate = 1000

MemoryRecordHotkey类

MemoryRecordHotkey 是一个用于管理内存记录(MemoryRecord)关联热键的类,继承自 Object。主要用于只读操作,但可以通过事件属性(如 OnHotkey)进行自定义行为。如果需要不绑定内存记录的自定义热键,应使用通用热键类(如 GenericHotkey

属性

属性 类型 描述
Owner MemoryRecord 该热键所属的内存记录(只读)。
Keys Table 包含该热键的按键组合(如 {"ctrl", "A"})。
action Integer 热键触发时执行的操作(见 Action Values)。
value String 根据 action 类型使用的值(如 "100" 用于 mrhSetValue)。
ID Integer 热键的唯一标识符(只读)。
Active Boolean 如果为 true,热键生效;false 则忽略。
Description String 热键的描述信息。
HotkeyString String 格式化后的热键字符串(如 "Ctrl+A"只读)。
ActivateSound String 触发热键时播放的 .wav 文件名(位于当前表中)。
DeactivateSound String 取消热键时播放的 .wav 文件名(位于当前表中)。
OnHotkey Function(sender) 热键刚按下时调用的函数。
OnPostHotkey Function(sender) 热键触发且操作执行完毕后调用的函数。

操作值(Action Values)

常量 描述
mrhToggleActivation 0 切换激活/禁用(默认)。
mrhToggleActivationAllowIncrease 1 切换激活/禁用,激活时允许增加值。
mrhToggleActivationAllowDecrease 2 切换激活/禁用,激活时允许减少值。
mrhActivate 3 强制激活(设为 true)。
mrhDeactivate 4 强制禁用(设为 false)。
mrhSetValue 5 设置特定值(使用 value 属性)。
mrhIncreaseValue 6 增加值(按 value 的数值增加)。
mrhDecreaseValue 7 减少值(按 value 的数值减少)。

方法(Methods)

方法 参数 返回值 描述
doHotkey() 手动触发热键,模拟键盘按下事件。

MemoryRecord类的createHotkey方法

1
2
3
4
5
6
createHotkey(
keys: Table,
action: Integer,
value: String (optional),
description: String (optional)
) --返回一个MemoryRecordHotkey对象

示例

1
2
local DoubleMoney = getAddressList().getMemoryRecordByDescription("收益翻倍")
DoubleMoney.createHotkey({VK_CONTROL, VK_F}, 0) --热键Ctrl+F 切换激活/禁用

上述操作相当于使用右键脚本来设置热键(建议使用这一种)

鼠标连点

按住shift键,鼠标左键连点:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function rapidClickCurrentPos()
times = 4 -- 点击次数
delay_ms = 10 -- 点击间隔
for i = 1, times do
-- 按下左键
mouse_event(MOUSEEVENTF_LEFTDOWN)
sleep(delay_ms)
-- 释放左键
mouse_event(MOUSEEVENTF_LEFTUP)
-- 最后一次点击后不等待
if i ~= times then
sleep(delay_ms)
end
end
end

-- 创建热键
createHotkey(rapidClickCurrentPos, VK_SHIFT, VK_LBUTTON)
createHotkey(rapidClickCurrentPos, {VK_SHIFT, VK_LBUTTON})

游戏速度

设置游戏速度:

1
2
3
4
speedhack_setSpeed(5)                    --5 times the normal speed
speedhack_setSpeed(0.5) --Half the normal speed
speedhack_setSpeed(1) --Normal speed
getMainForm().cbSpeedhack.Checked=false --disables speedhack and unchecks the "Enable Speedhack"

获取当前游戏速度:

1
speedhack_getSpeed()

窗体模板

效果图:

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
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
-- 创建主窗体
form = createForm()
form.Caption = '游戏修改器'
form.Width = 450
form.Height = 1000
form.Position = 'poScreenCenter'

-- 位置设置
leftPosition = 40 -- 左侧初始位置
topPosition = 20 -- 顶部初始位置
verticalSpacing = 40 -- 垂直间距

-- 加载外部图标文件 (.ico 格式)
icon = createIcon()
icon.loadFromFile('C:\\Users\\1\\Documents\\CE\\CEIcon.ico')
form.Icon = icon

-- 复选框功能
-- 功能1
chk1 = createCheckBox(form)
chk1.Caption = '功能1'
chk1.Left = leftPosition
chk1.Top = topPosition
chk1.Width = 80

-- 功能2
topPosition = topPosition + verticalSpacing
chk2 = createCheckBox(form)
chk2.Caption = '功能2'
chk2.Left = leftPosition
chk2.Top = topPosition
chk2.Width = 80

-- 功能3
topPosition = topPosition + verticalSpacing
chk3 = createCheckBox(form)
chk3.Caption = '功能3'
chk3.Left = leftPosition
chk3.Top = topPosition
chk3.Width = 80

-- 功能4
topPosition = topPosition + verticalSpacing
chk4 = createCheckBox(form)
chk4.Caption = '功能4'
chk4.Left = leftPosition
chk4.Top = topPosition
chk4.Width = 80

-- 功能5
topPosition = topPosition + verticalSpacing
chk5 = createCheckBox(form)
chk5.Caption = '功能5'
chk5.Left = leftPosition
chk5.Top = topPosition
chk5.Width = 80

-- 功能6
topPosition = topPosition + verticalSpacing
chk6 = createCheckBox(form)
chk6.Caption = '功能6'
chk6.Left = leftPosition
chk6.Top = topPosition
chk6.Width = 80

-- 功能7
topPosition = topPosition + verticalSpacing
chk7 = createCheckBox(form)
chk7.Caption = '功能7'
chk7.Left = leftPosition
chk7.Top = topPosition
chk7.Width = 80

-- 功能8
topPosition = topPosition + verticalSpacing
chk8 = createCheckBox(form)
chk8.Caption = '功能8'
chk8.Left = leftPosition
chk8.Top = topPosition
chk8.Width = 80

-- 自定义修改
-- 功能1
topPosition = topPosition + verticalSpacing
btn1 = createButton(form)
btn1.Caption = '修改'
btn1.Left = leftPosition
btn1.Top = topPosition + 3
btn1.Width = 60

lbl1 = createLabel(form)
lbl1.Caption = '功能1:'
lbl1.Left = leftPosition + 70
lbl1.Top = topPosition + 3

edt1 = createEdit(form)
edt1.Left = leftPosition + 170
edt1.Top = topPosition
edt1.Width = 80
edt1.Text = '默认值'

-- 功能2
topPosition = topPosition + verticalSpacing
btn2 = createButton(form)
btn2.Caption = '修改'
btn2.Left = leftPosition
btn2.Top = topPosition + 3
btn2.Width = 60

lbl2 = createLabel(form)
lbl2.Caption = '功能2:'
lbl2.Left = leftPosition + 70
lbl2.Top = topPosition + 3

edt2 = createEdit(form)
edt2.Left = leftPosition + 170
edt2.Top = topPosition
edt2.Width = 80
edt2.Text = '默认值'

-- 功能3
topPosition = topPosition + verticalSpacing
btn3 = createButton(form)
btn3.Caption = '修改'
btn3.Left = leftPosition
btn3.Top = topPosition + 3
btn3.Width = 60

lbl3 = createLabel(form)
lbl3.Caption = '功能3:'
lbl3.Left = leftPosition + 70
lbl3.Top = topPosition + 3

edt3 = createEdit(form)
edt3.Left = leftPosition + 170
edt3.Top = topPosition
edt3.Width = 80
edt3.Text = '默认值'

-- 功能4
topPosition = topPosition + verticalSpacing
btn4 = createButton(form)
btn4.Caption = '修改'
btn4.Left = leftPosition
btn4.Top = topPosition + 3
btn4.Width = 60

lbl4 = createLabel(form)
lbl4.Caption = '功能4:'
lbl4.Left = leftPosition + 70
lbl4.Top = topPosition + 3

edt4 = createEdit(form)
edt4.Left = leftPosition + 170
edt4.Top = topPosition
edt4.Width = 80
edt4.Text = '默认值'

-- 功能5
topPosition = topPosition + verticalSpacing
btn5 = createButton(form)
btn5.Caption = '修改'
btn5.Left = leftPosition
btn5.Top = topPosition + 3
btn5.Width = 60

lbl5 = createLabel(form)
lbl5.Caption = '功能5:'
lbl5.Left = leftPosition + 70
lbl5.Top = topPosition + 3

edt5 = createEdit(form)
edt5.Left = leftPosition + 170
edt5.Top = topPosition
edt5.Width = 80
edt5.Text = '默认值'

-- 热键
-- 热键功能1
topPosition = topPosition + verticalSpacing
lblhk1 = createLabel(form)
lblhk1.Caption = 'Ctrl+F1: 功能1'
lblhk1.Left = leftPosition
lblhk1.Top = topPosition

-- 热键功能2
topPosition = topPosition + verticalSpacing
lblhk2 = createLabel(form)
lblhk2.Caption = 'Ctrl+F2: 功能2'
lblhk2.Left = leftPosition
lblhk2.Top = topPosition

-- 热键功能3
topPosition = topPosition + verticalSpacing
lblhk3 = createLabel(form)
lblhk3.Caption = 'Ctrl+F3: 功能3'
lblhk3.Left = leftPosition
lblhk3.Top = topPosition

-- 热键功能4
topPosition = topPosition + verticalSpacing
lblhk4 = createLabel(form)
lblhk4.Caption = 'Ctrl+F4: 功能4'
lblhk4.Left = leftPosition
lblhk4.Top = topPosition

-- 热键功能5
topPosition = topPosition + verticalSpacing
lblhk5 = createLabel(form)
lblhk5.Caption = 'Ctrl+F5: 功能5'
lblhk5.Left = leftPosition
lblhk5.Top = topPosition

-- 热键功能6
topPosition = topPosition + verticalSpacing
lblhk6 = createLabel(form)
lblhk6.Caption = 'Ctrl+F6: 功能6'
lblhk6.Left = leftPosition
lblhk6.Top = topPosition

-- 分隔线(使用标签代替)
topPosition = topPosition + verticalSpacing
line = createLabel(form)
line.Caption = ''
line.Left = leftPosition
line.Top = topPosition
line.Width = form.Width - (leftPosition * 2)
line.Height = 2
line.BevelOuter = 'bvLowered' -- 使用边框效果作为分隔线

-- 功能描述区域
topPosition = topPosition + 10
memo = createMemo(form)
memo.Left = leftPosition
memo.Top = topPosition
memo.Width = form.Width - (leftPosition * 2)
memo.Height = 80
memo.ReadOnly = true
memo.Lines.Text = '日志:'

-- 添加作者声明
local authorLabel = createLabel(form)
authorLabel.Caption = 'Developed by xxx.'
authorLabel.Left = form.Width - 185 -- 右对齐
authorLabel.Top = form.Height - 30
authorLabel.Font.Color = 0x808080 -- 灰色文字
authorLabel.Font.Style = 'fsItalic' -- 斜体

-- 复选框功能 - 使用控件标题动态拼接
-- 复选框1
chk1.OnChange = function(sender)
if sender.Checked then
memo.Lines.add(chk1.Caption .. ' 已启用!')
else
memo.Lines.add(chk1.Caption .. ' 已禁用!')
end
end

-- 复选框2
chk2.OnChange = function(sender)
if sender.Checked then
memo.Lines.add(chk2.Caption .. ' 已启用!')
else
memo.Lines.add(chk2.Caption .. ' 已禁用!')
end
end

-- 复选框3
chk3.OnChange = function(sender)
if sender.Checked then
memo.Lines.add(chk3.Caption .. ' 已启用!')
else
memo.Lines.add(chk3.Caption .. ' 已禁用!')
end
end

-- 复选框4
chk4.OnChange = function(sender)
if sender.Checked then
memo.Lines.add(chk4.Caption .. ' 已启用!')
else
memo.Lines.add(chk4.Caption .. ' 已禁用!')
end
end

-- 复选框5
chk5.OnChange = function(sender)
if sender.Checked then
memo.Lines.add(chk5.Caption .. ' 已启用!')
else
memo.Lines.add(chk5.Caption .. ' 已禁用!')
end
end

-- 复选框6
chk6.OnChange = function(sender)
if sender.Checked then
memo.Lines.add(chk6.Caption .. ' 已启用!')
else
memo.Lines.add(chk6.Caption .. ' 已禁用!')
end
end

-- 复选框7
chk7.OnChange = function(sender)
if sender.Checked then
memo.Lines.add(chk7.Caption .. ' 已启用!')
else
memo.Lines.add(chk7.Caption .. ' 已禁用!')
end
end

-- 复选框8
chk8.OnChange = function(sender)
if sender.Checked then
memo.Lines.add(chk8.Caption .. ' 已启用!')
else
memo.Lines.add(chk8.Caption .. ' 已禁用!')
end
end

-- 功能按钮实现
btn1.OnClick = function()
local value = edt1.Text
memo.Lines.add(lbl1.Caption .. ' 已修改: ' .. value)
end

btn2.OnClick = function()
local value = edt2.Text
memo.Lines.add(lbl2.Caption .. ' 已修改: ' .. value)
end

btn3.OnClick = function()
local value = edt3.Text
memo.Lines.add(lbl3.Caption .. ' 已修改: ' .. value)
end

btn4.OnClick = function()
local value = edt4.Text
-- 使用标签的Caption属性
memo.Lines.add(lbl4.Caption .. ' 已修改: ' .. value)
end

btn5.OnClick = function()
local value = edt5.Text
-- 使用标签的Caption属性
memo.Lines.add(lbl5.Caption .. ' 已修改: ' .. value)
end


-- 热键
-- 热键F1
function demo()
memo.Lines.add(lblhk1.Caption .. ' 热键已按下!')
end

F1Hotkey = createHotkey(demo, VK_F1)
-- 1秒内仅允许触发一次
F1Hotkey.DelayBetweenActivate = 1000

-- 检测CE版本
RequiredCEVersion=7.5
if (getCEVersion==nil) or (getCEVersion()<RequiredCEVersion) then
messageDialog('Please install Cheat Engine '..RequiredCEVersion, mtError, mbOK)
closeCE()
return caFree
end

targetProcess = "" -- 替换成你的目标进程名

-- 获取进程 ID
pid = getProcessIDFromProcessName(targetProcess)

-- 检查进程是否存在
if pid == nil or pid == 0 then
-- 进程未运行,提示用户
showMessage("错误", "请先运行游戏!")
closeCE()
return caFree
end

-- 附加进程
openProcess(targetProcess)

-- 显示窗口
form.show()

-- 窗体关闭事件处理
form.OnClose = function()
closeCE() -- 关闭Cheat Engine
return caFree -- 释放窗体资源
end