From ed6b60e14a7c365eb0f634c1c5776e00f406e9fa Mon Sep 17 00:00:00 2001 From: qrbian <1641582285@qq.com> Date: Fri, 7 Mar 2025 10:37:50 +0800 Subject: [PATCH] first --- Scripts/.idea/.gitignore | 3 + Scripts/.idea/Scripts.iml | 8 + .../inspectionProfiles/profiles_settings.xml | 6 + Scripts/.idea/misc.xml | 7 + Scripts/.idea/modules.xml | 8 + Scripts/.vscode/settings.json | 20 + Scripts/@AutomationLog.txt | 26 + Scripts/Data/1.txt | 121 ++++ Scripts/WinUIBase.py | 209 +++++++ Scripts/__pycache__/WinUIBase.cpython-310.pyc | Bin 0 -> 3544 bytes .../__pycache__/aacecontrol.cpython-310.pyc | Bin 0 -> 11894 bytes .../__pycache__/file_script.cpython-310.pyc | Bin 0 -> 2909 bytes Scripts/aacecontrol.py | 571 ++++++++++++++++++ Scripts/file_script.py | 98 +++ Scripts/service.py | 236 ++++++++ Scripts/temp.bmp | Bin 0 -> 132718 bytes Scripts/temp.png | Bin 0 -> 6734 bytes readme.md | 21 + readme1 (2).md | 31 + 19 files changed, 1365 insertions(+) create mode 100644 Scripts/.idea/.gitignore create mode 100644 Scripts/.idea/Scripts.iml create mode 100644 Scripts/.idea/inspectionProfiles/profiles_settings.xml create mode 100644 Scripts/.idea/misc.xml create mode 100644 Scripts/.idea/modules.xml create mode 100644 Scripts/.vscode/settings.json create mode 100644 Scripts/@AutomationLog.txt create mode 100644 Scripts/Data/1.txt create mode 100644 Scripts/WinUIBase.py create mode 100644 Scripts/__pycache__/WinUIBase.cpython-310.pyc create mode 100644 Scripts/__pycache__/aacecontrol.cpython-310.pyc create mode 100644 Scripts/__pycache__/file_script.cpython-310.pyc create mode 100644 Scripts/aacecontrol.py create mode 100644 Scripts/file_script.py create mode 100644 Scripts/service.py create mode 100644 Scripts/temp.bmp create mode 100644 Scripts/temp.png create mode 100644 readme.md create mode 100644 readme1 (2).md diff --git a/Scripts/.idea/.gitignore b/Scripts/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/Scripts/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/Scripts/.idea/Scripts.iml b/Scripts/.idea/Scripts.iml new file mode 100644 index 0000000..8437fe6 --- /dev/null +++ b/Scripts/.idea/Scripts.iml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/Scripts/.idea/inspectionProfiles/profiles_settings.xml b/Scripts/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 0000000..105ce2d --- /dev/null +++ b/Scripts/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/Scripts/.idea/misc.xml b/Scripts/.idea/misc.xml new file mode 100644 index 0000000..9de2865 --- /dev/null +++ b/Scripts/.idea/misc.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/Scripts/.idea/modules.xml b/Scripts/.idea/modules.xml new file mode 100644 index 0000000..d038d5e --- /dev/null +++ b/Scripts/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/Scripts/.vscode/settings.json b/Scripts/.vscode/settings.json new file mode 100644 index 0000000..0ce7a27 --- /dev/null +++ b/Scripts/.vscode/settings.json @@ -0,0 +1,20 @@ +{ + "MicroPython.executeButton": [ + { + "text": "▶", + "tooltip": "运行", + "alignment": "left", + "command": "extension.executeFile", + "priority": 3.5 + } + ], + "MicroPython.syncButton": [ + { + "text": "$(sync)", + "tooltip": "同步", + "alignment": "left", + "command": "extension.execute", + "priority": 4 + } + ] +} \ No newline at end of file diff --git a/Scripts/@AutomationLog.txt b/Scripts/@AutomationLog.txt new file mode 100644 index 0000000..243e607 --- /dev/null +++ b/Scripts/@AutomationLog.txt @@ -0,0 +1,26 @@ +2024-04-11 20:23:56.466 pydevd_resolver.py[189] _get_py_dictionary -> Find Control Timeout(10s): {ControlType: ListItemControl} +2024-04-11 20:24:06.474 pydevd_resolver.py[189] _get_py_dictionary -> Find Control Timeout(10s): {ControlType: ListItemControl} +2024-04-11 20:24:16.517 pydevd_resolver.py[189] _get_py_dictionary -> Find Control Timeout(10s): {ControlType: ListItemControl} +2024-04-11 20:24:26.567 pydevd_resolver.py[189] _get_py_dictionary -> 2024-04-11 21:07:33.369 pydevd_resolver.py[189] _get_py_dictionary -> Find Control Timeout(10s): {Control: 6160838, ControlType: DataGridControl} +2024-04-11 21:07:45.575 pydevd_resolver.py[189] _get_py_dictionary -> 2024-04-11 21:17:30.731 pydevd_resolver.py[189] _get_py_dictionary -> Find Control Timeout(10s): {ClassName: 'TMyListView', ControlType: DataGridControl} +2024-04-11 21:17:41.020 pydevd_resolver.py[189] _get_py_dictionary -> 2024-04-11 21:18:15.553 pydevd_resolver.py[189] _get_py_dictionary -> 2024-04-11 21:18:47.237 pydevd_resolver.py[189] _get_py_dictionary -> 2024-05-27 19:00:04.823 pydevd_resolver.py[189] _get_py_dictionary -> Find Control Timeout(10s): {Name: 'AACE 登录', ControlType: WindowControl} +2024-05-27 19:00:14.991 pydevd_resolver.py[189] _get_py_dictionary -> Find Control Timeout(10s): {Name: 'AACE 登录', ControlType: WindowControl} +2024-05-27 19:00:25.181 pydevd_resolver.py[189] _get_py_dictionary -> Find Control Timeout(10s): {Name: 'AACE 登录', ControlType: WindowControl} +2024-05-27 19:00:35.334 pydevd_resolver.py[189] _get_py_dictionary -> 2024-05-28 16:48:40.572 pydevd_resolver.py[189] _get_py_dictionary -> Find Control Timeout(10s): {ControlType: ListControl} +2024-05-28 16:48:50.705 pydevd_resolver.py[189] _get_py_dictionary -> Find Control Timeout(10s): {ControlType: ListControl} +2024-05-28 16:49:00.704 pydevd_resolver.py[189] _get_py_dictionary -> 2024-05-29 15:21:38.378 pydevd_resolver.py[189] _get_py_dictionary -> Find Control Timeout(10s): {ClassName: 'TMyListView', ControlType: DataGridControl} +2024-05-29 15:21:48.827 pydevd_resolver.py[189] _get_py_dictionary -> Find Control Timeout(10s): {ClassName: 'TMyListView', ControlType: DataGridControl} +2024-05-29 15:21:59.232 pydevd_resolver.py[189] _get_py_dictionary -> Find Control Timeout(10s): {ClassName: 'TMyListView', ControlType: DataGridControl} +2024-05-29 15:22:09.638 pydevd_resolver.py[189] _get_py_dictionary -> Find Control Timeout(10s): {ClassName: 'TMyListView', ControlType: DataGridControl} +2024-05-29 15:22:19.706 pydevd_resolver.py[189] _get_py_dictionary -> Find Control Timeout(10s): {ClassName: 'TMyListView', ControlType: DataGridControl} +2024-05-29 15:22:30.139 pydevd_resolver.py[189] _get_py_dictionary -> Find Control Timeout(10s): {ClassName: 'TMyListView', ControlType: DataGridControl} +2024-05-29 15:22:40.564 pydevd_resolver.py[189] _get_py_dictionary -> Find Control Timeout(10s): {ClassName: 'TMyListView', ControlType: DataGridControl} +2024-05-29 15:22:51.016 pydevd_resolver.py[189] _get_py_dictionary -> 2024-05-29 15:25:05.120 pydevd_resolver.py[189] _get_py_dictionary -> Find Control Timeout(10s): {ControlType: DataGridControl} +2024-05-29 15:25:15.708 pydevd_resolver.py[189] _get_py_dictionary -> Find Control Timeout(10s): {ControlType: DataGridControl} +2024-05-29 15:25:26.312 pydevd_resolver.py[189] _get_py_dictionary -> Find Control Timeout(10s): {ControlType: DataGridControl} +2024-05-29 15:25:36.881 pydevd_resolver.py[189] _get_py_dictionary -> Find Control Timeout(10s): {ControlType: DataGridControl} +2024-05-29 15:25:47.480 pydevd_resolver.py[189] _get_py_dictionary -> 2024-05-29 17:20:34.260 pydevd_resolver.py[189] _get_py_dictionary -> Find Control Timeout(10s): {ClassName: 'TMyListView', ControlType: DataGridControl} +2024-05-29 17:20:44.778 pydevd_resolver.py[189] _get_py_dictionary -> Find Control Timeout(10s): {ClassName: 'TMyListView', ControlType: DataGridControl} +2024-05-29 17:20:55.294 pydevd_resolver.py[189] _get_py_dictionary -> 2024-05-29 17:22:53.176 pydevd_resolver.py[189] _get_py_dictionary -> 2024-05-29 17:23:27.293 pydevd_resolver.py[189] _get_py_dictionary -> Find Control Timeout(10s): {ControlType: DataGridControl} +2024-05-29 17:23:37.679 pydevd_resolver.py[189] _get_py_dictionary -> 2024-05-29 17:24:09.109 pydevd_resolver.py[189] _get_py_dictionary -> 2025-01-21 13:49:35.431 1.py[354] click_create_table -> 2025-01-22 11:04:23.034 aacecontrol.py[493] is_finished -> Find Control Timeout(10s): {ClassName: 'TMyListView', ControlType: ListControl} +2025-01-22 11:04:37.901 pydevd_resolver.py[189] _get_py_dictionary -> \ No newline at end of file diff --git a/Scripts/Data/1.txt b/Scripts/Data/1.txt new file mode 100644 index 0000000..eeda195 --- /dev/null +++ b/Scripts/Data/1.txt @@ -0,0 +1,121 @@ + .ANL + 230818E.run + : 2023/8/18 + : 2024/4/11 + + +----------------------------------------------------------------------------------------- +1. δֵ, ͨ: 1 + +Pk# Type Cl. CLP Group Digit Conc mAU Start Pos R A Weight Dilution +----------------------------------------------------------------------------------------- + + 0 B 0 1 0 8414 0.0000 0.00 807 813 0 0 1.000 1.000 + 1 P & 0 0 0 25031 0.0000 362.23 840 899 0 0 1.000 1.000 + 2 D A 0 0 0 25282 0.0000 367.70 960 1017 0 0 1.000 1.000 + 3 N A 0 0 0 8531 0.0000 2.55 1080 1157 0 0 1.000 1.000 + 4 C A 0 0 0 11168 2.0000 60.03 1200 1258 0 0 1.000 1.000 + 5 C A 0 0 0 14476 4.0000 132.14 1320 1380 0 0 1.000 1.000 + 6 C A 0 0 0 18484 6.0000 219.51 1440 1496 0 0 1.000 1.000 + 7 C A 0 0 0 21860 8.0000 293.10 1560 1612 0 0 1.000 1.000 + 8 C A 0 0 0 25795 10.0000 378.88 1680 1739 0 0 1.000 1.000 + 9 N A 0 0 0 8553 0.6484 3.03 1800 1877 0 0 1.000 1.000 + 10 S A 0 0 0 14226 3.7452 126.69 1920 1970 0 0 1.000 1.000 + 11 S A 0 0 0 11593 2.3079 69.30 2040 2086 0 0 1.000 1.000 + 12 S A 0 0 0 12282 2.6840 84.32 2160 2212 0 0 1.000 1.000 + 13 S A 0 0 0 8448 0.5911 0.74 2280 2357 0 0 1.000 1.000 + 14 S A 0 0 0 21703 7.8267 289.68 2400 2451 0 0 1.000 1.000 + 15 S C 0 0 0 27638 11.0665 419.06 2520 2564 0 0 1.000 1.000 + 16 S A 0 0 0 11761 2.3996 72.96 2640 2695 0 0 1.000 1.000 + 17 S A 0 0 0 12285 2.6856 84.38 2760 2818 0 0 1.000 1.000 + 18 S A 0 0 0 8496 0.6173 1.79 2880 2921 0 0 1.000 1.000 + 19 S A 0 0 0 8466 0.6009 1.13 3000 3081 0 0 1.000 1.000 + 20 S A 0 0 0 16361 4.9106 173.23 3120 3172 0 0 1.000 1.000 + 21 S A 0 0 0 8570 0.6577 3.40 3240 3281 0 0 1.000 1.000 + 22 S A 0 0 0 8690 0.7232 6.02 3360 3413 0 0 1.000 1.000 + 23 S A 0 0 0 8584 0.6653 3.71 3480 3523 0 0 1.000 1.000 + 24 S A 0 0 0 35741 15.4898 595.69 3600 3653 0 0 1.000 1.000 + 25 S A 0 0 0 41497 18.6319 721.16 3720 3772 0 0 1.000 1.000 + 26 S A 0 0 0 23084 8.5806 319.79 3840 3894 0 0 1.000 1.000 + 27 S A 0 0 0 20095 6.9490 254.63 3960 4015 0 0 1.000 1.000 + 28 S A 0 0 0 23096 8.5871 320.05 4080 4138 0 0 1.000 1.000 + 29 S A 0 0 0 23188 8.6374 322.05 4200 4257 0 0 1.000 1.000 + 30 S A 0 0 0 9208 1.0059 17.31 4320 4396 0 0 1.000 1.000 + 31 S A 0 0 0 20005 6.8998 252.67 4440 4495 0 0 1.000 1.000 + 32 S A 0 0 0 25446 9.8700 371.27 4560 4614 0 0 1.000 1.000 + 33 S A 0 0 0 16559 5.0187 177.55 4680 4737 0 0 1.000 1.000 + 34 S A 0 0 0 13113 3.1376 102.43 4800 4865 0 0 1.000 1.000 + 35 S A 0 0 0 60146 28.8121 1127.69 4920 4977 0 0 1.000 1.000 + 36 S O 0 0 0 91039 45.6760 1801.11 5040 5093 0 0 1.000 1.000 + 37 S A 0 0 0 9374 1.0966 20.93 5160 5236 0 0 1.000 1.000 + 38 S A 0 0 0 20797 7.3322 269.93 5280 5331 0 0 1.000 1.000 + 39 S A 0 0 0 8810 0.7887 8.63 5400 5477 0 0 1.000 1.000 + 40 S A 0 0 0 8622 0.6861 4.53 5520 5597 0 0 1.000 1.000 + 41 S A 0 0 0 8663 0.7084 5.43 5640 5681 0 0 1.000 1.000 + 42 S A 0 0 0 8687 0.7215 5.95 5760 5805 0 0 1.000 1.000 + 43 S A 0 0 0 20987 7.4359 274.07 5880 5929 0 0 1.000 1.000 + 44 S A 0 0 0 9483 1.1561 23.30 6000 6048 0 0 1.000 1.000 + 45 S A 0 0 0 27405 10.9394 413.98 6120 6170 0 0 1.000 1.000 + 46 S A 0 0 0 8848 0.8094 9.46 6240 6317 0 0 1.000 1.000 + 47 B A 0 0 0 8541 0.6418 0.00 6480 6536 0 0 1.000 1.000 + 48 D A 0 0 0 26215 10.2898 385.27 6600 6652 0 0 1.000 1.000 + 49 B 0 1 0 8728 0.0000 0.00 6993 6999 0 0 1.000 1.000 + + +----------------------------------------------------------------------------------------- +2. ֵ, ͨ: 1 + +Pk# Type Cl. CLP Group Digit Conc mAU Start Pos R A Weight Dilution +----------------------------------------------------------------------------------------- + + 0 B 0 1 0 8414 0.5666 0.00 807 813 0 0 1.000 1.000 + 1 P & 0 0 0 25029 9.7020 362.18 840 899 0 0 1.000 1.000 + 2 D A 0 0 0 25277 9.8384 367.59 960 1017 0 0 1.000 1.000 + 3 N A 0 0 0 8523 0.6265 2.38 1080 1157 0 0 1.000 1.000 + 4 C A 0 0 0 11153 2.0726 59.71 1200 1258 0 0 1.000 1.000 + 5 C A 0 0 0 14445 3.8826 131.47 1320 1380 0 0 1.000 1.000 + 6 C A 0 0 0 18430 6.0737 218.33 1440 1496 0 0 1.000 1.000 + 7 C A 0 0 0 21778 7.9145 291.32 1560 1612 0 0 1.000 1.000 + 8 C A 0 0 0 25674 10.0566 376.24 1680 1739 0 0 1.000 1.000 + 9 N A 0 0 0 8528 0.6293 2.49 1800 1877 0 0 1.000 1.000 + 10 S A 0 0 0 14156 3.7237 125.17 1920 1970 0 0 1.000 1.000 + 11 S A 0 0 0 11538 2.2843 68.10 2040 2086 0 0 1.000 1.000 + 12 S A 0 0 0 12214 2.6559 82.83 2160 2212 0 0 1.000 1.000 + 13 S A 0 0 0 8414 0.5666 0.00 2280 2357 0 0 1.000 1.000 + 14 S A 0 0 0 21516 7.7704 285.61 2400 2451 0 0 1.000 1.000 + 15 S C 0 0 0 27363 10.9853 413.06 2520 2564 0 0 1.000 1.000 + 16 S A 0 0 0 11675 2.3596 71.09 2640 2695 0 0 1.000 1.000 + 17 S A 0 0 0 12186 2.6405 82.22 2760 2818 0 0 1.000 1.000 + 18 S A 0 0 0 8448 0.5853 0.74 2880 2921 0 0 1.000 1.000 + 19 S A 0 0 0 8416 0.5677 0.04 3000 3081 0 0 1.000 1.000 + 20 S A 0 0 0 16175 4.8338 169.18 3120 3172 0 0 1.000 1.000 + 21 S A 0 0 0 8513 0.6210 2.16 3240 3281 0 0 1.000 1.000 + 22 S A 0 0 0 8628 0.6843 4.66 3360 3413 0 0 1.000 1.000 + 23 S A 0 0 0 8522 0.6260 2.35 3480 3523 0 0 1.000 1.000 + 24 S A 0 0 0 35112 15.2459 581.98 3600 3653 0 0 1.000 1.000 + 25 S A 0 0 0 40716 18.3271 704.14 3720 3772 0 0 1.000 1.000 + 26 S A 0 0 0 22686 8.4137 311.11 3840 3894 0 0 1.000 1.000 + 27 S A 0 0 0 19751 6.8000 247.13 3960 4015 0 0 1.000 1.000 + 28 S A 0 0 0 22664 8.4016 310.63 4080 4138 0 0 1.000 1.000 + 29 S A 0 0 0 22739 8.4429 312.26 4200 4257 0 0 1.000 1.000 + 30 S A 0 0 0 9109 0.9487 15.15 4320 4396 0 0 1.000 1.000 + 31 S A 0 0 0 19610 6.7225 244.06 4440 4495 0 0 1.000 1.000 + 32 S A 0 0 0 24886 9.6234 359.07 4560 4614 0 0 1.000 1.000 + 33 S A 0 0 0 16238 4.8685 170.55 4680 4737 0 0 1.000 1.000 + 34 S A 0 0 0 12885 3.0249 97.46 4800 4865 0 0 1.000 1.000 + 35 S A 0 0 0 58461 28.0838 1090.95 4920 4977 0 0 1.000 1.000 + 36 S O 0 0 0 88325 44.5039 1741.95 5040 5093 0 0 1.000 1.000 + 37 S A 0 0 0 9248 1.0252 18.18 5160 5236 0 0 1.000 1.000 + 38 S A 0 0 0 20285 7.0936 258.77 5280 5331 0 0 1.000 1.000 + 39 S A 0 0 0 8697 0.7222 6.17 5400 5477 0 0 1.000 1.000 + 40 S A 0 0 0 8512 0.6205 2.14 5520 5597 0 0 1.000 1.000 + 41 S A 0 0 0 8550 0.6414 2.96 5640 5681 0 0 1.000 1.000 + 42 S A 0 0 0 8570 0.6524 3.40 5760 5805 0 0 1.000 1.000 + 43 S A 0 0 0 20400 7.1568 261.28 5880 5929 0 0 1.000 1.000 + 44 S A 0 0 0 9330 1.0702 19.97 6000 6048 0 0 1.000 1.000 + 45 S A 0 0 0 26535 10.5300 395.01 6120 6170 0 0 1.000 1.000 + 46 S A 0 0 0 8713 0.7310 6.52 6240 6317 0 0 1.000 1.000 + 47 B A 0 0 0 8414 0.5666 0.00 6480 6536 0 0 1.000 1.000 + 48 D A 0 0 0 25277 9.8384 367.59 6600 6652 0 0 1.000 1.000 + 49 B 0 1 0 8414 0.5666 0.00 6993 6999 0 0 1.000 1.000 + diff --git a/Scripts/WinUIBase.py b/Scripts/WinUIBase.py new file mode 100644 index 0000000..aef1114 --- /dev/null +++ b/Scripts/WinUIBase.py @@ -0,0 +1,209 @@ +# -*- coding: utf-8 -*- +# @Author: Luxuan +# @Date: 2024-05-23 21:50:44 +# @Last Modified by: Luxuan +# @Last Modified time: 2024-05-25 11:07:03 + + +import pyautogui as pag +import pywinauto +import win32gui +import win32con +import uiautomation as uiauto +import psutil +from PIL import ImageGrab,ImageSequence + +class WinUIBase(object): + def __init__(self): + self.app = None + pass + + def launcher(self, app_name, backend='win32',timeout=2): + """ + :param app_name: app进程名称或者app路径 + :return: + """ + pid_list = self._check_processes(app_name) + if len(pid_list) == 0: + self.app = pywinauto.application.Application(backend=backend).start(app_name, timeout=timeout, retry_interval=2) + else: + pid = pid_list[0] + self.app = pywinauto.application.Application(backend=backend).connect(process=pid, timeout=timeout, retry_interval=2) + pass + + def find_window(self, win_title): + win = None + try: + win = self.app.window(title_re=win_title) + # self.main_win.maximize() + win.wait(wait_for='visible', timeout=3, retry_interval=2) + # time.sleep(0.2) + return win + except Exception as e: + print(e) + return win + pass + + def show_mode(self,win,mode): + if mode=="max": + win.maximize() + elif mode=="min": + pass + elif mode=="focus": + pass + elif mode=="top": + pass + pass + + def get_window(self,name): + wins = self.app.windows() + win_items = [x for x in wins if x.element_info.name==name] + if len(win_items)>0: + return win_items[0] + return None + + def get_childers(self,control,auto_id = None, class_name = None, name= None): + childers = control.descendants() + if auto_id: + childers = [x for x in childers if x.handle==auto_id] + elif class_name: + childers = [x for x in childers if x.element_info.class_name==class_name] + elif name: + childers = [x for x in childers if x.element_info.name==name] + + if len(childers)==1: + return childers[0] + return childers + pass + + def close_popups(self,win,set_show=False): + try: + popup_hwnd = win.popup_window() + if not popup_hwnd or not set_show: + return + popup_window = self.app.window(handle=popup_hwnd) + popup_window.wait(wait_for='visible', timeout=1) + popup_window.set_focus() + # popup_window.close() + popup_window.type_keys("{ENTER}") + except Exception as e: + print(e) + pass + + def _check_processes(self, app_name): + pid_list = [] + processes = psutil.process_iter() + for process in processes: + try: + name = process.name() + # conns = process.connections() + exe = process.exe() + if app_name in name or app_name == exe: + pid_list.append(process.pid) + except Exception as e: + print(e) + return pid_list + pass + + +if __name__ == "__main__": + pass + + +""" +pywinauto +What is pywinauto — pywinauto 0.6.8 documentation +https://pywinauto.readthedocs.io/en/latest/ +GitHub - 2gis/Winium.Desktop: Winium.Desktop is Selenium Remote WebDriver implementation for automated testing of Windows application based on WinFroms and WPF platforms. +https://github.com/2gis/Winium.Desktop + +app2.window(title_re ='Form',class_name_re="WindowsForms10").wait('ready', timeout=10) +打印所有子控件 +print_control_identifiers() + +win.type_keys('{F5}') +app = Application(backend='win32').start('notepad.exe') +mainwin = app['无标题 - 记事本'] +mainwin.Edit.type_keys("自动化输入第一行", with_spaces = True) +mainwin.child_window(class_name="Edit").type_keys("{ENTER} 自动化输入第二行", with_spaces = True) +mainwin.menu_select('文件 -> 保存') +app['另存为']['文件名 Edit'].set_text(r'D:\temp\test_pywa\pywa.txt') +app['另存为']['保存 Button'].click() +app['pywa.txt - 记事本'].type_keys('%FX') + +send_keys('^a^c') # select all (Ctrl+A) and copy to clipboard (Ctrl+C) +send_keys('+{INS}') # insert from clipboard (Shift+Ins) +send_keys('%{F4}') # close an active window with Alt+F4 +截图 +bmp = win.capture_as_image() +pywinauto客户端自动化---窗口进行截图 - 测试-安静 - 博客园 +https://www.cnblogs.com/qican/p/13262198.html + +Python图像库PIL的类Image及其方法介绍_python pil image-CSDN博客 +https://blog.csdn.net/leemboy/article/details/83792729 + +im.getpixel((0,0)) +Python 查找句柄与控件信息(pywinauto库)_pywinauto edit-CSDN博客 +https://blog.csdn.net/lylelo/article/details/120214006 +app[window_title].menu_select("File->open") + +使用pywinauto,如何获取静态文本对象的文本,鉴于父对话框的手柄 - VoidCC +http://cn.voidcc.com/question/p-obaazoml-x.html +indow_handle = pywinauto.findwindows.find_windows(title = u'My Dialog Name') +# 返回应用程序当前顶部窗口,是WindowSpecification对象,可以继续使用对象的方法往下继续查找控件 +app.top_window() +dlg.close() # 关闭界面 +dlg.minimize() # 最小化界面 +dlg.maximize() # 最大化界面 +dlg.restore() # 将窗口恢复为正常大小,比如最小化的让他正常显示在桌面 +dlg.get_show_state() # 正常0,最大化1,最小化2 + +# 移动鼠标 +mouse.move(coords=(x, y)) + +# 指定位置,鼠标左击 +mouse.click(button='left', coords=(40, 40)) + +# 鼠标双击 +mouse.double_click(button='left', coords=(140, 40)) + +# 将属性移动到(140,40)坐标处按下 +mouse.press(button='left', coords=(140, 40)) + +# 将鼠标移动到(300,40)坐标处释放, +mouse.release(button='left', coords=(300, 40)) + +# 右键单击指定坐标 +mouse.right_click(coords=(400, 400)) + +keyboard.send('enter') +keyboard.send('ctrl+v') +handle = window.handle + + +【python句柄获取】——简单明了的获取窗口句柄,并使用句柄操作获取相应内容(全网最详细)_python获取窗口句柄-CSDN博客 +https://blog.csdn.net/weixin_46625757/article/details/122498299 +# 通过句柄窗口置顶 +win32gui.SetWindowPos('句柄值', win32con.HWND_TOPMOST, 0, 0, 0, 0,win32con.SWP_NOMOVE | win32con.SWP_NOACTIVATE | win32con.SWP_NOOWNERZORDER | win32con.SWP_SHOWWINDOW | win32con.SWP_NOSIZE) +# 通过句柄取消窗口置顶 +def set_down(hwnd): + win32gui.SetWindowPos(hwnd, win32con.HWND_NOTOPMOST, 0, 0, 0, 0, + win32con.SWP_SHOWWINDOW | win32con.SWP_NOSIZE | win32con.SWP_NOMOVE) +set_down("句柄值") +# 通过句柄将窗口放到最前 +win32gui.SetForegroundWindow("句柄值") + +# 通过窗口句柄【最大化窗口】 +win32gui.ShowWindow('句柄值', win32con.SW_MAXIMIZE) + +# 通过窗口句柄【最小化窗口】 +win32gui.ShowWindow('句柄值', win32con.SW_MINIMIZE) +# 通过窗口句柄【关闭当前句柄控件】 +# 是关闭单个句柄控件,不是关闭整个程序,只能关闭输入的句柄值 +win32gui.SendMessage('句柄值', win32con.WM_CLOSE) +# 在打开此文件所在文件夹并【定位到此文件】 +FILE = 'C:/Windows/System32/notepad.exe' +subprocess.Popen(f'explorer.exe /select,{FILE}', shell=False) +#通过窗口标题获取句柄 +hld = win32gui.FindWindow(None,u"此电脑") +""" \ No newline at end of file diff --git a/Scripts/__pycache__/WinUIBase.cpython-310.pyc b/Scripts/__pycache__/WinUIBase.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6267e51950c43d9c5c4834ed965dc972c3443427 GIT binary patch literal 3544 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 BL%{$5 literal 0 HcmV?d00001 diff --git a/Scripts/__pycache__/file_script.cpython-310.pyc b/Scripts/__pycache__/file_script.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6dd36828aa7c4f11be3a501506085f0bc20ec477 GIT binary patch literal 2909 zcmZV=?~fZtb!UIr>-CRwF3BZ1LOG?S!XNC*T_H^`ghsT5BE+@gPCB|eX|?B>^X+B5 z>&%Sfcx6`ySBVG|no7_wQB)fhRRx3!LeSERuke9Sd>lT4FU`MD6vBIJ`*Lk<&6_uG z-kUe?&HJ%&vFK><`|H1MHU3u8w14B`=+A`36&NA`Ks8E2%^lCgC9u{*y=k}xL7EYo zP0O`XoP-%SOHJ3NmYbs)*ZH0ve&M&b%E$kDw z#7cvip#~?BwRBX9_d&n5S|Q4QX-hDEopHeDz7>RQtt%vJzHpsI@&D5>6zu) z(uIq)3$>-C;P#g^EvYSb{Aj1`S5Y{qvqg5T9kiMtw8(Bq#v?ymtnaY;)$cRW4rLwH z9sTLBxB^2w0f1>}ysJ|}_184lpawNzHmOB3Fk3Xcrd4c}-S8!x$?GUQ{UMIyIT&IV zfYkQ2p5~Dr0jN`LO?#KDRt%0z%8n=2s#zLvR+lmFdNTGpcydKoreNVV&jRba8qdM> z$vL{R`90R~*WzutxmM>vONz~H@RKLfMXl9Uw&w*=AU$seBm};(O&pSxC-<#Qx9bG9 zra!!o4I{nytAI#&nx3{x?r3-QeL^&;?`wUe7`rAKvkTs##w`dAqzx>5(B!cso6}@w z0KqW?nQLD(HEDOx6WE*Z<&f_cEg~IlV=U<)1s#)~ldd{i#aeBjgjPB!#IyG-b7t!PtoWCi6VycwRF`rvP5?ylZVg9PjWv z$nrS^sOg9bj6ja|attcGr9j`<5MQ=gD5liUrIrC4SCI8IfN5$mW1L)24NPi4I++}U z^;0e>00EVy5&1uG5V}PC7a$oxZVrh!Il=WKxG^OBfrO03y*nDU?iy+InghsQjLGDm z$**a)PpD0Ey)?Q5($_I&QDR6o^}f+J8(QD$Sp%CoV;+=D*ZIl0g}b0>LM!$R%#y=( z2{D;NPC7$Nv`mlD*<04@GyM#n(aQ`V%8_RS;@*V+K4ej3FKI$_fQtWDU_8=Kog>=P z)9LX+zGn@|pg>OyNk1!#yHHeRSsokeeYTQFzSGO?o}{OtG=BgdJCpj!=sAPAp@w*L0;uy7DsUcRr#{QMp+#pP(@%Hr5v`vG z9~VLL3%&fbc5Hw>6n0+CM}_g+8Rx$}I5Q1#s0K$?Q@oQ_2CNR1v#W_&Yte0hb#Xnh zYBxf0qm5Al<>BCG?~HD~SFKjt7)LOV{``lJfBBoy%{!wH|H6wvOOAgtZb#JT-Rk+J z<)^;-wF^&Qd?qP87em%Zvbx@FvE;EPG>4!CC1P8Zr? zfoR1dkU<=+EF59SEV_ISYx22E3pkAlpOAA&X)24_Ru+_|2v?cL*78$J%PJEzqL{Oa zsZ2;rrm_+1gh9lV&7yitgQ%f0P@iHh620goR$FdYFS_Q-FRiU7k3UNp_B|+Nmt`Qi zkGFcV&#{In?9^AY= z`pH|LBahzx{l|a&RU4BY`0oAut~w>(Plz;xKJ6t)dCS^#xN<9!!^?q1a_kbm@;>yY^h8=4B*M! z(u?csFM~%TXq;fK%8b7pRDL{rtr$vumcyq26H+-7YMX~{zQH7C@O+T~tTc`|W zsgexn6>wbcg&TF&N>8@xVGIr|C@bv(%ASS<$L|FS!XuD&2TZ{)!w}f6Y)uFCX?e%))AWPL z^OF4YE1M7}n_=7#l`{Vd9) 0: + alarm_info = alram_infos[0] + elif alram_infos is not None: + alarm_info = alram_infos + if alarm_info is None: + result = 0 + else: + #win_main.get_properties() + if win_main.is_visible(): + result = 1 + return result + + def createThenStart(self,args): + if self.start(args) != 1: + return 0 + return self.run() + + def Convert(self,number): + if number % 2 == 0: + number = number - 1 + col = number % 6 // 2 + row = number // 6 + return 46 + 15 * col + row * 2 + +def Convert(number): + if number % 2 == 0: + number = number - 1 + col = number % 6 // 2 + row = number // 6 + return 46 + 15 * col + row * 2 + +if __name__ == "__main__": + # # taskType 为: 氨氮、氨氮&总磷、总磷 3,5,4 + #json_data = {"taskType":"氨氮","sampleList":[{"sampleCode":"11","position":"1"},{"sampleCode":"12","position":"3"}]} + #appService.click_create_table("氨氮") + #appService.start(paras) + #appService.run("氨氮") + # print(appService.is_finished()) + #pass + appService = AppService() + json_data = {"sampleList":[{"sampleCode":"111","position":"1"},{"sampleCode":"112","position":"2"},{"sampleCode":"113","position":"7"},{"sampleCode":"114","position":"20"}]} + paras = json.dumps(json_data) + appService.createThenStart(paras) + \ No newline at end of file diff --git a/Scripts/file_script.py b/Scripts/file_script.py new file mode 100644 index 0000000..66f2a1a --- /dev/null +++ b/Scripts/file_script.py @@ -0,0 +1,98 @@ +import mimetypes +import time +from watchdog.observers import Observer +from watchdog.events import FileSystemEventHandler +import http.client + +# 服务器的 IP 地址和端口号 +server = "192.168.6.11" +server_port = 8080 +# 接口路径 +# server_url = "/Interface/Result/Create" +server_url = "/wanhua-service/equipment/external/checkResult" + +class Watcher: + def __init__(self, directory_to_watch): + self.observer = Observer() + self.directory_to_watch = directory_to_watch + + def run(self): + print(f'开始监听文件夹{self.directory_to_watch}') + event_handler = Handler() + self.observer.schedule(event_handler, self.directory_to_watch, recursive=True) + self.observer.start() + try: + while True: + time.sleep(1) + except KeyboardInterrupt: + self.observer.stop() + finally: + self.observer.join() + + def join(self): + self.observer.join() + + + +class Handler(FileSystemEventHandler): + @staticmethod + def on_created(event): + if not event.is_directory: + if event.src_path.endswith('.pdf') or event.src_path.endswith('.csv') or event.src_path.endswith('.xlsx'): + print(f"监控到---{event.src_path}---已被创建") + time.sleep(1) + try: + # 构建multipart/form-data请求体 + boundary = 'Boundary-0123456789' + headers = { + 'Content-Type': f'multipart/form-data; boundary={boundary}' + } + # 确定文件的MIME类型 + mime_type, _ = mimetypes.guess_type(event.src_path) + + # 构建请求体 + body = [] + body.append(f'--{boundary}') + body.append( + f'Content-Disposition: form-data; name="file"; filename="{event.src_path}"') + body.append(f'Content-Type: {mime_type}') + body.append('') + with open(event.src_path, mode='r', newline='', encoding='gb2312', errors='ignore') as file: + body.append(file.read()) + body.append(f'--{boundary}--') + body.append('') + # 将请求体转换为字节串 + body_bytes = '\r\n'.join(body).encode('utf-8') + + # 创建 HTTP 连接对象 + conn = http.client.HTTPConnection(server, server_port) + # 发送POST请求 + conn.request("POST", f"{server_url}?deviceKey=titration&passback=false", body=body_bytes, headers=headers) + + # 获取响应 + response = conn.getresponse() + + # 读取响应内容 + response_data = response.read() + + # 检查响应状态码 + if response.status == 200: + print('数据发送成功') + print(response_data.decode()) # 打印服务器的响应内容 + else: + print('数据发送失败') + print(response.status) # 打印错误状态码 + print(response.reason) # 打印错误状态码 + print(response_data.decode()) # 打印错误状态码 + # break # 找到第一个非空行后终止遍历 + except Exception as e: + print(f"发生异常: {e}") + finally: + # 关闭连接 + conn.close() + + +if __name__ == '__main__': + # logger.info(f"当前用户名: {getuser()}") + w = Watcher(r"D:\src\logs") + w.run() diff --git a/Scripts/service.py b/Scripts/service.py new file mode 100644 index 0000000..e454a7d --- /dev/null +++ b/Scripts/service.py @@ -0,0 +1,236 @@ +# import socket +# import threading +# import aacecontrol +# import ctypes,win32con,win32gui,sys,json +# import logging +# # import file_script + + +# IpAddress = '127.0.0.1' +# FilePath = 'D:\\MegaSoft\\Scripts' +# Port = 2016 +# # device = md.MultiWinDevice("multiWin") +# device = aacecontrol.AppService() +# # 定义互斥量名称 +# mutex_name = "aaca_mutex" + + +# def handle_client(client_socket,addr): +# device.loginformation(f'监听{addr}的数据') +# while True: +# try: +# # 接收客户端发送的数据 +# data = client_socket.recv(2048) +# if not data: +# device.loginformation(f'{addr}-接收到空数据') +# break +# # # 处理接收到的数据 +# # device.loginformation(f"Received from {client_socket.getpeername()}: {data.decode('utf-8')}") +# datadecode = data.decode('utf-8') +# command = datadecode.partition(':')[0] # 只分割一次 +# paras = datadecode.partition(':')[2] +# result = -1 + +# if 'makeGraph' in command: +# command = 'makeGraph' +# device.loginformation(f'---收到制图指令 {datadecode}---') +# result = device.click_create_table(paras) +# elif 'operate' in command: +# command = 'operate' +# device.loginformation(f'---收到创建任务指令 {datadecode}---') +# result = device.start(paras) +# elif 'createTask' in command: +# command = 'createTask' +# device.loginformation(f'---收到制图创建任务命令 {datadecode}---') +# result = device.create(paras) +# elif 'start' in command: +# command = 'start' +# device.loginformation(f'---收到启动命令 {datadecode}---') +# result = device.run(paras) +# elif 'status' in command: +# device.loginformation(f'---收到查询状态命令 {datadecode}---') +# result = 2 +# if device.is_finished(): +# result = 1 +# else: +# command = '未知命令' +# device.loginformation('---未知命令---') + +# reponse_txt = command + ':' + str(result) + '\n' +# client_socket.send(reponse_txt.encode('utf-8')) +# device.loginformation(f'---返回-{reponse_txt}---') +# except: +# device.loginformation(f'{addr}-接收数据异常') +# client_socket.close() +# return +# # 关闭连接 +# device.loginformation(f'{addr}-连接断开') +# client_socket.close() + +# def start_server(): +# server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) +# server.bind((IpAddress, Port)) +# server.listen(20) +# device.loginformation(f"Server listening on port {IpAddress}:{Port}...") +# try: +# while True: +# client_socket, addr = server.accept() +# device.loginformation(f"Accepted connection from {addr}") +# # 启动一个新线程来处理客户端请求 +# client_handler = threading.Thread(target=handle_client, args=(client_socket,addr)) +# client_handler.start() +# except: +# print('服务结束了。。。') +# finally: +# ctypes.windll.kernel32.CloseHandle(mutex) + +# def message_box(title, message, type=win32con.MB_OK): +# """ +# 弹出一个消息框 +# :param title: 消息框的标题 +# :param message: 消息框显示的消息 +# :param type: 消息框的类型,例如MB_OK, MB_ICONERROR等 +# :return: 用户点击的消息框按钮的标识符 +# """ +# return win32gui.MessageBox(None, message, title, type) + +# if __name__ == "__main__": +# # 定义互斥锁名称,可以是任意字符串 +# mutex = ctypes.windll.kernel32.CreateMutexW(None, False, mutex_name) +# # 检查互斥量是否已经存在 +# if ctypes.windll.kernel32.GetLastError() == 183: # ERROR_ALREADY_EXISTS +# message_box("提醒", "脚本正在运行中,请点击确定关闭。", win32con.MB_ICONWARNING) +# sys.exit(0) + +# ctypes.windll.kernel32.SetThreadExecutionState(0x80000002) # 确保桌面不息屏 + +# server_thread = threading.Thread(target=start_server) +# server_thread.start() + +# # w = file_script.Watcher(FilePath) +# # file_thread = threading.Thread(target=w.run) +# # file_thread.start() + + +import ctypes +import socket +import sys +import threading +import win32con +import win32gui +from file_script import Watcher +import aacecontrol + + +IpAddress = '127.0.0.1' +FilePath = 'D:\\MegaSoft\\Scripts' +Port = 2016 +device = aacecontrol.AppService() +# 定义互斥量名称 +mutex_name = "aaca_mutex" + +def handle_client(client, addr): + while True: + try: + data = client.recv(2048) + if not data: + device.loginformation("接收数据异常") + break + datadecode = data.decode('utf-8') + device.loginformation(f"接收到---{client.getpeername()}---数据---{datadecode}") + result = -1 + command = datadecode.partition(':')[0] # 只分割一次 + paras = datadecode.partition(':')[2] # 返回包含分隔符 + + # if 'makeGraph' in command: + # command = 'makeGraph' + # device.loginformation(f'---收到制图指令 {datadecode}---') + # result = device.click_create_table(paras) + # elif 'operate' in command: + # command = 'operate' + # device.loginformation(f'---收到创建任务指令 {datadecode}---') + # result = device.start(paras) + if 'createTask' in command: + command = 'createTask' + device.loginformation(f'收到创建任务并执行命令 {datadecode}') + result = device.createThenStart(paras) + # elif 'start' in command: + # command = 'start' + # device.loginformation(f'---收到启动命令 {datadecode}---') + # result = device.run(paras) + elif 'status' in command: + device.loginformation(f'收到查询状态命令 {datadecode}') + result = 2 + if device.is_finished(): + result = 0 + else: + command = '未知命令' + device.loginformation('未知命令') + + response_txt = command + ':' + str(result) + '\n' + device.loginformation(f'返回:{command}:{str(result)}') + client.send(response_txt.encode('utf-8')) + except: + device.loginformation(f'{addr}通讯异常') + break + # 关闭连接 + device.loginformation(f'关闭{addr}连接') + client.close() + +def message_box(title, message, type=win32con.MB_OK): + """ + 弹出一个消息框 + :param title: 消息框的标题 + :param message: 消息框显示的消息 + :param type: 消息框的类型,例如MB_OK, MB_ICONERROR等 + :return: 用户点击的消息框按钮的标识符 + """ + return win32gui.MessageBox(None, message, title, type) + + +class TCPThread(threading.Thread): + def run(self): + server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + server.bind((IpAddress, Port)) + server.listen(20) + device.loginformation(f"服务端---{IpAddress}---{Port}---启动") + connected_clients = 0 + try: + while True: + client, addr = server.accept() + connected_clients = connected_clients + 1 + device.loginformation(f"客户端---{addr}---已连接,已连接客户端数量:{connected_clients}") + client_handle = threading.Thread(target=handle_client, args=(client,addr)) + client_handle.start() + except Exception as e: + device.loginformation(f"{str(e)}服务端正在关闭...") + server.close() + device.loginformation("服务端已关闭") + finally: + # 释放互斥量 + ctypes.windll.kernel32.CloseHandle(mutex) + + + +if __name__ == "__main__": + # 定义互斥锁名称,可以是任意字符串 + mutex = ctypes.windll.kernel32.CreateMutexW(None, False, mutex_name) + # 检查互斥量是否已经存在 + if ctypes.windll.kernel32.GetLastError() == 183: # ERROR_ALREADY_EXISTS + message_box("提醒", "脚本正在运行中,请点击确定关闭。", win32con.MB_ICONWARNING) + sys.exit(0) + + ctypes.windll.kernel32.SetThreadExecutionState(0x80000002) + + tcp_thread = TCPThread() + tcp_thread.start() + + # 创建线程 + watcher = Watcher(FilePath) + watcher_thread = threading.Thread(target=watcher.run) + watcher_thread.start() + + + + + diff --git a/Scripts/temp.bmp b/Scripts/temp.bmp new file mode 100644 index 0000000000000000000000000000000000000000..b2cd3de12782630ecd0010e6c0cf8b6d13de9890 GIT binary patch literal 132718 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 C>g2Nk literal 0 HcmV?d00001 diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..a0b467d --- /dev/null +++ b/readme.md @@ -0,0 +1,21 @@ +## 通讯协议TCP,控制脚本作为server端 +192.168.6.**:2016 (未插网线ip待定) + + +# 客户做之前需要点击制图-氨氮&总磷 确认制图正确 + +## 设置分析并启动(客户自己确认已制图完成): +发送:createTask:{"sampleList":[ +{"sampleCode":"111","position":"1"}, +{"sampleCode":"112","position":"2"}] +} +
返回:1成功 0失败 + +注: position给料盘实际编号就行,仪器需要的类型及位置通过脚本来自行判断,position位置为1~48,流动注射仪未开启会失败返回0 + +## 状态查询命令: +发送:status +
返回: 0:就绪 2:完成 +
注:完成之后有个弹窗,只能通过该弹窗判断是否完成任务,没有弹窗时无法区分是就绪还是运行中 + + diff --git a/readme1 (2).md b/readme1 (2).md new file mode 100644 index 0000000..1d10de3 --- /dev/null +++ b/readme1 (2).md @@ -0,0 +1,31 @@ +## python打包成exe +Pyinstaller -F service.py + +## 通讯协议TCP,控制脚本作为server端 +192.168.6.**:2016 + + +# 如果客户不手动点击制图则调用如下方法: +# 打包 + + +## 制图 +makeGraph:*** (注意: ***为:氨氮、氨氮&总磷、总磷 三个之一) +(如果客户手动点制图就无需发送): + +## 设置分析: +createTask:{"sampleList":[ +{"sampleCode":"111","position":"1"}, +{"sampleCode":"112","position":"2"}] +} + +注:position为料盘实际的编号,脚本自己转化仪器需要的位置 + +## 发送启动(确认制图没问题之后发送,如果提前确认好制图那么在设置分析之后发送): +start:*** (注意: ***为:氨氮、氨氮&总磷、总磷 三个之一)
+start +注:现在均用总磷&氨氮这一个方法 + +## 状态查询命令: +status +返回: 0:停止 1:运行 2:完成