Created
January 11, 2024 07:20
-
-
Save kaigouthro/1d2a7576b446886c4ff31ccfd72bbfdf to your computer and use it in GitHub Desktop.
logitech_lua_python.py
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class LuaScriptGenerator: | |
def __init__(self): | |
self.function_templates = { | |
"PressAndReleaseKey": "PressAndReleaseKey({key})", | |
"PressKey": "PressKey({key})", | |
"ReleaseKey": "ReleaseKey({key})", | |
"PressAndReleaseMouseButton": "PressAndReleaseMouseButton({button})", | |
"PressMouseButton": "PressMouseButton({button})", | |
"ReleaseMouseButton": "ReleaseMouseButton({button})", | |
# Add more function templates as needed | |
# AbortMacro() | |
# ClearLog() | |
# EnablePrimaryMouseButtonEvent() | |
# OnEvent() | |
# GetDate() | |
# GetKeyState() | |
# GetMKeyState() | |
# GetMousePosition() | |
# GetRunningTime() | |
# IsKeyLockOn() | |
# IsModifierPressed() | |
# IsMouseButtonPressed() | |
# MoveMouseRelative() | |
# MoveMouseTo() | |
# MoveMouseToVirtual() | |
# MoveMouseWheel() | |
# OnEvent() | |
# OutputDebugMessage() | |
# OutputLCDMessage() | |
# OutputLogMessage() | |
# PlayMacro() | |
# PressAndReleaseKey() | |
# PressAndReleaseMouseButton() | |
# PressKey() | |
# PressMouseButton() | |
# ReleaseKey() | |
# ReleaseMouseButton() | |
# SetBacklightColor( | |
# SetMKeyState() | |
# SetMouseDPITable() | |
# SetMouseDPITableIndex() | |
# Sleep() | |
} | |
self.key_templates = { | |
"minus": "minus", | |
"equal": "equal", | |
"enter": "enter", | |
"escape": "escape", | |
"insert": "insert", | |
"delete": "delete", | |
"pause": "pause", | |
"printscreen": "printscreen", | |
"backspace": "backspace", | |
"spacebar": "spacebar", | |
"tab": "tab", | |
"scrolllock": "scrolllock", | |
"capslock": "capslock", | |
"numlock": "numlock", | |
"appkey": "appkey", | |
"up": "up", | |
"down": "down", | |
"home": "home", | |
"end": "end", | |
"lgui": "lgui", | |
"rgui": "rgui", | |
"left": "left", | |
"right": "right", | |
"pagedown": "pagedown", | |
"pageup": "pageup", | |
"lbracket": "lbracket", | |
"rbracket": "rbracket", | |
"comma": "comma", | |
"tilde": "tilde", | |
"period": "period", | |
"quote": "quote", | |
"semicolon": "semicolon", | |
"slash": "slash", | |
"backslash": "backslash", | |
"non_us_slash": "non_us_slash", | |
"lshift": "lshift", | |
"rshift": "rshift", | |
"lctrl": "lctrl", | |
"rctrl": "rctrl", | |
"lalt": "lalt", | |
"ralt": "ralt", | |
"numenter": "numenter", | |
"numperiod": "numperiod", | |
"numplus": "numplus", | |
"numminus": "numminus", | |
"numslash": "numslash", | |
"num0": "num0", | |
"num1": "num1", | |
"num2": "num2", | |
"num3": "num3", | |
"num4": "num4", | |
"num5": "num5", | |
"num6": "num6", | |
"num7": "num7", | |
"num8": "num8", | |
"num9": "num9", | |
"f1": "f1", | |
"f2": "f2", | |
"f3": "f3", | |
"f4": "f4", | |
"f5": "f5", | |
"f6": "f6", | |
"f7": "f7", | |
"f8": "f8", | |
"f9": "f9", | |
"f10": "f10", | |
"f11": "f11", | |
"f12": "f12", | |
"f13": "f13", | |
"f14": "f14", | |
"f15": "f15", | |
"f16": "f16", | |
"f17": "f17", | |
"f18": "f18", | |
"f19": "f19", | |
"f20": "f20", | |
"f21": "f21", | |
"f22": "f22", | |
"f23": "f23", | |
"f24": "f24", | |
"a": "a", | |
"b": "b", | |
"c": "c", | |
"d": "d", | |
"e": "e", | |
"f": "f", | |
"g": "g", | |
"h": "h", | |
"i": "i", | |
"j": "j", | |
"k": "k", | |
"l": "l", | |
"m": "m", | |
"n": "n", | |
"o": "o", | |
"p": "p", | |
"q": "q", | |
"r": "r", | |
"s": "s", | |
"t": "t", | |
"v": "v", | |
"w": "w", | |
"x": "x", | |
"y": "y", | |
"z": "z", | |
"1": "1", | |
"2": "2", | |
"3": "3", | |
"4": "4", | |
"5": "5", | |
"6": "6", | |
"7": "7", | |
"8": "8", | |
"9": "9", | |
"0": "0", | |
# Add more key templates as needed | |
} | |
self.button_templates = { | |
1: "LB", | |
2: "MB", | |
3: "RB", | |
4: "XB1", | |
5: "XB2", | |
# Add more button templates as needed | |
} | |
self.lua_script = "" | |
self.lua_functions = { | |
"AbortMacro": self.abort_macro, | |
"ClearLog": self.clear_log, | |
"EnablePrimaryMouseButtonEvent": self.enable_primary_mouse_button_event, | |
"OnEvent": self.on_event, | |
"GetDate": self.get_date, | |
"GetKeyState": self.get_key_state, | |
"GetMKeyState": self.get_m_key_state, | |
"GetMousePosition": self.get_mouse_position, | |
"GetRunningTime": self.get_running_time, | |
"IsKeyLockOn": self.is_key_lock_on, | |
"IsModifierPressed": self.is_modifier_pressed, | |
"IsMouseButtonPressed": self.is_mouse_button_pressed, | |
"MoveMouseRelative": self.move_mouse_relative, | |
"MoveMouseTo": self.move_mouse_to, | |
"MoveMouseToVirtual": self.move_mouse_to_virtual, | |
"MoveMouseWheel": self.move_mouse_wheel, | |
"OutputDebugMessage": self.output_debug_message, | |
"OutputLCDMessage": self.output_lcd_message, | |
"OutputLogMessage": self.output_log_message, | |
"PlayMacro": self.play_macro, | |
"PressAndReleaseKey": self.press_and_release_key, | |
"PressAndReleaseMouseButton": self.press_and_release_mouse_button, | |
"PressKey": self.press_key, | |
"PressMouseButton": self.press_mouse_button, | |
"ReleaseKey": self.release_key, | |
"ReleaseMouseButton": self.release_mouse_button, | |
"SetBacklightColor": self.set_backlight_color, | |
"SetMKeyState": self.set_m_key_state, | |
"SetMouseDPITable": self.set_mouse_dpi_table, | |
"SetMouseDPITableIndex": self.set_mouse_dpi_table_index, | |
"Sleep": self.sleep, | |
# Add more Lua functions and their corresponding methods here | |
} | |
def press_and_release_key(self, key): | |
if key in self.key_templates: | |
key_name = self.key_templates[key] | |
function = self.function_templates["PressAndReleaseKey"].format(key=key_name) | |
self.lua_script += function + "\n" | |
else: | |
raise ValueError(f"Invalid key: {key}") | |
def press_key(self, key): | |
if key in self.key_templates: | |
key_name = self.key_templates[key] | |
function = self.function_templates["PressKey"].format(key=key_name) | |
self.lua_script += function + "\n" | |
else: | |
raise ValueError(f"Invalid key: {key}") | |
def release_key(self, key): | |
if key in self.key_templates: | |
key_name = self.key_templates[key] | |
function = self.function_templates["ReleaseKey"].format(key=key_name) | |
self.lua_script += function + "\n" | |
else: | |
raise ValueError(f"Invalid key: {key}") | |
def press_and_release_mouse_button(self, button): | |
if button in self.button_templates: | |
button_name = self.button_templates[button] | |
function = self.function_templates["PressAndReleaseMouseButton"].format(button=button_name) | |
self.lua_script += function + "\n" | |
else: | |
raise ValueError(f"Invalid button: {button}") | |
def press_mouse_button(self, button): | |
if button in self.button_templates: | |
button_name = self.button_templates[button] | |
function = self.function_templates["PressMouseButton"].format(button=button_name) | |
self.lua_script += function + "\n" | |
else: | |
raise ValueError(f"Invalid button: {button}") | |
def release_mouse_button(self, button): | |
if button in self.button_templates: | |
button_name = self.button_templates[button] | |
function = self.function_templates["ReleaseMouseButton"].format(button=button_name) | |
self.lua_script += function + "\n" | |
else: | |
raise ValueError(f"Invalid button: {button}") | |
def generate_if_statement(self, condition, action): | |
self.lua_script += f"if {condition} then\n" | |
self.lua_script += f" {action}\n" | |
self.lua_script += "end\n" | |
def generate_for_loop(self, variable, start, end, step, action): | |
self.lua_script += f"for {variable} = {start}, {end}, {step} do\n" | |
self.lua_script += f" {action}\n" | |
self.lua_script += "end\n" | |
def generate_while_loop(self, condition, action): | |
self.lua_script += f"while {condition} do\n" | |
self.lua_script += f" {action}\n" | |
self.lua_script += "end\n" | |
def generate_lua_script(self): | |
return self.lua_script | |
def reset_lua_script(self): | |
self.lua_script = "" | |
# Define methods for each Lua function | |
def abort_macro(self): | |
self.lua_script += "AbortMacro()\n" | |
def clear_log(self): | |
self.lua_script += "ClearLog()\n" | |
def enable_primary_mouse_button_event(self, value): | |
self.lua_script += f"EnablePrimaryMouseButtonEvent({value})\n" | |
def on_event(self, event, arg, family=None): | |
function = "OnEvent()" | |
if family: | |
function = f"{function}, {family}" | |
self.lua_script += f"{function}\n" | |
def get_date(self, format=None, time=None): | |
function = "GetDate()" | |
if format: | |
function = f"{function}, {format}" | |
if time: | |
function = f"{function}, {time}" | |
self.lua_script += f"date = {function}\n" | |
def get_key_state(self): | |
self.lua_script += "key_state = GetKeyState()\n" | |
def get_m_key_state(self, kb_or_lhc=None): | |
function = "GetMKeyState()" | |
if kb_or_lhc: | |
function = f"{function}, {kb_or_lhc}" | |
self.lua_script += f"m_key_state = {function}\n" | |
def get_mouse_position(self): | |
self.lua_script += "x, y = GetMousePosition()\n" | |
def get_running_time(self): | |
self.lua_script += "t_ms = GetRunningTime()\n" | |
def is_key_lock_on(self): | |
self.lua_script += "is_lock_on = IsKeyLockOn()\n" | |
def is_modifier_pressed(self, modifier): | |
function = "IsModifierPressed()" | |
if modifier: | |
function = f"{function}, {modifier}" | |
self.lua_script += f"is_modifier_pressed = {function}\n" | |
def is_mouse_button_pressed(self, button): | |
function = "IsMouseButtonPressed()" | |
if button: | |
function = f"{function}, {button}" | |
self.lua_script += f"is_button_pressed = {function}\n" | |
def move_mouse_relative(self, dx, dy): | |
function = "MoveMouseRelative()" | |
if dx and dy: | |
function = f"{function}, {dx}, {dy}" | |
self.lua_script += f"{function}\n" | |
def move_mouse_to(self, x, y): | |
function = "MoveMouseTo()" | |
if x and y: | |
function = f"{function}, {x}, {y}" | |
self.lua_script += f"{function}\n" | |
def move_mouse_to_virtual(self, x, y): | |
function = "MoveMouseToVirtual()" | |
if x and y: | |
function = f"{function}, {x}, {y}" | |
self.lua_script += f"{function}\n" | |
def move_mouse_wheel(self, value): | |
function = "MoveMouseWheel()" | |
if value: | |
function = f"{function}, {value}" | |
self.lua_script += f"{function}\n" | |
def output_debug_message(self, message): | |
self.lua_script += f'OutputDebugMessage("{message}")\n' | |
def output_lcd_message(self, message): | |
self.lua_script += f'OutputLCDMessage("{message}")\n' | |
def output_log_message(self, message): | |
self.lua_script += f'OutputLogMessage("{message}")\n' | |
def play_macro(self, macro_name): | |
self.lua_script += f'PlayMacro("{macro_name}")\n' | |
def set_backlight_color(self, red, green, blue, family=None): | |
function = "SetBacklightColor()" | |
if family: | |
function = f"{function}, {family}" | |
self.lua_script += f"{function}\n" | |
def set_m_key_state(self, m_key, family=None): | |
function = "SetMKeyState()" | |
if family: | |
function = f"{function}, {family}" | |
self.lua_script += f"{function}\n" | |
def set_mouse_dpi_table(self, dpi_values, index=None): | |
function = "SetMouseDPITable()" | |
if index: | |
function = f"{function}, {index}" | |
self.lua_script += f"{function}\n" | |
def set_mouse_dpi_table_index(self, index): | |
function = "SetMouseDPITableIndex()" | |
if index: | |
function = f"{function}, {index}" | |
self.lua_script += f"{function}\n" | |
def sleep(self, time): | |
self.lua_script += f"Sleep({time})\n" | |
def call_lua_function(self, function_name, *args): | |
if function_name in self.lua_functions: | |
self.lua_functions[function_name](*args) | |
def set_script(self, script): | |
self.lua_script = script | |
def get_key_template(self, key): | |
if key in self.key_templates: | |
return self.key_templates[key] | |
else: | |
return None | |
def add_key_template(self, key, template): | |
self.key_templates[key] = template |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment