ok-script 1.0.190__tar.gz → 2.0.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- ok_script-2.0.0/LICENSE.txt +73 -0
- ok_script-2.0.0/PKG-INFO +266 -0
- ok_script-1.0.190/ok_script.egg-info/PKG-INFO → ok_script-2.0.0/README.md +61 -39
- ok_script-2.0.0/diagnostics/qq_trace.py +101 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/__init__.py +232 -84
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/cli.py +27 -0
- ok_script-2.0.0/ok/core/__init__.py +5 -0
- ok_script-2.0.0/ok/core/config_schema.py +120 -0
- ok_script-1.0.190/ok/gui/util/download.py → ok_script-2.0.0/ok/core/downloads.py +1 -1
- ok_script-2.0.0/ok/core/events.py +101 -0
- ok_script-2.0.0/ok/core/icons.py +12 -0
- ok_script-2.0.0/ok/core/notifications.py +9 -0
- ok_script-1.0.190/ok/gui/debug/Screenshot.py → ok_script-2.0.0/ok/core/screenshot.py +6 -10
- ok_script-2.0.0/ok/core/script_editing.py +61 -0
- ok_script-1.0.190/ok/gui/tasks/ScriptPackager.py → ok_script-2.0.0/ok/core/script_packager.py +64 -15
- ok_script-2.0.0/ok/core/script_templates.py +134 -0
- ok_script-1.0.190/ok/gui/StartController.py → ok_script-2.0.0/ok/core/start_controller.py +21 -7
- ok_script-1.0.190/ok/gui/tasks/TaskManger.py → ok_script-2.0.0/ok/core/task_manager.py +14 -19
- ok_script-2.0.0/ok/core/template_store.py +229 -0
- ok_script-1.0.190/ok/gui/i18n/GettextTranslator.py → ok_script-2.0.0/ok/core/translation.py +5 -0
- ok_script-2.0.0/ok/core/ui_config.py +49 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/device/DeviceManager.py +55 -5
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/device/capture_methods/browser.py +1 -1
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/device/capture_methods/hwnd_window.py +2 -2
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/feature/FeatureSet.py +1 -1
- ok_script-2.0.0/ok/gui/__init__.py +50 -0
- ok_script-2.0.0/ok/gui/util/pyappify_startup.py +3 -0
- ok_script-2.0.0/ok/notification/__init__.py +4 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/notification/manager.py +16 -2
- ok_script-2.0.0/ok/notification/system.py +219 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/notification/windows_messenger.py +1 -1
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/task/TaskExecutor.py +7 -10
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/task/task.py +18 -8
- ok_script-2.0.0/ok/task/web.py +162 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/test/TaskTestCase.py +1 -1
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/third_party/paperclip.py +4 -2
- ok_script-2.0.0/ok/ui/__init__.py +1 -0
- ok_script-2.0.0/ok/ui/overlay/__init__.py +5 -0
- ok_script-2.0.0/ok/ui/overlay/win32_gdi.py +708 -0
- ok_script-2.0.0/ok/ui/qt/Communicate.py +6 -0
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/MainWindow.py +83 -48
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/MessageWindow.py +2 -2
- ok_script-2.0.0/ok/ui/qt/StartController.py +7 -0
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/about/AboutTab.py +56 -38
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/about/LinksBar.py +9 -3
- ok_script-2.0.0/ok/ui/qt/about/ProjectCard.py +42 -0
- ok_script-2.0.0/ok/ui/qt/about/UpdateCard.py +329 -0
- ok_script-2.0.0/ok/ui/qt/about/VersionCard.py +20 -0
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/common/design_system.py +1 -1
- ok_script-2.0.0/ok/ui/qt/common/icons.py +20 -0
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/debug/DebugTab.py +3 -3
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/debug/OverlayWidget.py +4 -3
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/debug/RunCodeTab.py +1 -1
- ok_script-2.0.0/ok/ui/qt/debug/Screenshot.py +3 -0
- ok_script-2.0.0/ok/ui/qt/events.py +74 -0
- ok_script-2.0.0/ok/ui/qt/i18n/GettextTranslator.py +3 -0
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/i18n/en_US.qm +0 -0
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/i18n/en_US.ts +841 -0
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/i18n/es_ES.qm +0 -0
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/i18n/es_ES.ts +841 -0
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/i18n/ja_JP.qm +0 -0
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/i18n/ja_JP.ts +841 -0
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/i18n/ko_KR.qm +0 -0
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/i18n/ko_KR.ts +841 -0
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/i18n/zh_CN.qm +0 -0
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/i18n/zh_CN.ts +841 -0
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/i18n/zh_TW.qm +0 -0
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/i18n/zh_TW.ts +841 -0
- ok_script-2.0.0/ok/ui/qt/overlay/OverlayWindow.py +11 -0
- ok_script-2.0.0/ok/ui/qt/resources.py +19337 -0
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/settings/GlobalConfigCard.py +4 -3
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/settings/GlobalConfigTab.py +2 -2
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/settings/SettingTab.py +3 -3
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/start/StartCard.py +2 -2
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/start/StartTab.py +17 -22
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/tasks/ConfigCard.py +5 -4
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/tasks/ConfigItemFactory.py +13 -24
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/tasks/ConfigLabelAndWidget.py +1 -1
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/tasks/EditTaskTab.py +24 -101
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/tasks/LabelAndButtons.py +3 -2
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/tasks/LabelAndDoubleSpinBox.py +2 -2
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/tasks/LabelAndDropDown.py +2 -2
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/tasks/LabelAndFileSelector.py +1 -1
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/tasks/LabelAndGlobal.py +2 -2
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/tasks/LabelAndLineEdit.py +2 -2
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/tasks/LabelAndList.py +1 -1
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/tasks/LabelAndMultiSelection.py +2 -2
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/tasks/LabelAndSpinBox.py +2 -2
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/tasks/LabelAndSwitchButton.py +1 -1
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/tasks/LabelAndTextEdit.py +2 -2
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/tasks/LabelAndWidget.py +1 -1
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/tasks/MarkUpWindow.py +2 -2
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/tasks/ModifyListDialog.py +1 -1
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/tasks/ModifyListItem.py +3 -3
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/tasks/OneTimeTaskTab.py +3 -3
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/tasks/RecordScript.py +3 -3
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/tasks/ScheduleTaskTab.py +10 -66
- ok_script-2.0.0/ok/ui/qt/tasks/ScriptPackager.py +3 -0
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/tasks/StartButton.py +2 -2
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/tasks/TaskCard.py +3 -3
- ok_script-2.0.0/ok/ui/qt/tasks/TaskManger.py +12 -0
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/tasks/TaskTab.py +4 -4
- ok_script-2.0.0/ok/ui/qt/tasks/TemplateFactory.py +125 -0
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/tasks/TemplateTab.py +23 -61
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/tasks/TriggerTaskTab.py +3 -3
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/util/Alert.py +1 -1
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/util/app.py +2 -2
- ok_script-2.0.0/ok/ui/qt/util/download.py +3 -0
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/util/pyappify_startup.py +3 -3
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/widget/BaseLoading.py +1 -1
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/widget/BaseWindow.py +1 -1
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/widget/Card.py +2 -2
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/widget/CustomTab.py +1 -1
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/widget/EmptyCard.py +1 -1
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/widget/ExpandCardLayout.py +4 -0
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/widget/ListTableWidgetItem.py +1 -1
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/widget/NumericTableWidgetItem.py +1 -1
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/widget/StatusBar.py +1 -1
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/widget/Tab.py +5 -5
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/widget/YesNonWidgetItem.py +1 -1
- ok_script-2.0.0/ok/ui/web/__init__.py +6 -0
- ok_script-2.0.0/ok/ui/web/app.py +1617 -0
- ok_script-2.0.0/ok/ui/web/requirements.py +13 -0
- ok_script-2.0.0/ok/ui/web/server.py +686 -0
- ok_script-2.0.0/ok/ui/web/static/app.js +11 -0
- ok_script-2.0.0/ok/ui/web/static/chunk-fluent.js +2 -0
- ok_script-2.0.0/ok/ui/web/static/chunk-react.js +9 -0
- ok_script-2.0.0/ok/ui/web/static/index.css +1 -0
- ok_script-2.0.0/ok/ui/web/static/index.html +17 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/update/inline_ok_requirements.py +23 -32
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/util/Analytics.py +4 -2
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/util/GlobalConfig.py +5 -6
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/util/config.py +1 -1
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/util/explorer.py +17 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/util/handler.py +19 -7
- ok_script-2.0.0/ok/util/i18n.py +26 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/util/logger.py +1 -1
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/util/windows_schedule.py +89 -0
- ok_script-2.0.0/ok_script.egg-info/PKG-INFO +266 -0
- ok_script-2.0.0/ok_script.egg-info/SOURCES.txt +351 -0
- ok_script-2.0.0/ok_script.egg-info/requires.txt +42 -0
- ok_script-2.0.0/ok_script.egg-info/top_level.txt +6 -0
- ok_script-2.0.0/pyproject.toml +126 -0
- ok_script-2.0.0/scripts/generate_web_i18n.py +57 -0
- ok_script-2.0.0/setup.py +17 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/tests/test_accent_color.py +1 -1
- {ok_script-1.0.190 → ok_script-2.0.0}/tests/test_blur.py +1 -1
- ok_script-2.0.0/tests/test_cli.py +59 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/tests/test_config_card.py +2 -2
- ok_script-2.0.0/tests/test_core_events.py +33 -0
- ok_script-2.0.0/tests/test_core_ui_services.py +72 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/tests/test_expand_card_layout.py +11 -1
- {ok_script-1.0.190 → ok_script-2.0.0}/tests/test_explorer.py +6 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/tests/test_global_config.py +6 -6
- ok_script-2.0.0/tests/test_headless_imports.py +50 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/tests/test_inline_ok_requirements.py +35 -12
- {ok_script-1.0.190 → ok_script-2.0.0}/tests/test_main_window_notifications.py +6 -4
- {ok_script-1.0.190 → ok_script-2.0.0}/tests/test_main_window_startup_tab.py +20 -1
- {ok_script-1.0.190 → ok_script-2.0.0}/tests/test_main_window_system_theme.py +11 -11
- {ok_script-1.0.190 → ok_script-2.0.0}/tests/test_missing_frame.py +15 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/tests/test_navigation_state.py +1 -1
- {ok_script-1.0.190 → ok_script-2.0.0}/tests/test_notifications.py +40 -2
- ok_script-2.0.0/tests/test_overlay_custom_draw.py +61 -0
- ok_script-2.0.0/tests/test_package_metadata.py +35 -0
- ok_script-2.0.0/tests/test_pyappify_startup_update.py +569 -0
- ok_script-2.0.0/tests/test_qt_events.py +33 -0
- ok_script-2.0.0/tests/test_qt_legacy_imports.py +12 -0
- ok_script-2.0.0/tests/test_qt_page_layout.py +45 -0
- ok_script-2.0.0/tests/test_runtime_startup.py +181 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/tests/test_start_controller.py +20 -2
- {ok_script-1.0.190 → ok_script-2.0.0}/tests/test_task_ui.py +10 -5
- {ok_script-1.0.190 → ok_script-2.0.0}/tests/test_template_tab.py +12 -2
- {ok_script-1.0.190 → ok_script-2.0.0}/tests/test_touch_scroll.py +1 -1
- ok_script-2.0.0/tests/test_ui_config.py +50 -0
- ok_script-2.0.0/tests/test_web_app.py +237 -0
- ok_script-2.0.0/tests/test_web_i18n.py +24 -0
- ok_script-2.0.0/tests/test_web_server.py +511 -0
- ok_script-2.0.0/tests/test_web_task_tabs.py +143 -0
- ok_script-2.0.0/tests/test_web_ui_pages.py +277 -0
- ok_script-2.0.0/tests/test_web_ui_tasks.py +183 -0
- ok_script-1.0.190/LICENSE.txt +0 -661
- ok_script-1.0.190/PKG-INFO +0 -115
- ok_script-1.0.190/README.md +0 -77
- ok_script-1.0.190/ok/gui/Communicate.py +0 -37
- ok_script-1.0.190/ok/gui/about/ProjectCard.py +0 -19
- ok_script-1.0.190/ok/gui/about/VersionCard.py +0 -33
- ok_script-1.0.190/ok/gui/overlay/OverlayWindow.py +0 -176
- ok_script-1.0.190/ok/gui/resources.py +0 -15570
- ok_script-1.0.190/ok/gui/tasks/TemplateFactory.py +0 -410
- ok_script-1.0.190/ok/notification/__init__.py +0 -3
- ok_script-1.0.190/ok/util/i18n.py +0 -57
- ok_script-1.0.190/ok_script.egg-info/SOURCES.txt +0 -299
- ok_script-1.0.190/ok_script.egg-info/requires.txt +0 -9
- ok_script-1.0.190/ok_script.egg-info/top_level.txt +0 -1
- ok_script-1.0.190/setup.py +0 -61
- ok_script-1.0.190/tests/test_cli.py +0 -28
- ok_script-1.0.190/tests/test_overlay_custom_draw.py +0 -122
- ok_script-1.0.190/tests/test_pyappify_startup_update.py +0 -202
- {ok_script-1.0.190 → ok_script-2.0.0}/MANIFEST.in +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/__main__.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/alas/__init__.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/alas/emulator_base.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/alas/emulator_windows.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/alas/platform_windows.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/alas/utils.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/capture/__init__.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/capture/adb/__init__.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/capture/adb/deep.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/capture/adb/minitouch.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/capture/adb/nemu_ipc.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/capture/adb/nemu_utils.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/capture/adb/pool.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/capture/adb/timer.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/capture/adb/util.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/capture/windows/__init__.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/capture/windows/d3d11.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/capture/windows/dump.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/device/__init__.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/device/capture.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/device/capture_methods/__init__.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/device/capture_methods/adb.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/device/capture_methods/base.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/device/capture_methods/bitblt.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/device/capture_methods/bitblt_utils.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/device/capture_methods/desktop_duplication.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/device/capture_methods/image.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/device/capture_methods/nemu_ipc.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/device/capture_methods/types.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/device/capture_methods/update.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/device/capture_methods/windows_graphics.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/device/interaction.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/device/interaction_methods/__init__.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/device/interaction_methods/adb.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/device/interaction_methods/base.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/device/interaction_methods/browser.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/device/interaction_methods/do_nothing.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/device/interaction_methods/foreground_post_message.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/device/interaction_methods/genshin.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/device/interaction_methods/keys.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/device/interaction_methods/post_message.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/device/interaction_methods/pydirect.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/device/interaction_methods/pynput.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/device/interaction_methods/swipe.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/device/intercation.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/feature/Box.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/feature/Feature.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/feature/__init__.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/notification/messenger_images.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/notification/pipeline.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/notification/ppocr.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/notification/providers.py +0 -0
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ocr}/__init__.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/ocr/download_paddle_model.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/rotypes/Windows/Foundation/Collections.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/rotypes/Windows/Foundation/__init__.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/rotypes/Windows/Globalization/__init__.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/rotypes/Windows/Graphics/Capture/__init__.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/rotypes/Windows/Graphics/DirectX/Direct3D11/__init__.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/rotypes/Windows/Graphics/DirectX/__init__.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/rotypes/Windows/Graphics/Imaging/__init__.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/rotypes/Windows/Graphics/__init__.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/rotypes/Windows/Media/Ocr/__init__.py +0 -0
- {ok_script-1.0.190/ok/gui/about → ok_script-2.0.0/ok/rotypes/Windows/Media}/__init__.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/rotypes/Windows/Security/Cryptography/__init__.py +0 -0
- {ok_script-1.0.190/ok/gui/common → ok_script-2.0.0/ok/rotypes/Windows/Security}/__init__.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/rotypes/Windows/Storage/Streams/__init__.py +0 -0
- {ok_script-1.0.190/ok/gui/debug → ok_script-2.0.0/ok/rotypes/Windows/Storage}/__init__.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/rotypes/Windows/UI/ViewManagement/__init__.py +0 -0
- {ok_script-1.0.190/ok/gui/i18n → ok_script-2.0.0/ok/rotypes/Windows/UI}/__init__.py +0 -0
- {ok_script-1.0.190/ok/gui/overlay → ok_script-2.0.0/ok/rotypes/Windows}/__init__.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/rotypes/__init__.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/rotypes/delegate.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/rotypes/export.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/rotypes/idldsl.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/rotypes/inspectable.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/rotypes/roapi.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/rotypes/types.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/rotypes/winstring.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/task/DiagnosisTask.py +0 -0
- {ok_script-1.0.190/ok/gui/qss → ok_script-2.0.0/ok/task}/__init__.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/task/exceptions.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/test/OKTestRunner.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/test/RunTests.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/test/__init__.py +0 -0
- {ok_script-1.0.190/ok/gui/settings → ok_script-2.0.0/ok/third_party}/__init__.py +0 -0
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/TabTitles.py +0 -0
- {ok_script-1.0.190/ok/gui/start → ok_script-2.0.0/ok/ui/qt}/__init__.py +0 -0
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/about/HttpTextEdit.py +0 -0
- {ok_script-1.0.190/ok/gui/tasks → ok_script-2.0.0/ok/ui/qt/about}/__init__.py +0 -0
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/common/OKIcon.py +0 -0
- {ok_script-1.0.190/ok/gui/util → ok_script-2.0.0/ok/ui/qt/common}/__init__.py +0 -0
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/common/accent_color.py +0 -0
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/common/config.py +0 -0
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/common/style_sheet.py +0 -0
- {ok_script-1.0.190/ok/gui/widget → ok_script-2.0.0/ok/ui/qt/debug}/__init__.py +0 -0
- {ok_script-1.0.190/ok/ocr → ok_script-2.0.0/ok/ui/qt/i18n}/__init__.py +0 -0
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/i18n/path.py +0 -0
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/i18n/update.py +0 -0
- {ok_script-1.0.190/ok/rotypes/Windows/Media → ok_script-2.0.0/ok/ui/qt/overlay}/__init__.py +0 -0
- {ok_script-1.0.190/ok/rotypes/Windows/Security → ok_script-2.0.0/ok/ui/qt/qss}/__init__.py +0 -0
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/qss/dark/card.qss +0 -0
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/qss/dark/discord.svg +0 -0
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/qss/dark/heart.svg +0 -0
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/qss/dark/message_window.qss +0 -0
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/qss/dark/setting_interface.qss +0 -0
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/qss/dark/status_bar.qss +0 -0
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/qss/dark/stop.svg +0 -0
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/qss/dark/tab.qss +0 -0
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/qss/light/card.qss +0 -0
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/qss/light/discord.svg +0 -0
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/qss/light/heart.svg +0 -0
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/qss/light/message_window.qss +0 -0
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/qss/light/setting_interface.qss +0 -0
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/qss/light/status_bar.qss +0 -0
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/qss/light/stop.svg +0 -0
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/qss/light/tab.qss +0 -0
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/qt.qrc +0 -0
- {ok_script-1.0.190/ok/rotypes/Windows/Storage → ok_script-2.0.0/ok/ui/qt/settings}/__init__.py +0 -0
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/start/LogWindow.py +0 -0
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/start/SelectCaptureListView.py +0 -0
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/start/SelectInteractionListView.py +0 -0
- {ok_script-1.0.190/ok/rotypes/Windows/UI → ok_script-2.0.0/ok/ui/qt/start}/__init__.py +0 -0
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/tasks/PythonHighlighter.py +0 -0
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/tasks/TaskOpButton.py +0 -0
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/tasks/TooltipTableWidget.py +0 -0
- {ok_script-1.0.190/ok/rotypes/Windows → ok_script-2.0.0/ok/ui/qt/tasks}/__init__.py +0 -0
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/util/InitWorker.py +0 -0
- {ok_script-1.0.190/ok/task → ok_script-2.0.0/ok/ui/qt/util}/__init__.py +0 -0
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/util/pip_util.py +0 -0
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/util/touch_scroll.py +0 -0
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/util/windows_thumbnail.py +0 -0
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/widget/FlowLayout.py +0 -0
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/widget/FramelessDialog.py +0 -0
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/widget/ImageWidget.py +0 -0
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/widget/OkCompactSpinBox.py +0 -0
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/widget/SortingTableWidgetItem.py +0 -0
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/widget/StartLoadingDialog.py +0 -0
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/widget/TabWidget.py +0 -0
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/widget/UpdateConfigWidgetItem.py +0 -0
- {ok_script-1.0.190/ok/gui → ok_script-2.0.0/ok/ui/qt}/widget/WidgetWithVLabel.py +0 -0
- {ok_script-1.0.190/ok/third_party → ok_script-2.0.0/ok/ui/qt/widget}/__init__.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/update/__init__.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/update/copy_ok_folder.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/util/__init__.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/util/blur.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/util/clazz.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/util/collection.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/util/color.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/util/file.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/util/gpu_driver_settings.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/util/partial_sync_repo.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/util/print_hwnd.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/util/process.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok/util/window.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok_script.egg-info/dependency_links.txt +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok_script.egg-info/entry_points.txt +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/ok_script.egg-info/not-zip-safe +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/setup.cfg +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/tests/test_app.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/tests/test_base_interaction.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/tests/test_box.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/tests/test_capture_update.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/tests/test_device_manager.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/tests/test_gpu_driver_settings.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/tests/test_logger.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/tests/test_nemu_ipc_capture.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/tests/test_ok_mutex.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/tests/test_process.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/tests/test_task_executor_queue.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/tests/test_translation_fallback.py +0 -0
- {ok_script-1.0.190 → ok_script-2.0.0}/tests/test_windows_graphics_capture.py +0 -0
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
ok-script License
|
|
2
|
+
================
|
|
3
|
+
|
|
4
|
+
Copyright (c) 2026 ok-oldking
|
|
5
|
+
|
|
6
|
+
This project is licensed under the Apache License, Version 2.0, as modified
|
|
7
|
+
by the Commons Clause License Condition v1.0 and the additional terms below.
|
|
8
|
+
The Apache License, Version 2.0, is available at:
|
|
9
|
+
|
|
10
|
+
https://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
+
|
|
12
|
+
The Commons Clause License Condition v1.0 is available at:
|
|
13
|
+
|
|
14
|
+
https://commonsclause.com/
|
|
15
|
+
|
|
16
|
+
If there is a conflict between the Apache License 2.0 and the Commons Clause
|
|
17
|
+
or additional terms below, the Commons Clause and additional terms control.
|
|
18
|
+
|
|
19
|
+
Commons Clause
|
|
20
|
+
-------------
|
|
21
|
+
|
|
22
|
+
Without limiting the conditions of the Apache License 2.0, the grant of
|
|
23
|
+
rights under that license does not include the right to Sell this Software.
|
|
24
|
+
|
|
25
|
+
For this license, “Sell” means selling, lending, leasing, licensing, offering
|
|
26
|
+
for sale, lease, or license, or otherwise transferring this Software to a
|
|
27
|
+
third party for a fee or other consideration. “Sell” does not include:
|
|
28
|
+
|
|
29
|
+
* Using the Software internally, including by an organization or its
|
|
30
|
+
employees, without transferring it to a third party for a fee or other
|
|
31
|
+
consideration; or
|
|
32
|
+
* Distributing the Software as part of a larger application or product,
|
|
33
|
+
provided that the larger application or product is not primarily the
|
|
34
|
+
Software or a competing product.
|
|
35
|
+
|
|
36
|
+
Additional Terms
|
|
37
|
+
----------------
|
|
38
|
+
|
|
39
|
+
1. You may use this Software in closed-source and commercial projects. You
|
|
40
|
+
may charge for your own application, service, support, or other material
|
|
41
|
+
that incorporates the Software, provided that you do not sell or offer the
|
|
42
|
+
Software itself, or a competing product based primarily on it, as a product.
|
|
43
|
+
|
|
44
|
+
2. You may fork the Software, make improvements, and keep the fork open
|
|
45
|
+
source and freely available. You may not take this project, rename it or
|
|
46
|
+
make only minor changes, and sell or market it as a competing product.
|
|
47
|
+
|
|
48
|
+
3. You may not use this Software for hacking, unauthorized access, malware,
|
|
49
|
+
fraud, or any other illegal activity. You are responsible for complying
|
|
50
|
+
with all applicable laws and obtaining authorization for any security or
|
|
51
|
+
automation activity.
|
|
52
|
+
|
|
53
|
+
4. Any project that uses, incorporates, or is derived from this Software
|
|
54
|
+
must mention ok-script and link to at least one of the following in at
|
|
55
|
+
least one of the project's website, GitHub repository, or the software
|
|
56
|
+
itself:
|
|
57
|
+
|
|
58
|
+
* Website: https://ok-script.com/
|
|
59
|
+
* GitHub: https://github.com/ok-oldking/ok-script
|
|
60
|
+
|
|
61
|
+
The notice must be reasonably visible and retained in modified or
|
|
62
|
+
redistributed versions.
|
|
63
|
+
|
|
64
|
+
5. Use of the Qt UI, including components based on PyQt-Fluent-Widgets or
|
|
65
|
+
its related packages, is separately subject to the license and terms of
|
|
66
|
+
the upstream project:
|
|
67
|
+
|
|
68
|
+
https://github.com/zhiyiYo/PyQt-Fluent-Widgets
|
|
69
|
+
|
|
70
|
+
6. Except for these additional terms, the Apache License 2.0 applies,
|
|
71
|
+
including its copyright, notice, patent, warranty, and liability
|
|
72
|
+
provisions. The Software is provided “AS IS”, without warranties or
|
|
73
|
+
conditions of any kind.
|
ok_script-2.0.0/PKG-INFO
ADDED
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: ok-script
|
|
3
|
+
Version: 2.0.0
|
|
4
|
+
Summary: Automation with Computer Vision for Python
|
|
5
|
+
Author-email: ok-oldking <firedcto@gmail.com>
|
|
6
|
+
License: ok-script License
|
|
7
|
+
================
|
|
8
|
+
|
|
9
|
+
Copyright (c) 2026 ok-oldking
|
|
10
|
+
|
|
11
|
+
This project is licensed under the Apache License, Version 2.0, as modified
|
|
12
|
+
by the Commons Clause License Condition v1.0 and the additional terms below.
|
|
13
|
+
The Apache License, Version 2.0, is available at:
|
|
14
|
+
|
|
15
|
+
https://www.apache.org/licenses/LICENSE-2.0
|
|
16
|
+
|
|
17
|
+
The Commons Clause License Condition v1.0 is available at:
|
|
18
|
+
|
|
19
|
+
https://commonsclause.com/
|
|
20
|
+
|
|
21
|
+
If there is a conflict between the Apache License 2.0 and the Commons Clause
|
|
22
|
+
or additional terms below, the Commons Clause and additional terms control.
|
|
23
|
+
|
|
24
|
+
Commons Clause
|
|
25
|
+
-------------
|
|
26
|
+
|
|
27
|
+
Without limiting the conditions of the Apache License 2.0, the grant of
|
|
28
|
+
rights under that license does not include the right to Sell this Software.
|
|
29
|
+
|
|
30
|
+
For this license, “Sell” means selling, lending, leasing, licensing, offering
|
|
31
|
+
for sale, lease, or license, or otherwise transferring this Software to a
|
|
32
|
+
third party for a fee or other consideration. “Sell” does not include:
|
|
33
|
+
|
|
34
|
+
* Using the Software internally, including by an organization or its
|
|
35
|
+
employees, without transferring it to a third party for a fee or other
|
|
36
|
+
consideration; or
|
|
37
|
+
* Distributing the Software as part of a larger application or product,
|
|
38
|
+
provided that the larger application or product is not primarily the
|
|
39
|
+
Software or a competing product.
|
|
40
|
+
|
|
41
|
+
Additional Terms
|
|
42
|
+
----------------
|
|
43
|
+
|
|
44
|
+
1. You may use this Software in closed-source and commercial projects. You
|
|
45
|
+
may charge for your own application, service, support, or other material
|
|
46
|
+
that incorporates the Software, provided that you do not sell or offer the
|
|
47
|
+
Software itself, or a competing product based primarily on it, as a product.
|
|
48
|
+
|
|
49
|
+
2. You may fork the Software, make improvements, and keep the fork open
|
|
50
|
+
source and freely available. You may not take this project, rename it or
|
|
51
|
+
make only minor changes, and sell or market it as a competing product.
|
|
52
|
+
|
|
53
|
+
3. You may not use this Software for hacking, unauthorized access, malware,
|
|
54
|
+
fraud, or any other illegal activity. You are responsible for complying
|
|
55
|
+
with all applicable laws and obtaining authorization for any security or
|
|
56
|
+
automation activity.
|
|
57
|
+
|
|
58
|
+
4. Any project that uses, incorporates, or is derived from this Software
|
|
59
|
+
must mention ok-script and link to at least one of the following in at
|
|
60
|
+
least one of the project's website, GitHub repository, or the software
|
|
61
|
+
itself:
|
|
62
|
+
|
|
63
|
+
* Website: https://ok-script.com/
|
|
64
|
+
* GitHub: https://github.com/ok-oldking/ok-script
|
|
65
|
+
|
|
66
|
+
The notice must be reasonably visible and retained in modified or
|
|
67
|
+
redistributed versions.
|
|
68
|
+
|
|
69
|
+
5. Use of the Qt UI, including components based on PyQt-Fluent-Widgets or
|
|
70
|
+
its related packages, is separately subject to the license and terms of
|
|
71
|
+
the upstream project:
|
|
72
|
+
|
|
73
|
+
https://github.com/zhiyiYo/PyQt-Fluent-Widgets
|
|
74
|
+
|
|
75
|
+
6. Except for these additional terms, the Apache License 2.0 applies,
|
|
76
|
+
including its copyright, notice, patent, warranty, and liability
|
|
77
|
+
provisions. The Software is provided “AS IS”, without warranties or
|
|
78
|
+
conditions of any kind.
|
|
79
|
+
|
|
80
|
+
Project-URL: Homepage, https://github.com/ok-oldking/ok-script
|
|
81
|
+
Project-URL: Repository, https://github.com/ok-oldking/ok-script
|
|
82
|
+
Classifier: Programming Language :: Python :: 3
|
|
83
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
84
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
85
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
86
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
87
|
+
Classifier: Intended Audience :: Developers
|
|
88
|
+
Classifier: Operating System :: Microsoft :: Windows
|
|
89
|
+
Requires-Python: >=3.11
|
|
90
|
+
Description-Content-Type: text/markdown
|
|
91
|
+
License-File: LICENSE.txt
|
|
92
|
+
Requires-Dist: pywin32>=306
|
|
93
|
+
Requires-Dist: pyappify>=1.0.9
|
|
94
|
+
Requires-Dist: typing-extensions>=4.11.0
|
|
95
|
+
Requires-Dist: requests>=2.32.3
|
|
96
|
+
Requires-Dist: psutil>=6.0.0
|
|
97
|
+
Requires-Dist: pydirectinput==1.0.4
|
|
98
|
+
Requires-Dist: pycaw==20240210
|
|
99
|
+
Requires-Dist: mouse==0.7.1
|
|
100
|
+
Requires-Dist: pynput>=1.8.1
|
|
101
|
+
Provides-Extra: default
|
|
102
|
+
Requires-Dist: numpy>=1.26.4; extra == "default"
|
|
103
|
+
Requires-Dist: Pillow>=10.0; extra == "default"
|
|
104
|
+
Requires-Dist: ok-d3dshot>=0.1.5; extra == "default"
|
|
105
|
+
Requires-Dist: OpenCC==1.2.0; extra == "default"
|
|
106
|
+
Provides-Extra: web
|
|
107
|
+
Requires-Dist: fastapi>=0.115.0; extra == "web"
|
|
108
|
+
Requires-Dist: uvicorn[standard]>=0.30.0; extra == "web"
|
|
109
|
+
Requires-Dist: pywebview>=5.4; extra == "web"
|
|
110
|
+
Provides-Extra: qt
|
|
111
|
+
Requires-Dist: PySide6-Essentials>=6.7.0; extra == "qt"
|
|
112
|
+
Requires-Dist: PySideSix-Frameless-Window>=0.3.12; extra == "qt"
|
|
113
|
+
Requires-Dist: darkdetect>=0.8.0; extra == "qt"
|
|
114
|
+
Requires-Dist: PySide6-Fluent-Widgets>=1.8.3; extra == "qt"
|
|
115
|
+
Provides-Extra: adb
|
|
116
|
+
Requires-Dist: adbutils>=2.2.1; extra == "adb"
|
|
117
|
+
Provides-Extra: ocr
|
|
118
|
+
Requires-Dist: onnxocr-ppocrv5; extra == "ocr"
|
|
119
|
+
Provides-Extra: dev
|
|
120
|
+
Requires-Dist: pytest>=8.0; extra == "dev"
|
|
121
|
+
Requires-Dist: mypy>=1.10; extra == "dev"
|
|
122
|
+
Requires-Dist: build>=1.2; extra == "dev"
|
|
123
|
+
Requires-Dist: twine>=5.0; extra == "dev"
|
|
124
|
+
Requires-Dist: setuptools>=77; extra == "dev"
|
|
125
|
+
Requires-Dist: wheel; extra == "dev"
|
|
126
|
+
Requires-Dist: get-pypi-latest-version; extra == "dev"
|
|
127
|
+
Requires-Dist: mkdocs-material==9.7.7; extra == "dev"
|
|
128
|
+
Dynamic: license-file
|
|
129
|
+
|
|
130
|
+
# ok-script
|
|
131
|
+
|
|
132
|
+
## 无界面、桌面与 Web 模式
|
|
133
|
+
|
|
134
|
+
自动化核心现已与 Qt 解耦。使用 `ok-script` 可无界面运行,使用
|
|
135
|
+
`ok-script[qt]` 启用原有桌面界面,或使用 `ok-script[web]` 启用 FastAPI
|
|
136
|
+
浏览器界面;对应命令为 `ok run_task`、`ok gui` 和 `ok web`。详见
|
|
137
|
+
[运行时架构](docs/architecture.md)。
|
|
138
|
+
|
|
139
|
+
[简体中文](README.md) | [English](README_en.md)
|
|
140
|
+
|
|
141
|
+
[](https://discord.gg/vVyCatEBgA)
|
|
142
|
+
|
|
143
|
+
基于计算机视觉的 Python 自动化框架,面向 Windows 应用、Windows 游戏、安卓模拟器和 ADB 设备。
|
|
144
|
+
|
|
145
|
+
ok-script 提供 UI、截图与输入、设备控制、OCR、模板匹配、调试浮层、自动化测试、打包和增量更新能力。它使用 COCO 格式管理模板素材,并支持分辨率自适应与多语言界面。
|
|
146
|
+
|
|
147
|
+
## 特性
|
|
148
|
+
|
|
149
|
+
- 纯 Python 实现,免费开源,可直接使用 pip 生态中的第三方库
|
|
150
|
+
- 同一套任务代码可支持 Windows 客户端、安卓模拟器和 ADB 设备
|
|
151
|
+
- 支持 OCR、OpenCV 模板匹配以及 YOLO 等视觉方案
|
|
152
|
+
- 基于 COCO 标注管理模板素材,并根据屏幕分辨率自动缩放
|
|
153
|
+
- 内置截图、输入、设备控制和可视化调试工具
|
|
154
|
+
- 支持自动化测试、GitHub Actions 构建和安装包发布
|
|
155
|
+
- 支持多语言国际化和在线增量更新
|
|
156
|
+
|
|
157
|
+
## 快速安装
|
|
158
|
+
|
|
159
|
+
ok-script 支持 Python 3.11 及以上版本,推荐使用 Python 3.12。
|
|
160
|
+
|
|
161
|
+
```powershell
|
|
162
|
+
python -m pip install ok-script
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
只安装应用所需的依赖配置。`default` 为无界面模式,Web、Qt、ADB 和 OCR
|
|
166
|
+
能力分别按需安装:
|
|
167
|
+
|
|
168
|
+
```powershell
|
|
169
|
+
python -m pip install "ok-script[default]"
|
|
170
|
+
python -m pip install "ok-script[qt]"
|
|
171
|
+
python -m pip install "ok-script[web]"
|
|
172
|
+
python -m pip install "ok-script[adb]"
|
|
173
|
+
python -m pip install "ok-script[ocr]"
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
ok-script 不会自动选择 OpenCV。用户必须根据自己的应用选择版本,并且只安装
|
|
177
|
+
一个变体:`opencv-python`、`opencv-contrib-python`、`opencv-python-headless`
|
|
178
|
+
或 `opencv-contrib-python-headless`。
|
|
179
|
+
|
|
180
|
+
以无界面模式开发本仓库时,同时安装 `pyproject.toml` 中的 `default` 和 `dev`
|
|
181
|
+
依赖组;再根据需要添加 `--group web`、`--group qt`、`--group adb` 或
|
|
182
|
+
`--group ocr`:
|
|
183
|
+
|
|
184
|
+
```powershell
|
|
185
|
+
python -m pip install --editable . --group default --group dev
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
如果要创建完整的自动化项目,建议从 [`ok-script-app`](https://github.com/ok-oldking/ok-script-app) 模板开始,而不是直接在本仓库中编写业务脚本。
|
|
189
|
+
|
|
190
|
+
## 文档
|
|
191
|
+
|
|
192
|
+
从[文档中心](docs/index.md)选择适合你的阅读路径:
|
|
193
|
+
|
|
194
|
+
1. [游戏自动化入门](docs/intro_to_automation/README.md):了解截图、识别、决策和输入的基本原理
|
|
195
|
+
2. [快速开始](docs/quick_start/README.md):从模板仓库创建并运行第一个项目
|
|
196
|
+
3. [进阶指南](docs/after_quick_start/README.md):模板匹配、国际化、测试和发布
|
|
197
|
+
4. [API 参考](docs/api_doc/README.md):`Box`、`BaseTask` 及常用任务 API
|
|
198
|
+
|
|
199
|
+
想先体验完整工具链,也可以使用基于 ok-script 的按键精灵项目 [`ok-py`](https://github.com/ok-oldking/ok-py)。
|
|
200
|
+
|
|
201
|
+
## 界面预览
|
|
202
|
+
|
|
203
|
+
| 任务配置 | 截图与交互 |
|
|
204
|
+
| --- | --- |
|
|
205
|
+
|  |  |
|
|
206
|
+
|
|
207
|
+
| 脚本与 API | 模板管理 |
|
|
208
|
+
| --- | --- |
|
|
209
|
+
|  |  |
|
|
210
|
+
|
|
211
|
+
[查看界面与开发工具完整说明](docs/interface.md),包括模板识别调试浮层。
|
|
212
|
+
|
|
213
|
+
## 使用 ok-script 的项目
|
|
214
|
+
|
|
215
|
+
- [ok-script 应用模板](https://github.com/ok-oldking/ok-script-app)
|
|
216
|
+
- [鸣潮](https://github.com/ok-oldking/ok-wuthering-waves)
|
|
217
|
+
- [原神](https://github.com/ok-oldking/ok-genshin-impact)(停止维护,后台过剧情仍可用)
|
|
218
|
+
- [少女前线 2](https://github.com/ok-oldking/ok-gf2)
|
|
219
|
+
- [崩坏:星穹铁道](https://github.com/Shasnow/ok-starrailassistant)
|
|
220
|
+
- [星痕共鸣](https://github.com/Sanheiii/ok-star-resonance)
|
|
221
|
+
- [二重螺旋](https://github.com/BnanZ0/ok-duet-night-abyss)
|
|
222
|
+
- [卡厄思梦境](https://github.com/baoxin1100/ok-kes)
|
|
223
|
+
- [阴阳师](https://github.com/YunLiuZ/ok-Onmyoji)
|
|
224
|
+
- [白荆回廊](https://github.com/ok-oldking/ok-baijing)(停止维护)
|
|
225
|
+
- [明日方舟:终末地](https://github.com/AliceJump/ok-end-field)
|
|
226
|
+
- [异环](https://github.com/BnanZ0/ok-nte)
|
|
227
|
+
|
|
228
|
+
## 社区与发布
|
|
229
|
+
|
|
230
|
+
- 开发者 QQ 群:938132715
|
|
231
|
+
- [PyPI](https://pypi.org/project/ok-script/)
|
|
232
|
+
- [GitHub](https://github.com/ok-oldking/ok-script)
|
|
233
|
+
|
|
234
|
+
## 致谢
|
|
235
|
+
|
|
236
|
+
ok-script 的开发离不开以下开源项目:
|
|
237
|
+
|
|
238
|
+
- [PyAppify](https://github.com/ok-oldking/pyappify):用于应用更新和打包。
|
|
239
|
+
- [OnnxOCR](https://github.com/ok-oldking/OnnxOCR):提供支持 Intel NPU 的 OCR,
|
|
240
|
+
支持通过 OpenVINO 或 ONNX Runtime 推理,并使用 PaddleOCR v5 模型。
|
|
241
|
+
- [PySide6](https://wiki.qt.io/Qt_for_Python):提供基于 Qt 的桌面界面绑定。
|
|
242
|
+
- [PyQt-Fluent-Widgets](https://github.com/zhiyiYo/PyQt-Fluent-Widgets):Qt
|
|
243
|
+
界面使用的 Fluent UI 组件。
|
|
244
|
+
- [OpenCV](https://opencv.org/)、[NumPy](https://numpy.org/) 和
|
|
245
|
+
[Pillow](https://python-pillow.org/):用于图像处理和计算机视觉。
|
|
246
|
+
- [FastAPI](https://fastapi.tiangolo.com/)、[Uvicorn](https://www.uvicorn.org/)
|
|
247
|
+
和 [pywebview](https://pywebview.flowrl.com/):用于 Web 界面支持。
|
|
248
|
+
- [adbutils](https://github.com/openatx/adbutils):用于 Android 设备连接。
|
|
249
|
+
|
|
250
|
+
上述依赖均受其各自许可证约束,详情请参阅对应项目页面。
|
|
251
|
+
|
|
252
|
+
## 许可证
|
|
253
|
+
|
|
254
|
+
本项目采用 [Apache License 2.0 + Commons Clause 及附加条款](LICENSE.txt)。
|
|
255
|
+
|
|
256
|
+
允许的使用方式:
|
|
257
|
+
|
|
258
|
+
- 可用于闭源项目或商业项目。
|
|
259
|
+
- 可以 fork、本项目改进,并保持 fork 开源且免费。
|
|
260
|
+
|
|
261
|
+
限制:
|
|
262
|
+
|
|
263
|
+
- 禁止直接出售本项目,或仅改名、稍作修改后将其作为竞争产品出售或推广。
|
|
264
|
+
- 禁止将本项目用于黑客攻击、未授权访问、恶意软件、欺诈或其他违法活动。
|
|
265
|
+
- 任何使用 ok-script 的项目,都必须在项目网站、GitHub 或软件本身至少一处提及并链接 [ok-script.com](https://ok-script.com/) 或 [ok-script GitHub](https://github.com/ok-oldking/ok-script)。
|
|
266
|
+
- Qt UI 的使用还必须遵守 [PyQt-Fluent-Widgets](https://github.com/zhiyiYo/PyQt-Fluent-Widgets) 的许可证。
|
|
@@ -1,43 +1,12 @@
|
|
|
1
|
-
Metadata-Version: 2.4
|
|
2
|
-
Name: ok-script
|
|
3
|
-
Version: 1.0.190
|
|
4
|
-
Summary: Automation with Computer Vision for Python
|
|
5
|
-
Home-page: https://github.com/ok-oldking/ok-script
|
|
6
|
-
Author: ok-oldking
|
|
7
|
-
Author-email: firedcto@gmail.com
|
|
8
|
-
Classifier: Programming Language :: Python :: 3
|
|
9
|
-
Classifier: Programming Language :: Python :: 3.11
|
|
10
|
-
Classifier: Programming Language :: Python :: 3.12
|
|
11
|
-
Classifier: Programming Language :: Python :: 3.13
|
|
12
|
-
Classifier: Programming Language :: Python :: 3.14
|
|
13
|
-
Classifier: Intended Audience :: Developers
|
|
14
|
-
Classifier: License :: OSI Approved :: MIT License
|
|
15
|
-
Classifier: Operating System :: Microsoft :: Windows
|
|
16
|
-
Requires-Python: >=3.11
|
|
17
|
-
Description-Content-Type: text/markdown
|
|
18
|
-
License-File: LICENSE.txt
|
|
19
|
-
Requires-Dist: pywin32>=306
|
|
20
|
-
Requires-Dist: pyappify>=1.0.6
|
|
21
|
-
Requires-Dist: PySide6-Fluent-Widgets>=1.8.3
|
|
22
|
-
Requires-Dist: typing-extensions>=4.11.0
|
|
23
|
-
Requires-Dist: requests>=2.32.3
|
|
24
|
-
Requires-Dist: psutil>=6.0.0
|
|
25
|
-
Requires-Dist: pydirectinput==1.0.4
|
|
26
|
-
Requires-Dist: pycaw==20240210
|
|
27
|
-
Requires-Dist: mouse==0.7.1
|
|
28
|
-
Dynamic: author
|
|
29
|
-
Dynamic: author-email
|
|
30
|
-
Dynamic: classifier
|
|
31
|
-
Dynamic: description
|
|
32
|
-
Dynamic: description-content-type
|
|
33
|
-
Dynamic: home-page
|
|
34
|
-
Dynamic: license-file
|
|
35
|
-
Dynamic: requires-dist
|
|
36
|
-
Dynamic: requires-python
|
|
37
|
-
Dynamic: summary
|
|
38
|
-
|
|
39
1
|
# ok-script
|
|
40
2
|
|
|
3
|
+
## 无界面、桌面与 Web 模式
|
|
4
|
+
|
|
5
|
+
自动化核心现已与 Qt 解耦。使用 `ok-script` 可无界面运行,使用
|
|
6
|
+
`ok-script[qt]` 启用原有桌面界面,或使用 `ok-script[web]` 启用 FastAPI
|
|
7
|
+
浏览器界面;对应命令为 `ok run_task`、`ok gui` 和 `ok web`。详见
|
|
8
|
+
[运行时架构](docs/architecture.md)。
|
|
9
|
+
|
|
41
10
|
[简体中文](README.md) | [English](README_en.md)
|
|
42
11
|
|
|
43
12
|
[](https://discord.gg/vVyCatEBgA)
|
|
@@ -64,6 +33,29 @@ ok-script 支持 Python 3.11 及以上版本,推荐使用 Python 3.12。
|
|
|
64
33
|
python -m pip install ok-script
|
|
65
34
|
```
|
|
66
35
|
|
|
36
|
+
只安装应用所需的依赖配置。`default` 为无界面模式,Web、Qt、ADB 和 OCR
|
|
37
|
+
能力分别按需安装:
|
|
38
|
+
|
|
39
|
+
```powershell
|
|
40
|
+
python -m pip install "ok-script[default]"
|
|
41
|
+
python -m pip install "ok-script[qt]"
|
|
42
|
+
python -m pip install "ok-script[web]"
|
|
43
|
+
python -m pip install "ok-script[adb]"
|
|
44
|
+
python -m pip install "ok-script[ocr]"
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
ok-script 不会自动选择 OpenCV。用户必须根据自己的应用选择版本,并且只安装
|
|
48
|
+
一个变体:`opencv-python`、`opencv-contrib-python`、`opencv-python-headless`
|
|
49
|
+
或 `opencv-contrib-python-headless`。
|
|
50
|
+
|
|
51
|
+
以无界面模式开发本仓库时,同时安装 `pyproject.toml` 中的 `default` 和 `dev`
|
|
52
|
+
依赖组;再根据需要添加 `--group web`、`--group qt`、`--group adb` 或
|
|
53
|
+
`--group ocr`:
|
|
54
|
+
|
|
55
|
+
```powershell
|
|
56
|
+
python -m pip install --editable . --group default --group dev
|
|
57
|
+
```
|
|
58
|
+
|
|
67
59
|
如果要创建完整的自动化项目,建议从 [`ok-script-app`](https://github.com/ok-oldking/ok-script-app) 模板开始,而不是直接在本仓库中编写业务脚本。
|
|
68
60
|
|
|
69
61
|
## 文档
|
|
@@ -110,6 +102,36 @@ python -m pip install ok-script
|
|
|
110
102
|
- [PyPI](https://pypi.org/project/ok-script/)
|
|
111
103
|
- [GitHub](https://github.com/ok-oldking/ok-script)
|
|
112
104
|
|
|
105
|
+
## 致谢
|
|
106
|
+
|
|
107
|
+
ok-script 的开发离不开以下开源项目:
|
|
108
|
+
|
|
109
|
+
- [PyAppify](https://github.com/ok-oldking/pyappify):用于应用更新和打包。
|
|
110
|
+
- [OnnxOCR](https://github.com/ok-oldking/OnnxOCR):提供支持 Intel NPU 的 OCR,
|
|
111
|
+
支持通过 OpenVINO 或 ONNX Runtime 推理,并使用 PaddleOCR v5 模型。
|
|
112
|
+
- [PySide6](https://wiki.qt.io/Qt_for_Python):提供基于 Qt 的桌面界面绑定。
|
|
113
|
+
- [PyQt-Fluent-Widgets](https://github.com/zhiyiYo/PyQt-Fluent-Widgets):Qt
|
|
114
|
+
界面使用的 Fluent UI 组件。
|
|
115
|
+
- [OpenCV](https://opencv.org/)、[NumPy](https://numpy.org/) 和
|
|
116
|
+
[Pillow](https://python-pillow.org/):用于图像处理和计算机视觉。
|
|
117
|
+
- [FastAPI](https://fastapi.tiangolo.com/)、[Uvicorn](https://www.uvicorn.org/)
|
|
118
|
+
和 [pywebview](https://pywebview.flowrl.com/):用于 Web 界面支持。
|
|
119
|
+
- [adbutils](https://github.com/openatx/adbutils):用于 Android 设备连接。
|
|
120
|
+
|
|
121
|
+
上述依赖均受其各自许可证约束,详情请参阅对应项目页面。
|
|
122
|
+
|
|
113
123
|
## 许可证
|
|
114
124
|
|
|
115
|
-
本项目采用 [
|
|
125
|
+
本项目采用 [Apache License 2.0 + Commons Clause 及附加条款](LICENSE.txt)。
|
|
126
|
+
|
|
127
|
+
允许的使用方式:
|
|
128
|
+
|
|
129
|
+
- 可用于闭源项目或商业项目。
|
|
130
|
+
- 可以 fork、本项目改进,并保持 fork 开源且免费。
|
|
131
|
+
|
|
132
|
+
限制:
|
|
133
|
+
|
|
134
|
+
- 禁止直接出售本项目,或仅改名、稍作修改后将其作为竞争产品出售或推广。
|
|
135
|
+
- 禁止将本项目用于黑客攻击、未授权访问、恶意软件、欺诈或其他违法活动。
|
|
136
|
+
- 任何使用 ok-script 的项目,都必须在项目网站、GitHub 或软件本身至少一处提及并链接 [ok-script.com](https://ok-script.com/) 或 [ok-script GitHub](https://github.com/ok-oldking/ok-script)。
|
|
137
|
+
- Qt UI 的使用还必须遵守 [PyQt-Fluent-Widgets](https://github.com/zhiyiYo/PyQt-Fluent-Widgets) 的许可证。
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
"""Trace QQ notification navigation without sending a message.
|
|
2
|
+
|
|
3
|
+
Usage: .venv\\Scripts\\python.exe diagnostics\\qq_trace.py [nickname]
|
|
4
|
+
"""
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
import logging
|
|
8
|
+
import sys
|
|
9
|
+
import time
|
|
10
|
+
from pathlib import Path
|
|
11
|
+
|
|
12
|
+
import cv2
|
|
13
|
+
import numpy as np
|
|
14
|
+
from types import SimpleNamespace
|
|
15
|
+
|
|
16
|
+
sys.path.insert(0, str(Path(__file__).resolve().parents[1]))
|
|
17
|
+
from ok.notification.windows_messenger import MessengerAutomation
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
OUT = Path(__file__).resolve().parents[1] / "logs" / "qq_trace"
|
|
21
|
+
OUT.mkdir(parents=True, exist_ok=True)
|
|
22
|
+
logging.basicConfig(
|
|
23
|
+
filename=OUT / "trace.log",
|
|
24
|
+
level=logging.INFO,
|
|
25
|
+
format="%(asctime)s.%(msecs)03d %(levelname)s %(message)s",
|
|
26
|
+
datefmt="%Y-%m-%d %H:%M:%S",
|
|
27
|
+
)
|
|
28
|
+
log = logging.getLogger("qq_trace")
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def snap(automation: MessengerAutomation, hwnd: int, label: str) -> None:
|
|
32
|
+
try:
|
|
33
|
+
frame = automation._capture(hwnd)
|
|
34
|
+
path = OUT / f"{time.time_ns()}_{label}.png"
|
|
35
|
+
cv2.imwrite(str(path), frame)
|
|
36
|
+
log.info("screenshot label=%s path=%s shape=%s", label, path, frame.shape)
|
|
37
|
+
except Exception:
|
|
38
|
+
log.exception("screenshot_failed label=%s", label)
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def main() -> int:
|
|
42
|
+
nickname = (sys.argv[1] if len(sys.argv) > 1 else "文件传输助手").strip()
|
|
43
|
+
log.info("START nickname=%r", nickname)
|
|
44
|
+
automation = MessengerAutomation(
|
|
45
|
+
("QQ.exe",), SimpleNamespace(), window_titles=("QQ",),
|
|
46
|
+
dismiss_search_after_contact=True, post_activate=False,
|
|
47
|
+
)
|
|
48
|
+
hwnd = automation._find_hwnd()
|
|
49
|
+
log.info("find_hwnd hwnd=%s foreground=%s", hwnd, __import__("win32gui").GetForegroundWindow())
|
|
50
|
+
if not hwnd:
|
|
51
|
+
log.error("QQ window not found")
|
|
52
|
+
return 2
|
|
53
|
+
snap(automation, hwnd, "01_initial")
|
|
54
|
+
if not automation._wait_until_background(hwnd):
|
|
55
|
+
log.warning("wait_until_background returned false")
|
|
56
|
+
return 3
|
|
57
|
+
log.info("background_ready foreground=%s", __import__("win32gui").GetForegroundWindow())
|
|
58
|
+
snap(automation, hwnd, "02_background_ready")
|
|
59
|
+
search_region, contact_region, send_region = automation._layout_regions(hwnd)
|
|
60
|
+
log.info("layout search=%s contact=%s send=%s", search_region, contact_region, send_region)
|
|
61
|
+
search = automation._wait_text(hwnd, {"Search", "搜索"}, region=search_region, timeout=1.5)
|
|
62
|
+
log.info("search_ocr point=%s", search)
|
|
63
|
+
if search is None:
|
|
64
|
+
search = automation._search_field_point(hwnd)
|
|
65
|
+
log.info("search_fallback point=%s", search)
|
|
66
|
+
snap(automation, hwnd, "03_before_search_click")
|
|
67
|
+
target = automation._click(hwnd, search)
|
|
68
|
+
log.info("click search target=%s point=%s", target, search)
|
|
69
|
+
snap(automation, hwnd, "04_after_search_click")
|
|
70
|
+
time.sleep(1)
|
|
71
|
+
automation._clear_text(target)
|
|
72
|
+
log.info("clear search")
|
|
73
|
+
time.sleep(1)
|
|
74
|
+
automation._type_text(target, nickname)
|
|
75
|
+
log.info("type nickname=%r", nickname)
|
|
76
|
+
time.sleep(1)
|
|
77
|
+
snap(automation, hwnd, "05_after_typing")
|
|
78
|
+
contact_hwnd, contact = automation._wait_contact(hwnd, nickname, contact_region, timeout=8)
|
|
79
|
+
log.info("contact_result hwnd=%s point=%s", contact_hwnd, contact)
|
|
80
|
+
if contact is None:
|
|
81
|
+
log.error("contact not found")
|
|
82
|
+
automation._send_key(hwnd, 0x1B)
|
|
83
|
+
snap(automation, hwnd, "06_contact_not_found_escape")
|
|
84
|
+
return 4
|
|
85
|
+
automation._click(contact_hwnd, contact, focus=contact_hwnd == hwnd)
|
|
86
|
+
log.info("click contact target=%s point=%s", contact_hwnd, contact)
|
|
87
|
+
snap(automation, hwnd, "06_after_contact_click")
|
|
88
|
+
time.sleep(1)
|
|
89
|
+
automation._send_key(hwnd, 0x1B)
|
|
90
|
+
log.info("send escape to dismiss search overlay")
|
|
91
|
+
time.sleep(1)
|
|
92
|
+
snap(automation, hwnd, "07_after_escape")
|
|
93
|
+
send_box = automation._wait_text(hwnd, {"Send", "发送"}, region=send_region, timeout=3)
|
|
94
|
+
log.info("send_box=%s (dry-run; no message sent)", send_box)
|
|
95
|
+
snap(automation, hwnd, "08_final_dry_run")
|
|
96
|
+
log.info("END")
|
|
97
|
+
return 0
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
if __name__ == "__main__":
|
|
101
|
+
raise SystemExit(main())
|