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:完成