Logitech Lua 脚本生成工具
| From dataclasses import dataclass | |
| 通过输入导入 List、Union、Optional、Tuple | |
| # Logitech G HUB Lua API 的数据类 | |
| @dataclass | |
| 班级活动: | |
| 名称:STR | |
| arg: 可选[Union[int, str]] = 无 | |
| 家族:可选[力量] = 无 | |
| @dataclass | |
| 职业说明: | |
| 名称:可选[力量] = 无 | |
| 扫描码:可选[int] = 无 | |
| @dataclass | |
| 上级鼠标按键: | |
| 按钮:智力 | |
| @dataclass | |
| 类别鼠标位置: | |
| X:智力 | |
| 且:智力 | |
| @dataclass | |
| 职业宏: | |
| 名称:STR | |
| @dataclass | |
| classDeviceProperty: | |
| 装置:力量 | |
| 性质:力量 | |
| 值:Union[int, bool] | |
| @dataclass | |
| 职业MouseSpeed: | |
| 速度:可选[int] = 无 | |
| 增量:可选[int] = 无 | |
| 递减:可选[int] = 无 | |
| 类 LuaScript: | |
| 反__init__(自尊): | |
| self.code = [] | |
| self.indent_level = 0 | |
| 防守_add_line(自力,线:力量): | |
| self.code.append(“ ” * self.indent_level + 行) | |
| 反_indent(自尊): | |
| self.indent_level += 1 | |
| 反_dedent(自尊)): | |
| self.indent_level -= 1 | |
| 防御 start_event_handler(自尊声): | |
| self._add_line(“函数 OnEvent(事件,arg,family)”) | |
| self._indent() | |
| 反end_event_handler(自尊): | |
| self._dedent() | |
| self._add_line(“结束”) | |
| def add_event_condition(自我,事件:事件): | |
| 条件 = f“if事件 == \”{event.name}\"" | |
| 如果 event.arg 不是 None: | |
| 条件 += F“ 和 ARG == {event.arg}” | |
| 如果event.family不是无: | |
| 条件+= F“和家庭 == \”{event.family}\"" | |
| self._add_line(条件 + “then”) | |
| self._indent() | |
| 反end_condition(自尊声): | |
| self._dedent() | |
| self._add_line(“结束”) | |
| def get_mkey_state(self, family: Optional[str] = “kb”) -> str: | |
| var_name = “currentMKey” | |
| self._add_line(f“local {var_name} = GetMKeyState(\”{family}\“)”) | |
| 返回var_name | |
| def set_mkey_state(self, mkey: int, family: Optional[str] = “kb”): | |
| self._add_line(f“SetMKeyState({mkey}, \”{family}\“)”) | |
| DEF Sleep(自言,暂停:智力): | |
| self._add_line(f“Sleep({timeout})”) | |
| def output_log_message(self, message: str, *args): | |
| formatted_args = “, ”.join(str(arg) for arg in arg) | |
| 如果formatted_args: | |
| self._add_line(f“OutputLogMessage(\”{message}\“, {formatted_args})”) | |
| 其他: | |
| self._add_line(f“OutputLogMessage(\”{message}\“)”) | |
| 防御get_running_time(自我)->力量: | |
| var_name = “运行时间” | |
| self._add_line(f“local {var_name} = GetRunningTime()”) | |
| 返回var_name | |
| def get_date(self, format_str: Optional[str] = 无,time_table: Optional[dict] = 无) -> str: | |
| var_name = “日期” | |
| 如果format_str 和 time_table: | |
| formatted_time_table = “, ”.join([f“{k} = {v}” 对于 k, v in time_table.items()]) | |
| self._add_line(f“local {var_name} = GetDate(\”{format_str}\“, {{{formatted_time_table}}}”)“) | |
| 埃利夫format_str: | |
| self._add_line(f“local {var_name} = GetDate(\”{format_str}\“)”) | |
| 其他: | |
| self._add_line(f“local {var_name} = GetDate()”) | |
| 返回var_name | |
| 反clear_log(自言): | |
| self._add_line(“ClearLog()”) | |
| def press_key(self, keys: List[Key]): | |
| key_args = “, ”.join([f“\”{key.name}\“” 如果key.nameelse str(key.scancode) for key in keys]) | |
| self._add_line(f“PressKey({key_args})”) | |
| def release_key(self, keys: List[Key]): | |
| key_args = “, ”.join([f“\”{key.name}\“” 如果key.nameelse str(key.scancode) for key in keys]) | |
| self._add_line(f“ReleaseKey({key_args})”) | |
| def press_and_release_key(self, keys: List[Key]): | |
| key_args = “, ”.join([f“\”{key.name}\“” 如果key.nameelse str(key.scancode) for key in keys]) | |
| self._add_line(f“PressAndReleaseKey({key_args})”) | |
| def is_modifier_pressed(self,键名:str) -> str: | |
| var_name = f“is{keyname.capitalize()}Pressed” | |
| self._add_line(f“local {var_name} = IsModifierPressed(\”{keyname}\“)”) | |
| 返回var_name | |
| def is_key_lock_on(self,关键字名:str) -> str: | |
| var_name = f“is{keyname.capitalize()}On” | |
| self._add_line(f“local {var_name} = IsKeyLockOn(\”{keyname}\“)”) | |
| 返回var_name | |
| def press_mouse_button(自制,按键:鼠标按键): | |
| self._add_line(f“按键鼠标按钮({button.button})”) | |
| 防御release_mouse_button(自我,按键:鼠标按键): | |
| self._add_line(f“ReleaseMouseButton({button.button})”) | |
| def press_and_release_mouse_button(自我,按键:鼠标按键): | |
| self._add_line(f“按键放开鼠标按钮({button.button})”) | |
| 防御is_mouse_button_pressed(自我,按键:鼠标按键)-力量>: | |
| var_name = f“isMouseButton{button.button}Pressed” | |
| self._add_line(f“local {var_name} = IsMouseButtonPressed({button.button})”) | |
| 返回var_name | |
| def move_mouse_to(self, position: MousePosition): | |
| self._add_line(f“MoveMouseTo({position.x}, {position.y})”) | |
| 防御 move_mouse_wheel(自我,点击:智力): | |
| self._add_line(f“MoveMouseWheel({点击})”) | |
| 防御move_mouse_relative(self, x: int, y: int): | |
| self._add_line(f“MoveMouseRelative({x}, {y})”) | |
| def move_mouse_to_virtual(self, position: MousePosition): | |
| self._add_line(f“MoveMouseToVirtual({position.x}, {position.y})”) | |
| def get_mouse_position(self) -> 元组[str, str]: | |
| x_var = “x” | |
| y_var = “和” | |
| self._add_line(f“local {x_var}, {y_var} = GetMousePosition()”) | |
| x_var回来,y_var | |
| def enable_primary_mouse_button_events(self,enable: bool): | |
| self._add_line(f“EnablePrimaryMouseButtonEvents({str(enable).lower()}”)“) | |
| def play_macro(自我,宏观:宏观): | |
| self._add_line(f“PlayMacro(\”{macro.name}\")") | |
| def press_macro(自,宏观:宏观): | |
| self._add_line(f“PressMacro(\”{macro.name}\")") | |
| def release_macro(自我,宏观:宏观): | |
| self._add_line(f“ReleaseMacro(\”{macro.name}\")") | |
| 反abort_macro(自尊): | |
| self._add_line(“AbortMacro()”) | |
| def output_debug_message(self, message: str, *args): | |
| formatted_args = “, ”.join(str(arg) for arg in arg) | |
| 如果formatted_args: | |
| self._add_line(f“OutputDebugMessage(\”{message}\“, {formatted_args})”) | |
| 其他: | |
| self._add_line(f“OutputDebugMessage(\”{message}\“)”) | |
| def 生成(self) -> 力量: | |
| 返回 “\n”.join(self.code) | |
| # 示例用法 | |
| script = LuaScript() | |
| script.start_event_handler() | |
| script.add_event_condition(事件(name=“PROFILE_ACTIVATED”)) | |
| script.output_log_message(“配置文件激活”) | |
| script.end_condition() | |
| script.add_event_condition(Event(name=“G_PRESSED”, arg=1)) | |
| mkey_var = script.get_mkey_state() | |
| script.output_log_message(“当前M键状态:%d”,mkey_var) | |
| script.set_mkey_state(1) | |
| script.press_key([Key(name(“a”)]) | |
| 脚本.睡眠(100) | |
| script.release_key([Key(name(“a”)]) | |
| script.press_and_release_key([Key(scancode=30)]) | |
| shift_pressed =script.is_modifier_pressed(“shift”) | |
| script.add_event_condition(Event(name=“G_PRESSED”, arg=2)) | |
| script._add_line(f“如果 {shift_pressed} 那么”) | |
| script._indent() | |
| script.output_log_message(“Shift键被按下”) | |
| script._dedent() | |
| script.end_condition() | |
| numlock_on =script.is_key_lock_on(“数姆锁”) | |
| script.add_event_condition(Event(name=“G_PRESSED”, arg=3)) | |
| script._add_line(f“如果 {numlock_on} 那么”) | |
| script._indent() | |
| script.press_and_release_key([Key(name=“numlock”)]) | |
| script._dedent() | |
| script.end_condition() | |
| script.press_mouse_button(鼠标按键(button=1)) | |
| script.release_mouse_button(鼠标按键(button=1)) | |
| script.press_and_release_mouse_button(鼠标按键(button=3)) | |
| mb3_pressed =script.is_mouse_button_pressed(鼠标按键(button=3)) | |
| script.add_event_condition(Event(name=“G_PRESSED”, arg=4)) | |
| script._add_line(f“if {mb3_pressed} then”) | |
| script._indent() | |
| script.output_log_message(“右键被按下”) | |
| script._dedent() | |
| script.end_condition() | |
| script.move_mouse_to(鼠标位置(x=0, y=0)) | |
| script.move_mouse_wheel(3) | |
| script.move_mouse_relative(10,-5) | |
| script.move_mouse_to_virtual(鼠标位置(x=32767,y=32767)) | |
| x,y = script.get_mouse_position() | |
| script.add_event_condition(Event(name=“G_PRESSED”, arg=5)) | |
| script.output_log_message(“鼠标位置:x=%d, y=%d”, x, y) | |
| script.end_condition() | |
| script.enable_primary_mouse_button_events(真实) | |
| script.play_macro(Macro(name=“my_macro”)) | |
| script.press_macro(Macro(name=“my_macro”)) | |
| script.release_macro(Macro(name=“my_macro”)) | |
| 脚本.睡眠(100) | |
| script.abort_macro() | |
| script.clear_log() | |
| running_time = script.get_running_time() | |
| script.output_log_message(“脚本已运行 %d ms”,running_time) | |
| 今天 = script.get_date(“%Y-%m-%d %H:%M:%S”) | |
| script.output_log_message(“今天的日期和时间:%s”,今天) | |
| script.output_debug_message(“这是一个调试消息:%d”,第123页) | |
| script.end_condition() | |
| script.end_event_handler() | |
| print(script.generate()) |
罗技G HUB双API参考(V2023.5)
本文档为罗技G HUB Lua API提供了简明的参考,版本为2023.5。它旨在快速查找功能规范和使用示例。
核心职能
OnEvent
处理脚本事件。你必须实现这个函数。
规格:
function OnEvent(event, arg [family]) end
参数:
event(字符串):事件标识符。arg(变化不一):与事件相关的争论。family(字符串,可选):设备家族(“kb”、“lhc”、“mouse”)。
活动:
| 事件 | arg | family | 描述 |
|---|---|---|---|
"PROFILE_ACTIVATED" | nil | 配置文件已激活。这是首次出现的事件。 | |
"PROFILE_DEACTIVATED" | nil | 档案已停用。这是最后一次出现的事件。 | |
"G_PRESSED" | 1-18(G1-G18) | 按下了G键。 | |
"G_RELEASED" | 1-18(G1-G18) | G键已释放。 | |
"M_PRESSED" | 1-3(M1-M3) | 按了M键。 | |
"M_RELEASED" | 1-3(M1-M3) | M键释放。 | |
"MOUSE_BUTTON_PRESSED" | 2+ | “老鼠” | 鼠标按键(默认左键除外,详见EnablePrimaryMouseButtonEvents). |
"MOUSE_BUTTON_RELEASED" | 2+ | “老鼠” | 鼠标按键松开(默认左键除外,参见EnablePrimaryMouseButtonEvents). |
示例:
function OnEvent(event, arg, family)
if event == "PROFILE_ACTIVATED" then
OutputLogMessage("Profile activated\n")
elseif event == "G_PRESSED" and arg == 1 then
OutputLogMessage("G1 key pressed\n")
end
endGetMKeyState
读取M键当前状态。
规格:
mkey = GetMKeyState([family])
参数:
family(字符串,可选):设备家族(“kb”、“lhc”)。默认为“kb”。
回报价值:
mkey(编号):1(M1)、2(M2)或3(M3)。
示例:
local currentMKey = GetMKeyState()
OutputLogMessage("Current M key state: %d\n", currentMKey)SetMKeyState
设置M键当前状态。
规格:
SetMKeyState(mkey, [family])
参数:
mkey(编号):1(M1)、2(M2)或3(M3)。family(字符串,可选):设备家族(“kb”、“lhc”)。默认为“kb”。
示例:
function OnEvent(event, arg)
if event == "G_PRESSED" and arg == 1 then
SetMKeyState(1) -- Set M key state to M1
end
endSleep
暂停脚本指定时间。
规格:
Sleep(timeout)
参数:
timeout(数字):睡眠时间毫秒。
示例:
Sleep(100) -- Pause for 100 milliseconds
OutputLogMessage
向脚本编辑的控制台发送格式化消息。
规格:
OutputLogMessage(...)
参数:
...(弦):printf-风格格式化字符串和参数。
示例:
OutputLogMessage("Hello, world! This is a number: %d\n", 42)GetRunningTime
返回脚本的运行时间(毫秒级)。
规格:
elapsed = GetRunningTime()
回报价值:
elapsed(数字):经过时间,毫秒。
示例:
local runningTime = GetRunningTime()
OutputLogMessage("Script has been running for %d ms\n", runningTime)GetDate
检索格式化的日期和时间。
规格:
date = GetDate([format [, time]])
参数:
format(字符串,可选):日期格式字符串(strftime风格)。“*t”表示表格格式。time(表格,可选):时刻表。
回报价值:
date(字符串或表格):格式化日期/时间。
示例:
local today = GetDate("%Y-%m-%d %H:%M:%S")
OutputLogMessage("Today's date and time: %s\n", today)ClearLog
清除脚本编辑器的输出窗口。
规格:
ClearLog()
示例:
ClearLog()
键盘功能
PressKey
模拟键盘按键操作。
规格:
PressKey(scancode [, scancode ...]) PressKey(keyname [, keyname ...])
参数:
scancode(编号):密钥的数字扫描码。keyname(字符串):预定义的键名。(完整的扫描码和键名列表请参见文档附录A。)
示例:
PressKey("a") -- Press the "a" key
PressKey(30) -- Press the key with scancode 30 ("a")
PressKey("shift", "a") -- Press Shift and "a" togetherReleaseKey
模拟键盘按键释放。
规格:
ReleaseKey(scancode [, scancode ...]) ReleaseKey(keyname [, keyname ...])
参数:
scancode(编号):密钥的数字扫描码。keyname(字符串):预定义的键名。
示例:
ReleaseKey("a") -- Release the "a" key
ReleaseKey(30) -- Release the key with scancode 30PressAndReleaseKey
模拟按键操作后释放。
规格:
PressAndReleaseKey(scancode [, scancode ...]) PressAndReleaseKey(keyname [, keyname ...])
参数:
scancode(编号):密钥的数字扫描码。keyname(字符串):预定义的键名。
示例:
PressAndReleaseKey("a") -- Press and release "a"IsModifierPressed
检查是否按下了修饰键(Alt、Shift、Ctrl)。
规格:
boolean = IsModifierPressed(keyname)
参数:
keyname(字符串):“lalt”、“ralt”、“alt”、“lshift”、“rshift”、“shift”、“lctrl”、“rctrl”、“ctrl”。
回报价值:
boolean(布尔值):true如果被逼迫,false否则。
示例:
if IsModifierPressed("shift") then
OutputLogMessage("Shift key is pressed\n")
endIsKeyLockOn
检查是否启用了锁钥匙(滚动锁定、大写锁定、数字锁定)。
规格:
boolean = IsKeyLockOn(keyname)
参数:
keyname(字符串):“滚动锁”、“大写锁”、“数码锁”。
回报价值:
boolean(布尔值):true如果启用,false否则。
示例:
if IsKeyLockOn("numlock") then
PressAndReleaseKey("numlock") -- Turn off Num Lock
end鼠标功能
PressMouseButton
模拟鼠标按键的操作。
规格:
PressMouseButton(button)
参数:
button(数字):1(左),2(中间),3(右),4(X1),5(X2)。
示例:
PressMouseButton(1) -- Press the left mouse button
ReleaseMouseButton
模拟鼠标按键释放。
规格:
ReleaseMouseButton(button)
参数:
button(数字):1(左),2(中间),3(右),4(X1),5(X2)。
示例:
ReleaseMouseButton(1) -- Release the left mouse button
PressAndReleaseMouseButton
模拟鼠标按键后松开。
规格:
PressAndReleaseMouseButton(button)
参数:
button(数字):1(左),2(中间),3(右),4(X1),5(X2)。
示例:
PressAndReleaseMouseButton(1) -- Click the left mouse button
IsMouseButtonPressed
检查是否按下了鼠标按钮。
规格:
boolean = IsMouseButtonPressed(button)
参数:
button(数字):1(左),2(中间),3(右),4(X1),5(X2)。
回报价值:
boolean(布尔值):true如果被逼迫,false否则。
示例:
if IsMouseButtonPressed(3) then
OutputLogMessage("Right mouse button is pressed\n")
endMoveMouseTo
将鼠标光标移动到绝对屏幕位置。
规格:
MoveMouseTo(x, y)
参数:
x(数字):归一化的X坐标(0-65535)。y(数字):归一化的Y坐标(0-65535)。
示例:
MoveMouseTo(0, 0) -- Move to top-left corner
MoveMouseWheel
模拟鼠标滚轮的运动。
规格:
MoveMouseWheel(clicks)
参数:
clicks(数字):点击次数(正向表示向上,负数表示向下)。
示例:
MoveMouseWheel(3) -- Scroll up 3 clicks MoveMouseWheel(-1) -- Scroll down 1 click
MoveMouseRelative
移动鼠标光标相对于当前位置。
规格:
MoveMouseRelative(x, y)
参数:
x(数字):X轴运动(右轴正,左轴负)。y(数字):Y轴运动(正向表示向下,负向表示向上)。
示例:
MoveMouseRelative(10, -5) -- Move 10 pixels right and 5 pixels up
MoveMouseToVirtual
在多显示器设置中,将鼠标光标移动到绝对位置。
规格:
MoveMouseToVirtual(x, y)
参数:
x(数字):归一化的X坐标(0-65535)。y(数字):归一化的Y坐标(0-65535)。
示例:
MoveMouseToVirtual(32767, 32767) -- Move to the center of the virtual desktop
GetMousePosition
它能得到当前归一化的鼠标光标位置。
规格:
x, y = GetMousePosition()
回报价值:
x(数字):归一化的X坐标(0-65535)。y(数字):归一化的Y坐标(0-65535)。
示例:
local x, y = GetMousePosition()
OutputLogMessage("Mouse position: x=%d, y=%d\n", x, y)SetMouseDPITable
G HUB中没有实现。为游戏鼠标设置DPI表。
规格:
SetMouseDPITable({value1, value2, ...}, [index])参数:
{value1, value2, ...}(表):DPI数组。index(编号,可选):基于1的索引,设置为当前DPI。
SetMouseDPITableIndex
G HUB中没有实现。设置当前的DPI表索引。
规格:
SetMouseDPITableIndex(index)
参数:
index(数字):基于1的DPI表索引。
EnablePrimaryMouseButtonEvents
启用或禁用主鼠标(左)键的事件报告。
规格:
EnablePrimaryMouseButtonEvents(enable)
参数:
enable(布尔值):true为了实现,false去失效。
示例:
EnablePrimaryMouseButtonEvents(true) -- Enable left mouse button events
液晶显示器功能(G15、G19等)
注:这些功能在 G HUB 中未实现。
OutputLCDMessage
在液晶显示器上添加一行文字。
规格:
OutputLCDMessage(text [, timeout])
参数:
text(字符串):文本显示。timeout(数字,可选):超时(毫秒)(默认1000)。
ClearLCD
清除LCD屏幕。
规格:
ClearLCD()
宏函数
PlayMacro
播放一个已有的宏。
规格:
PlayMacro(macroname)
参数:
macroname(字符串):宏的名字。
示例:
PlayMacro("my_macro")PressMacro
通过模拟按键按下来播放宏。
规格:
PressMacro(macroname)
参数:
macroname(字符串):宏的名字。
示例:
PressMacro("my_macro")ReleaseMacro
通过模拟按键释放来播放宏。
规格:
ReleaseMacro(macroname)
参数:
macroname(字符串):宏的名字。
示例:
ReleaseMacro("my_macro")AbortMacro
中止正在运行的宏是从脚本启动的。
规格:
AbortMacro()
示例:
PlayMacro("my_macro")
Sleep(100)
AbortMacro()设备特定功能
SetBacklightColor
G HUB中没有实现。设置支持设备的背光颜色。
规格:
SetBacklightColor(red, green, blue, [family])
参数:
red(数字):红色强度(0-255)。green(数字):绿色强度(0-255)。blue(数字):蓝色强度(0-255)。family(字符串,可选):“KB”、“LHC”。
SetSteeringWheelProperty
G HUB中没有实现。为方向盘设备(G29,G920)设置属性。
规格:
SetSteeringWheelProperty(device, property, value)
参数:
device(字符串):“G29”或“G920”。property(字符串):“operatingRange”、“combinedPedals”、“defaultCenteringSpring”、“defaultCenteringSpringStrength”。value(数字或布尔值):房产价值。
G13专用功能
注:这些功能在 G HUB 中未实现。
SetMouseSpeed
它能在G13上设置摇杆鼠标速度。
规格:
SetMouseSpeed(speed)
参数:
speed(数字):绝对鼠标速度(32-255)。
GetMouseSpeed
它能获得G13当前的摇杆鼠标速度。
规格:
speed = GetMouseSpeed()
回报价值:
speed(数字):当前鼠标速度。
IncrementMouseSpeed
增加摇杆鼠标速度。
规格:
IncrementMouseSpeed(increment)
参数:
increment(数字):增量值。
DecrementMouseSpeed
降低摇杆鼠标的移动速度。
规格:
DecrementMouseSpeed(decrement)
参数:
decrement(数字):递减值。
调试
OutputDebugMessage
向Windows调试器发送消息。
规格:
OutputDebugMessage(...)
参数:
...(弦):printf-风格格式化字符串和参数。
示例:
OutputDebugMessage("This is a debug message: %d\n", 123)标准Lua 5.4库
支持以下标准Lua 5.4库。详细信息请参阅Lua 5.4文档: