From 473c6ab9f726cc7860105ce70285a9253354ef00 Mon Sep 17 00:00:00 2001 From: xystudio_u <173288240@qq.com> Date: Sat, 23 May 2026 09:10:09 +0800 Subject: [PATCH 1/2] =?UTF-8?q?ui=E8=A7=A3=E8=80=A6=EF=BC=9A=E5=AE=8C?= =?UTF-8?q?=E6=88=902=E4=B8=AAui?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vscode/settings.json | 3 +- Gui/hooks/zip_json.py | 11 ++ Gui/main.py | 88 ++++++++++++---- Gui/res/dev_settings.json | 5 + Gui/res/ui/clickattr.gui | 90 ++++++++++++++++ Gui/res/ui/fastClick.gui | 54 ++++++++++ Gui/res/versions.json | 2 +- Gui/runhook.bat | 2 +- Gui/sharelibs.py | 213 +++++++++++++++++++++++++++++++++++++- Gui/uiStyles/QUI.py | 2 +- 10 files changed, 442 insertions(+), 28 deletions(-) create mode 100644 Gui/hooks/zip_json.py create mode 100644 Gui/res/ui/clickattr.gui create mode 100644 Gui/res/ui/fastClick.gui diff --git a/.vscode/settings.json b/.vscode/settings.json index 9b59ae2..95575a1 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -4,7 +4,8 @@ "markdown-preview-enhanced.revealjsTheme": "black.css", "markdown-preview-enhanced.previewTheme": "atom-dark.css", "files.associations": { - "*.qss": "css" + "*.qss": "css", + "*.gui": "json" }, "gitLineAuthor.colorConfigs": [ { diff --git a/Gui/hooks/zip_json.py b/Gui/hooks/zip_json.py new file mode 100644 index 0000000..4250e12 --- /dev/null +++ b/Gui/hooks/zip_json.py @@ -0,0 +1,11 @@ +import json +import sys + +def zip_json(json_file): + with open(json_file, 'r') as f: + data = json.load(f) + with open(json_file, 'w') as f: + json.dump(data, f, ensure_ascii=False) + +if __name__ == '__main__': + zip_json(sys.argv[1]) \ No newline at end of file diff --git a/Gui/main.py b/Gui/main.py index 5955147..75f0629 100644 --- a/Gui/main.py +++ b/Gui/main.py @@ -17,7 +17,7 @@ from uiStyles import indexes as style_indexes # 界面组件样式索引 from sharelibs import (run_software, langs, create_shortcut, __version__, is_pre, get_icon, default_button_text, get_unit_value, unit_lang, get_size_text, get_file_hash, system_lang, settings, QtThread, - default_settings, mem_id, get_resource_path, run_as_admin, get_lang, multi_replace) # 共享库 + default_settings, mem_id, get_resource_path, run_as_admin, get_lang, set_style, compile_ui, UIWindow) # 共享库 import parse_dev # 解析开发固件配置 import winreg # 注册表库 import math # 数学库 @@ -251,20 +251,6 @@ def get_now_filetime(): little_endian = struct.pack(' Date: Sat, 23 May 2026 22:24:56 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E2=9C=85feat(clickmouse):=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E4=BB=A3=E7=A0=81=20-=20=E7=8E=B0=E5=9C=A8=E6=97=A0?= =?UTF-8?q?=E9=9C=80=E7=AD=89=E5=88=B0=E7=AC=AC=E4=B8=80=E6=AC=A1=E8=BF=9E?= =?UTF-8?q?=E7=82=B9=E6=8C=89=E4=B8=8B=EF=BC=8C=E5=90=AF=E5=8A=A8=E8=BF=9E?= =?UTF-8?q?=E7=82=B9=E6=97=B6=E5=80=99=E7=8A=B6=E6=80=81=E6=A0=8F=E4=BC=9A?= =?UTF-8?q?=E7=AB=8B=E5=8D=B3=E6=98=BE=E7=A4=BA=E8=BF=9E=E7=82=B9=E7=8A=B6?= =?UTF-8?q?=E6=80=81=20-=20=E4=B9=8B=E5=90=8E=EF=BC=8C=E5=A6=82=E6=9E=9C?= =?UTF-8?q?=E5=B7=B2=E7=BB=8F=E6=9C=89=E4=B8=80=E4=B8=AAclickmouse?= =?UTF-8?q?=E5=AE=9E=E4=BE=8B=E5=9C=A8=E8=BF=90=E8=A1=8C=EF=BC=8C=E5=86=8D?= =?UTF-8?q?=E7=82=B9=E5=87=BB=E4=B8=80=E4=B8=AAclickmouse=E7=A8=8B?= =?UTF-8?q?=E5=BA=8F=E4=BC=9A=E5=BC=B9=E5=87=BA=E6=8F=90=E7=A4=BA=E6=A1=86?= =?UTF-8?q?=E8=80=8C=E4=B8=8D=E6=98=AF=E7=9B=B4=E6=8E=A5=E4=B8=8D=E6=98=BE?= =?UTF-8?q?=E7=A4=BA=E7=AA=97=E5=8F=A3=E3=80=82=20-=20*[=E5=AE=9E=E9=AA=8C?= =?UTF-8?q?=E5=AE=A4=E5=8A=9F=E8=83=BD]*=E7=8E=B0=E5=9C=A8=E5=B0=86**?= =?UTF-8?q?=E8=BF=9E=E7=82=B9=E5=B1=9E=E6=80=A7**=E5=92=8C**=E5=BF=AB?= =?UTF-8?q?=E9=80=9F=E8=BF=9E=E7=82=B9=E8=AE=BE=E7=BD=AE**=E4=B8=A4?= =?UTF-8?q?=E4=B8=AA=E7=AA=97=E5=8F=A3=E4=B8=8E=E4=BB=A3=E7=A0=81=E8=A7=A3?= =?UTF-8?q?=E8=80=A6=EF=BC=8C=E5=8F=98=E6=88=90=E7=8B=AC=E7=AB=8B=E7=9A=84?= =?UTF-8?q?gui=E6=96=87=E4=BB=B6=E3=80=82=20>=20=E6=9C=89=E5=85=B3?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=E8=A7=A3=E8=80=A6=E7=9A=84=E6=B6=88=E6=81=AF?= =?UTF-8?q?=EF=BC=8C=E8=AF=B7=E6=9F=A5=E9=98=85[=E8=BF=99=E4=B8=AA](/zh-CN?= =?UTF-8?q?/blog/decoupling-code-and-ui)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Gui/install_pack.py | 7 +-- Gui/main.py | 7 +-- Gui/res/dev_settings.json | 2 +- Gui/res/langs/control.json | 4 +- Gui/res/langs/init.json | 8 ++- Gui/res/langs/langs.json | 6 ++- Gui/res/ui/clickattr.gui | 91 +---------------------------------- Gui/res/ui/fastClick.gui | 55 +-------------------- Gui/res/versions.json | 2 +- Gui/sharelibs.py | 12 ++--- guiclean/clickclean.py | 11 +++-- guiclean/res/langs/langs.json | 10 ++-- guiclean/sharelibs.py | 2 +- makefile | 13 ++--- 14 files changed, 47 insertions(+), 183 deletions(-) diff --git a/Gui/install_pack.py b/Gui/install_pack.py index 9f225e7..80555cd 100644 --- a/Gui/install_pack.py +++ b/Gui/install_pack.py @@ -832,12 +832,14 @@ def closeEvent(self, event): shared_memory = QSharedMemory(mem_id[2]) if shared_memory.attach(): # 已经有一个实例在运行 + QMessageBox.critical(None, get_init_lang('1d'), get_init_lang('33')) sys.exit(2) shared_memory.create(1) is_running = any(list(map(lambda x: QSharedMemory(x).attach(), mem_id[3:4]))) if is_running: # 已经有一个实例在运行 + QMessageBox.critical(None, get_init_lang('1d'), get_init_lang('31')) sys.exit(2) is_ipk = '--ipk' in app.arguments() @@ -886,11 +888,6 @@ def closeEvent(self, event): sys.exit(1) if is_admin(): - is_running = any(list(map(lambda x: QSharedMemory(x).attach(), mem_id[3:4]))) - if is_running: - # 已经有一个实例在运行 - sys.exit(2) - has_package = os.path.exists(get_resource_path('packages')) if not has_package: QMessageBox.warning(None, get_ipk_lang('1d'), get_ipk_lang('1f')) diff --git a/Gui/main.py b/Gui/main.py index 75f0629..65d68b9 100644 --- a/Gui/main.py +++ b/Gui/main.py @@ -773,13 +773,13 @@ def click_loop(): break if not self.paused: try: - pyautogui.click(button=button) - sleep(delay / 1000) - i += 1 if times == float('inf'): self.click_conuter.emit('inf', str(i), str(delay)) else: self.click_conuter.emit(str(times), str(i), str(delay)) + pyautogui.click(button=button) + sleep(delay / 1000) + i += 1 except Exception: trace = format_exc() MessageBox.critical(None, get_lang('14'), f'{get_lang('1b')}\n{trace}') @@ -3468,6 +3468,7 @@ def on_start(self): shared_memory = QSharedMemory(mem_id[0]) if shared_memory.attach(): # 已经有一个实例在运行 + QMessageBox.critical(None, get_lang('14'), get_lang('d6')) sys.exit(2) shared_memory.create(1) diff --git a/Gui/res/dev_settings.json b/Gui/res/dev_settings.json index 9fc3f43..abdbe70 100644 --- a/Gui/res/dev_settings.json +++ b/Gui/res/dev_settings.json @@ -7,6 +7,6 @@ { "name": "Decoupling UI and program", "key": "decoupling", - "desc": "To decouple the UI and program." + "desc": "To decouple the UI and program.This need to restart the program to take effect." } ] \ No newline at end of file diff --git a/Gui/res/langs/control.json b/Gui/res/langs/control.json index 84ab7c3..6066597 100644 --- a/Gui/res/langs/control.json +++ b/Gui/res/langs/control.json @@ -10,7 +10,7 @@ "05": "The program has successfully uninstalled, but some contents may remain, please delete this folder: {0}", "06": "Do you want to uninstall clickmouse and its related components?", "07": "Please run this program as an administrator.", - "08": "Clickmouse is running, please close it before trying to fix it", + "08": "There is already a clickmouse instance running, please close it. if you can't find the window, you can wake it up from the tray.", "09": "Do you want to fix clickmouse?", "0a": "Fix successful.", "0b": "Clickmouse Repair Tool", @@ -45,7 +45,7 @@ "05": "程序已成功卸载,但是部分内容可能有残留,请删除这个文件夹:{0}", "06": "是否卸载clickmouse和其相关组件?", "07": "请以管理员身份运行本程序。", - "08": "Clickmouse正在运行,请关闭后再尝试修复", + "08": "已经有一个clickmouse相关实例在运行,请先关闭它,如果你没有找到窗口,可前往托盘唤醒。", "09": "是否修复Clickmouse?", "0a": "修复成功。", "0b": "clickmouse 修复工具", diff --git a/Gui/res/langs/init.json b/Gui/res/langs/init.json index 16f003a..96ca5cd 100644 --- a/Gui/res/langs/init.json +++ b/Gui/res/langs/init.json @@ -50,7 +50,9 @@ "2d": "\nStart menu shortcut", "2e": "Checking for update files...", "2f": "No package change", - "30": "Current status:" + "30": "Current status:", + "31": "There is already a uninstall or repair program instance running, please close it.", + "33": "There is already a modify program instance running." } }, { @@ -104,7 +106,9 @@ "2d": "\n开始菜单快捷方式", "2e": "检查需要更新的文件...", "2f": "没有包变动", - "30": "当前状态:" + "30": "当前状态:", + "31": "已经有一个卸载或修复程序实例在运行,请先关闭它。", + "33": "已经有一个修改程序实例在运行。" } } ] \ No newline at end of file diff --git a/Gui/res/langs/langs.json b/Gui/res/langs/langs.json index d608bea..658cdd8 100644 --- a/Gui/res/langs/langs.json +++ b/Gui/res/langs/langs.json @@ -211,7 +211,8 @@ "d2": "Repair successfully.", "d3": "Lab", "d4": "To test some experimental features, which may not be stable.", - "d5": "Hide \"lab\" when no experimental features" + "d5": "Hide \"lab\" when no experimental features", + "d6": "There is already an instance running, if you can't find the window, you can wake it up from the tray." } }, { @@ -426,7 +427,8 @@ "d2": "修复成功。", "d3": "实验室", "d4": "用于测试一些功能,可能不稳定。", - "d5": "无实验项时候隐藏\"实验室\"设置项" + "d5": "无实验项时候隐藏\"实验室\"设置项", + "d6": "已经有一个实例在运行,如果你没有找到窗口,可前往托盘唤醒。" } } ] \ No newline at end of file diff --git a/Gui/res/ui/clickattr.gui b/Gui/res/ui/clickattr.gui index 17baf7d..093e5f1 100644 --- a/Gui/res/ui/clickattr.gui +++ b/Gui/res/ui/clickattr.gui @@ -1,90 +1 @@ -{ - "name": "central_layout", - "value": { - "direction": "v", - "content": [ - { - "name": "left_clicked", - "value": { - "type": "QLabel", - "arg": [ - "!lang 0d" - ] - } - }, - { - "name": "right_clicked", - "value": { - "type": "QLabel", - "arg": [ - "!lang 0e" - ] - } - }, - { - "name": "click_delay", - "value": { - "type": "QLabel", - "arg": [ - "!lang 78" - ] - } - }, - { - "name": "click_times", - "value": { - "type": "QLabel", - "arg": [ - "!lang 5c" - ] - } - }, - { - "name": "paused", - "value": { - "type": "QLabel", - "arg": [ - "!lang 71" - ] - } - }, - { - "name": "stopped", - "value": { - "type": "QLabel", - "arg": [ - "!lang 73" - ] - } - }, - { - "name": "total_run_time", - "value": { - "type": "QLabel", - "arg": [ - "!lang 2c" - ] - } - }, - { - "name": "bottom_layout", - "value": { - "direction": "h", - "stretch": true, - "content": [ - { - "name": "ok_button", - "value": { - "type": "QPushButton", - "arg": [ - "!lang 1e" - ], - "style": "selected" - } - } - ] - } - } - ] - } -} \ No newline at end of file +{"name": "central_layout", "value": {"direction": "v", "content": [{"name": "left_clicked", "value": {"type": "QLabel", "arg": ["!lang 0d"]}}, {"name": "right_clicked", "value": {"type": "QLabel", "arg": ["!lang 0e"]}}, {"name": "click_delay", "value": {"type": "QLabel", "arg": ["!lang 78"]}}, {"name": "click_times", "value": {"type": "QLabel", "arg": ["!lang 5c"]}}, {"name": "paused", "value": {"type": "QLabel", "arg": ["!lang 71"]}}, {"name": "stopped", "value": {"type": "QLabel", "arg": ["!lang 73"]}}, {"name": "total_run_time", "value": {"type": "QLabel", "arg": ["!lang 2c"]}}, {"name": "bottom_layout", "value": {"direction": "h", "stretch": true, "content": [{"name": "ok_button", "value": {"type": "QPushButton", "arg": ["!lang 1e"], "style": "selected"}}]}}]}} \ No newline at end of file diff --git a/Gui/res/ui/fastClick.gui b/Gui/res/ui/fastClick.gui index 37a3fe5..6016630 100644 --- a/Gui/res/ui/fastClick.gui +++ b/Gui/res/ui/fastClick.gui @@ -1,54 +1 @@ -{ - "name": "central_layout", - "value": { - "direction": "v", - "content": [ - { - "name": "unit_layout", - "value": { - "direction": "u", - "texts": ["!lang 11", "!lang 5c"], - "inputs": [ - { - "name": "input_delay", - "value": { - "type": "QLineEdit", - "init_steps": [{"setFixedWidth": [300], "setFixedHeight": [30]}] - } - }, - { - "name": "input_times", - "value": { - "type": "QLineEdit", - "init_steps": [{"setFixedWidth": [300], "setFixedHeight": [30]}] - } - } - ], - "combos": [ - { - "name": "delay_combo", - "value": { - "type": "QComboBox", - "init_steps": [{"setFixedWidth": [60], "setFixedHeight": [30]}] - } - }, - { - "name": "times_combo", - "value": { - "type": "QComboBox", - "init_steps": [{"setFixedWidth": [60], "setFixedHeight": [30]}] - } - } - ] - } - }, - { - "name": "total_time_label", - "value": { - "type": "QLabel", - "style": "big_text_16" - } - } - ] - } -} \ No newline at end of file +{"name": "central_layout", "value": {"direction": "v", "content": [{"name": "unit_layout", "value": {"direction": "u", "texts": ["!lang 11", "!lang 5c"], "inputs": [{"name": "input_delay", "value": {"type": "QLineEdit", "init_steps": {"setFixedWidth": [300], "setFixedHeight": [30]}}}, {"name": "input_times", "value": {"type": "QLineEdit", "init_steps": {"setFixedWidth": [300], "setFixedHeight": [30]}}}], "combos": [{"name": "delay_combo", "value": {"type": "QComboBox", "init_steps": {"setFixedWidth": [60], "setFixedHeight": [30]}}}, {"name": "times_combo", "value": {"type": "QComboBox", "init_steps": {"setFixedWidth": [60], "setFixedHeight": [30]}}}]}}, {"name": "total_time_label", "value": {"type": "QLabel", "style": "big_text_16"}}]}} \ No newline at end of file diff --git a/Gui/res/versions.json b/Gui/res/versions.json index f46639d..0cb609f 100644 --- a/Gui/res/versions.json +++ b/Gui/res/versions.json @@ -1 +1 @@ -{"package_format_version": "1.2.0", "clickmouse":"dev"} +{"clickmouse":"3.3.0.23alpha5"} diff --git a/Gui/sharelibs.py b/Gui/sharelibs.py index 62d4830..6ec3464 100644 --- a/Gui/sharelibs.py +++ b/Gui/sharelibs.py @@ -464,9 +464,8 @@ def compile_ui(ui_file_or_data): compiled_list = [] for item in v.get('content', []): compiled_list.append(compile_ui(item)) # 递归解析 - for step in v.get('init_steps', []): - for k, v in step.items(): - getattr(widget, k)(*v) + for k, vs in v.get('init_steps', {}).items(): + getattr(widget, k)(*vs) return {'name': ui_data.get('name'), 'direction': v.get('direction'), 'content': compiled_list, 'stretch': v.get('stretch', False)} else: # 这是widget类型 argv = [] @@ -495,10 +494,9 @@ def compile_ui(ui_file_or_data): widget = globals().get(v.get('type'))(*argv, **kwargv) # 获取函数 set_style(widget, style) # 设置样式 - - for step in v.get('init_steps', []): - for k, v in step.items(): - getattr(widget, k)(*v) + + for k, vs in v.get('init_steps', {}).items(): + getattr(widget, k)(*vs) return {'name': ui_data.get('name'), 'content': widget} else: diff --git a/guiclean/clickclean.py b/guiclean/clickclean.py index 9668f9b..2b72f49 100644 --- a/guiclean/clickclean.py +++ b/guiclean/clickclean.py @@ -14,7 +14,7 @@ from webbrowser import open as open_url # 关于作者 from uiStyles import (UnitInputLayout, styles, StyleReplaceMode, CustonMessageButton, SelectUI, UCheckBox, UMessageBox, MessageButtonTemplate) # 软件界面样式 from sharelibs import (run_software, langs, __version__, get_icon, default_button_text, get_unit_value, unit_lang, system_lang, settings, QtThread, - default_settings, get_resource_path, get_lang, create_shortcut) # 共享库 + default_settings, get_lang, create_shortcut) # 共享库 import winreg # 注册表库 import math # 数学库 import colorsys # 颜色库 @@ -629,13 +629,13 @@ def click_loop(): break if not self.paused: try: - pyautogui.click(button=button) - sleep(delay / 1000) - i += 1 if times == float('inf'): self.click_conuter.emit('inf', str(i), str(delay)) else: self.click_conuter.emit(str(times), str(i), str(delay)) + pyautogui.click(button=button) + sleep(delay / 1000) + i += 1 except Exception: trace = format_exc() UMessageBox.critical(None, get_lang('14'), f'{get_lang('1b')}\n{trace}') @@ -937,7 +937,7 @@ def create_menu_bar(self): menu_bar = self.menuBar() # 功能菜单 - function_menu = menu_bar.addMenu(get_lang('d6')) + function_menu = menu_bar.addMenu(get_lang('d5')) # 设置菜单 settings_action = function_menu.addAction(get_lang('05')) @@ -1778,6 +1778,7 @@ def on_combination_pressed(self, combination): shared_memory = QSharedMemory('clickmouse_running') if shared_memory.attach(): # 已经有一个实例在运行 + QMessageBox.critical(None, get_lang('14'), get_lang('d6')) sys.exit(2) shared_memory.create(1) diff --git a/guiclean/res/langs/langs.json b/guiclean/res/langs/langs.json index 75f76aa..3c78898 100644 --- a/guiclean/res/langs/langs.json +++ b/guiclean/res/langs/langs.json @@ -87,9 +87,10 @@ "b5": "(Restart program to effect.)", "c9": "Enable hotkey", "d1": "If your startup is not working, or startup opened the clickmouse\nwindow, you can try to click to fix it.", - "d6": "Tool", + "d5": "Tool", "ba": "Feedback(&F)", - "b6": "Auto startup" + "b6": "Auto startup", + "d6": "There is already an instance running, if you can't find the window, you can wake it up from the tray." } }, { @@ -180,8 +181,9 @@ "b6": "开机自启动", "c9": "启用热键", "d1": "如果你的开机自启动出现问题,或打开了clickmouse窗口,可尝试点击\n它来修复。", - "d6": "工具", - "ba": "反馈(&F)" + "d5": "工具", + "ba": "反馈(&F)", + "d6": "已经有一个实例在运行,如果你没有找到窗口,可前往托盘唤醒。" } } ] \ No newline at end of file diff --git a/guiclean/sharelibs.py b/guiclean/sharelibs.py index 9fdc3da..d483ae5 100644 --- a/guiclean/sharelibs.py +++ b/guiclean/sharelibs.py @@ -110,7 +110,7 @@ def run_software(code_path, exe_path, args=None): args = [] if args is None else args subprocess.Popen(f'python {code_path} {' '.join(args)}' if in_dev else f'{exe_path} {" ".join(args)}') -__version__ = '3.2.2.21' +__version__ = '3.2.3.22' with open(get_resource_path('langs', 'units.json'), 'r', encoding='utf-8') as f: unit_lang = json.load(f) diff --git a/makefile b/makefile index 0ff4b25..d29abb5 100644 --- a/makefile +++ b/makefile @@ -5,15 +5,16 @@ main: clickmouse: gui/main.py $(command) --file-description="Clickmouse" --product-name="ClickMouse" --windows-icon-from-ico=gui/res/icons/clickmouse/icon.ico --include-data-dir=gui/res/=res/ --include-data-file=gui/key=key gui/main.py --file-version="3.3.0.22" --enable-plugin=pyside6 --windows-console-mode="disable" --include-data-file=gui/7z.exe=7z.exe --include-data-file=gui/7z.dll=7z.dll --output-dir=dist/clickmouse/ - $(command) --file-description="Clickmouse uninstall" --product-name="uninstall" --windows-icon-from-ico=gui/res/icons/clickmouse/uninstall.ico --file-version="2.1.4.8" gui/uninstall.py --enable-plugin=pyside6 --windows-console-mode="disable" --windows-uac-admin --output-dir=dist/clickmouse/ - $(command) --file-description="Clickmouse IPK" --product-name="CmIPK" --windows-icon-from-ico=gui/res/icons/clickmouse/init.ico --file-version="2.0.6.11" gui/install_pack.py --enable-plugin=pyside6 --windows-console-mode="disable" --output-dir=dist/clickmouse/ - $(command) --file-description="Clickmouse repair" --product-name="CmRepair" --windows-icon-from-ico=gui/res/icons/clickmouse/repair.ico --file-version="2.2.3.7" gui/repair.py --enable-plugin=pyside6 --windows-console-mode="disable" --windows-uac-admin --output-dir=dist/clickmouse/ - $(command) --file-version="1.0.1.4" gui/check_reg_ver.py --windows-console-mode="disable" --output-dir=dist/clickmouse/ - $(command) --file-version="1.0.0.3" gui/updater.py --windows-console-mode="disable" --output-dir=dist/clickmouse/ + $(command) --file-description="Clickmouse uninstall" --product-name="uninstall" --windows-icon-from-ico=gui/res/icons/clickmouse/uninstall.ico --file-version="2026.05.23.1" gui/uninstall.py --enable-plugin=pyside6 --windows-console-mode="disable" --windows-uac-admin --output-dir=dist/clickmouse/ + $(command) --file-description="Clickmouse IPK" --product-name="CmIPK" --windows-icon-from-ico=gui/res/icons/clickmouse/init.ico --file-version="2026.05.23.1" gui/install_pack.py --enable-plugin=pyside6 --windows-console-mode="disable" --output-dir=dist/clickmouse/ + $(command) --file-description="Clickmouse repair" --product-name="CmRepair" --windows-icon-from-ico=gui/res/icons/clickmouse/repair.ico --file-version="2026.05.23.1" gui/repair.py --enable-plugin=pyside6 --windows-console-mode="disable" --windows-uac-admin --output-dir=dist/clickmouse/ + $(command) --file-version="2026.05.23.1" gui/check_reg_ver.py --windows-console-mode="disable" --output-dir=dist/clickmouse/ + $(command) --file-version="2026.05.23.1" gui/updater.py --windows-console-mode="disable" --output-dir=dist/clickmouse/ powershell -ExecutionPolicy Bypass -Command "./merge-distFolders.ps1 -SourcePath ./dist/clickmouse/" clickclean: guiclean/clickclean.py - $(command) --file-version="3.2.2.21" guiclean/clickclean.py --windows-console-mode="disable" --product-name="ClickClean" --windows-icon-from-ico=guiclean/res/icons/clickmouse/icon.ico --file-description="ClickClean" --enable-plugin=pyside6 --include-data-dir=guiclean/res/=res/ --output-dir=dist/ + $(command) --file-version="3.2.3.22" guiclean/clickclean.py --windows-console-mode="disable" --product-name="ClickClean" --windows-icon-from-ico=guiclean/res/icons/clickmouse/icon.ico --file-description="ClickClean" --enable-plugin=pyside6 --include-data-dir=guiclean/res/=res/ --output-dir=dist/ + ren ./dist/clickclean.dist clickclean clickmouse_lib: setup.py python setup.py bdist_wheel