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
end

GetMKeyState

读取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
end

Sleep

暂停脚本指定时间。

规格:

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" together

ReleaseKey

模拟键盘按键释放。

规格:

ReleaseKey(scancode [, scancode ...])
ReleaseKey(keyname [, keyname ...])

参数:

  • scancode(编号):密钥的数字扫描码。
  • keyname(字符串):预定义的键名。

示例:

ReleaseKey("a")    -- Release the "a" key
ReleaseKey(30)     -- Release the key with scancode 30

PressAndReleaseKey

模拟按键操作后释放。

规格:

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")
end

IsKeyLockOn

检查是否启用了锁钥匙(滚动锁定、大写锁定、数字锁定)。

规格:

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")
end

MoveMouseTo

将鼠标光标移动到绝对屏幕位置。

规格:

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文档:

数学函数(math.*)

字符串函数(string.*)

表函数(table.*)

添加评论
点赞收藏
点踩分享查看原文
评论
?
参与讨论