xtn-tools-pro 1.0.1.3.2__tar.gz → 1.0.1.3.3__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.
Files changed (70) hide show
  1. {xtn-tools-pro-1.0.1.3.2/xtn_tools_pro.egg-info → xtn-tools-pro-1.0.1.3.3}/PKG-INFO +1 -1
  2. {xtn-tools-pro-1.0.1.3.2 → xtn-tools-pro-1.0.1.3.3}/setup.py +1 -1
  3. xtn-tools-pro-1.0.1.3.3/xtn_tools_pro/utils/win.py +82 -0
  4. {xtn-tools-pro-1.0.1.3.2 → xtn-tools-pro-1.0.1.3.3/xtn_tools_pro.egg-info}/PKG-INFO +1 -1
  5. {xtn-tools-pro-1.0.1.3.2 → xtn-tools-pro-1.0.1.3.3}/xtn_tools_pro.egg-info/SOURCES.txt +2 -1
  6. {xtn-tools-pro-1.0.1.3.2 → xtn-tools-pro-1.0.1.3.3}/LICENSE +0 -0
  7. {xtn-tools-pro-1.0.1.3.2 → xtn-tools-pro-1.0.1.3.3}/MANIFEST.in +0 -0
  8. {xtn-tools-pro-1.0.1.3.2 → xtn-tools-pro-1.0.1.3.3}/README.md +0 -0
  9. {xtn-tools-pro-1.0.1.3.2 → xtn-tools-pro-1.0.1.3.3}/setup.cfg +0 -0
  10. {xtn-tools-pro-1.0.1.3.2 → xtn-tools-pro-1.0.1.3.3}/xtn_tools_pro/__init__.py +0 -0
  11. {xtn-tools-pro-1.0.1.3.2 → xtn-tools-pro-1.0.1.3.3}/xtn_tools_pro/db/MongoDB.py +0 -0
  12. {xtn-tools-pro-1.0.1.3.2 → xtn-tools-pro-1.0.1.3.3}/xtn_tools_pro/db/MysqlDB.py +0 -0
  13. {xtn-tools-pro-1.0.1.3.2 → xtn-tools-pro-1.0.1.3.3}/xtn_tools_pro/db/RedisDB.py +0 -0
  14. {xtn-tools-pro-1.0.1.3.2 → xtn-tools-pro-1.0.1.3.3}/xtn_tools_pro/db/__init__.py +0 -0
  15. {xtn-tools-pro-1.0.1.3.2 → xtn-tools-pro-1.0.1.3.3}/xtn_tools_pro/flask_demo/__init__.py +0 -0
  16. {xtn-tools-pro-1.0.1.3.2 → xtn-tools-pro-1.0.1.3.3}/xtn_tools_pro/flask_demo/cli.py +0 -0
  17. {xtn-tools-pro-1.0.1.3.2 → xtn-tools-pro-1.0.1.3.3}/xtn_tools_pro/flask_demo/templates/.gitignore +0 -0
  18. {xtn-tools-pro-1.0.1.3.2 → xtn-tools-pro-1.0.1.3.3}/xtn_tools_pro/flask_demo/templates/Dockerfile +0 -0
  19. {xtn-tools-pro-1.0.1.3.2 → xtn-tools-pro-1.0.1.3.3}/xtn_tools_pro/flask_demo/templates/README.md +0 -0
  20. {xtn-tools-pro-1.0.1.3.2 → xtn-tools-pro-1.0.1.3.3}/xtn_tools_pro/flask_demo/templates/__init__.py +0 -0
  21. {xtn-tools-pro-1.0.1.3.2 → xtn-tools-pro-1.0.1.3.3}/xtn_tools_pro/flask_demo/templates/app/__init__.py +0 -0
  22. {xtn-tools-pro-1.0.1.3.2 → xtn-tools-pro-1.0.1.3.3}/xtn_tools_pro/flask_demo/templates/app/api/__init__.py +0 -0
  23. {xtn-tools-pro-1.0.1.3.2 → xtn-tools-pro-1.0.1.3.3}/xtn_tools_pro/flask_demo/templates/app/api/v1/__init__.py +0 -0
  24. {xtn-tools-pro-1.0.1.3.2 → xtn-tools-pro-1.0.1.3.3}/xtn_tools_pro/flask_demo/templates/app/api/v1/demo.py +0 -0
  25. {xtn-tools-pro-1.0.1.3.2 → xtn-tools-pro-1.0.1.3.3}/xtn_tools_pro/flask_demo/templates/app/app.py +0 -0
  26. {xtn-tools-pro-1.0.1.3.2 → xtn-tools-pro-1.0.1.3.3}/xtn_tools_pro/flask_demo/templates/app/config/__init__.py +0 -0
  27. {xtn-tools-pro-1.0.1.3.2 → xtn-tools-pro-1.0.1.3.3}/xtn_tools_pro/flask_demo/templates/app/config/secure.py +0 -0
  28. {xtn-tools-pro-1.0.1.3.2 → xtn-tools-pro-1.0.1.3.3}/xtn_tools_pro/flask_demo/templates/app/config/setting.py +0 -0
  29. {xtn-tools-pro-1.0.1.3.2 → xtn-tools-pro-1.0.1.3.3}/xtn_tools_pro/flask_demo/templates/app/libs/__init__.py +0 -0
  30. {xtn-tools-pro-1.0.1.3.2 → xtn-tools-pro-1.0.1.3.3}/xtn_tools_pro/flask_demo/templates/app/libs/base.py +0 -0
  31. {xtn-tools-pro-1.0.1.3.2 → xtn-tools-pro-1.0.1.3.3}/xtn_tools_pro/flask_demo/templates/app/libs/error.py +0 -0
  32. {xtn-tools-pro-1.0.1.3.2 → xtn-tools-pro-1.0.1.3.3}/xtn_tools_pro/flask_demo/templates/app/libs/error_code.py +0 -0
  33. {xtn-tools-pro-1.0.1.3.2 → xtn-tools-pro-1.0.1.3.3}/xtn_tools_pro/flask_demo/templates/app/libs/redprint.py +0 -0
  34. {xtn-tools-pro-1.0.1.3.2 → xtn-tools-pro-1.0.1.3.3}/xtn_tools_pro/flask_demo/templates/app/libs/token_auth.py +0 -0
  35. {xtn-tools-pro-1.0.1.3.2 → xtn-tools-pro-1.0.1.3.3}/xtn_tools_pro/flask_demo/templates/app/models/__init__.py +0 -0
  36. {xtn-tools-pro-1.0.1.3.2 → xtn-tools-pro-1.0.1.3.3}/xtn_tools_pro/flask_demo/templates/app/models/base.py +0 -0
  37. {xtn-tools-pro-1.0.1.3.2 → xtn-tools-pro-1.0.1.3.3}/xtn_tools_pro/flask_demo/templates/app/models/redis_demo.py +0 -0
  38. {xtn-tools-pro-1.0.1.3.2 → xtn-tools-pro-1.0.1.3.3}/xtn_tools_pro/flask_demo/templates/app/validators/__init__.py +0 -0
  39. {xtn-tools-pro-1.0.1.3.2 → xtn-tools-pro-1.0.1.3.3}/xtn_tools_pro/flask_demo/templates/app/validators/base.py +0 -0
  40. {xtn-tools-pro-1.0.1.3.2 → xtn-tools-pro-1.0.1.3.3}/xtn_tools_pro/flask_demo/templates/app/validators/demo.py +0 -0
  41. {xtn-tools-pro-1.0.1.3.2 → xtn-tools-pro-1.0.1.3.3}/xtn_tools_pro/flask_demo/templates/docker-compose.yml +0 -0
  42. {xtn-tools-pro-1.0.1.3.2 → xtn-tools-pro-1.0.1.3.3}/xtn_tools_pro/flask_demo/templates/logs/__init__.py +0 -0
  43. {xtn-tools-pro-1.0.1.3.2 → xtn-tools-pro-1.0.1.3.3}/xtn_tools_pro/flask_demo/templates/obj/__init__.py +0 -0
  44. {xtn-tools-pro-1.0.1.3.2 → xtn-tools-pro-1.0.1.3.3}/xtn_tools_pro/flask_demo/templates/requirements.txt +0 -0
  45. {xtn-tools-pro-1.0.1.3.2 → xtn-tools-pro-1.0.1.3.3}/xtn_tools_pro/flask_demo/templates/server_run.py +0 -0
  46. {xtn-tools-pro-1.0.1.3.2 → xtn-tools-pro-1.0.1.3.3}/xtn_tools_pro/flask_demo/templates/test/__init__.py +0 -0
  47. {xtn-tools-pro-1.0.1.3.2 → xtn-tools-pro-1.0.1.3.3}/xtn_tools_pro/flask_demo/templates/uwsgi.ini +0 -0
  48. {xtn-tools-pro-1.0.1.3.2 → xtn-tools-pro-1.0.1.3.3}/xtn_tools_pro/proxy/XiaoXiangProxy.py +0 -0
  49. {xtn-tools-pro-1.0.1.3.2 → xtn-tools-pro-1.0.1.3.3}/xtn_tools_pro/proxy/__init__.py +0 -0
  50. {xtn-tools-pro-1.0.1.3.2 → xtn-tools-pro-1.0.1.3.3}/xtn_tools_pro/proxy/proxy.py +0 -0
  51. {xtn-tools-pro-1.0.1.3.2 → xtn-tools-pro-1.0.1.3.3}/xtn_tools_pro/task_pro/__init__.py +0 -0
  52. {xtn-tools-pro-1.0.1.3.2 → xtn-tools-pro-1.0.1.3.3}/xtn_tools_pro/task_pro/go_fun_air_v1.py +0 -0
  53. {xtn-tools-pro-1.0.1.3.2 → xtn-tools-pro-1.0.1.3.3}/xtn_tools_pro/task_pro/go_fun_v3.py +0 -0
  54. {xtn-tools-pro-1.0.1.3.2 → xtn-tools-pro-1.0.1.3.3}/xtn_tools_pro/tools.py +0 -0
  55. {xtn-tools-pro-1.0.1.3.2 → xtn-tools-pro-1.0.1.3.3}/xtn_tools_pro/utils/__init__.py +0 -0
  56. {xtn-tools-pro-1.0.1.3.2 → xtn-tools-pro-1.0.1.3.3}/xtn_tools_pro/utils/audio_video.py +0 -0
  57. {xtn-tools-pro-1.0.1.3.2 → xtn-tools-pro-1.0.1.3.3}/xtn_tools_pro/utils/crypto.py +0 -0
  58. {xtn-tools-pro-1.0.1.3.2 → xtn-tools-pro-1.0.1.3.3}/xtn_tools_pro/utils/crypto_pro.py +0 -0
  59. {xtn-tools-pro-1.0.1.3.2 → xtn-tools-pro-1.0.1.3.3}/xtn_tools_pro/utils/file_utils.py +0 -0
  60. {xtn-tools-pro-1.0.1.3.2 → xtn-tools-pro-1.0.1.3.3}/xtn_tools_pro/utils/helpers.py +0 -0
  61. {xtn-tools-pro-1.0.1.3.2 → xtn-tools-pro-1.0.1.3.3}/xtn_tools_pro/utils/log.py +0 -0
  62. {xtn-tools-pro-1.0.1.3.2 → xtn-tools-pro-1.0.1.3.3}/xtn_tools_pro/utils/retry.py +0 -0
  63. {xtn-tools-pro-1.0.1.3.2 → xtn-tools-pro-1.0.1.3.3}/xtn_tools_pro/utils/set_data.py +0 -0
  64. {xtn-tools-pro-1.0.1.3.2 → xtn-tools-pro-1.0.1.3.3}/xtn_tools_pro/utils/shell.py +0 -0
  65. {xtn-tools-pro-1.0.1.3.2 → xtn-tools-pro-1.0.1.3.3}/xtn_tools_pro/utils/sql.py +0 -0
  66. {xtn-tools-pro-1.0.1.3.2 → xtn-tools-pro-1.0.1.3.3}/xtn_tools_pro/utils/time_utils.py +0 -0
  67. {xtn-tools-pro-1.0.1.3.2 → xtn-tools-pro-1.0.1.3.3}/xtn_tools_pro.egg-info/dependency_links.txt +0 -0
  68. {xtn-tools-pro-1.0.1.3.2 → xtn-tools-pro-1.0.1.3.3}/xtn_tools_pro.egg-info/entry_points.txt +0 -0
  69. {xtn-tools-pro-1.0.1.3.2 → xtn-tools-pro-1.0.1.3.3}/xtn_tools_pro.egg-info/requires.txt +0 -0
  70. {xtn-tools-pro-1.0.1.3.2 → xtn-tools-pro-1.0.1.3.3}/xtn_tools_pro.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: xtn-tools-pro
3
- Version: 1.0.1.3.2
3
+ Version: 1.0.1.3.3
4
4
  Summary: xtn 开发工具
5
5
  Author: xtn
6
6
  Author-email: czw011122@gmail.com
@@ -15,7 +15,7 @@ with open("README.md", "r") as f:
15
15
 
16
16
  setuptools.setup(
17
17
  name="xtn-tools-pro", # 模块名称
18
- version="1.0.1.3.2", # 版本
18
+ version="1.0.1.3.3", # 版本
19
19
  author="xtn", # 作者
20
20
  author_email="czw011122@gmail.com", # 作者邮箱
21
21
  description="xtn 开发工具", # 模块简介
@@ -0,0 +1,82 @@
1
+ #!/usr/bin/env python
2
+ # -*- coding: utf-8 -*-
3
+
4
+ # 说明:
5
+ # win 操作
6
+ # History:
7
+ # Date Author Version Modification
8
+ # --------------------------------------------------------------------------------------------------
9
+ # 2025/8/11 xiatn V00.01.000 新建
10
+ # --------------------------------------------------------------------------------------------------
11
+ import ctypes
12
+ from ctypes import wintypes
13
+
14
+ user32 = ctypes.WinDLL("user32", use_last_error=True)
15
+
16
+ # 回调类型:BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam)
17
+ EnumWindowsProc = ctypes.WINFUNCTYPE(wintypes.BOOL, wintypes.HWND, wintypes.LPARAM)
18
+
19
+ # --- 明确声明所有用到的 WinAPI 的参数/返回类型 ---
20
+ user32.EnumWindows.argtypes = [EnumWindowsProc, wintypes.LPARAM]
21
+ user32.EnumWindows.restype = wintypes.BOOL
22
+
23
+ user32.GetWindowThreadProcessId.argtypes = [wintypes.HWND, ctypes.POINTER(wintypes.DWORD)]
24
+ user32.GetWindowThreadProcessId.restype = wintypes.DWORD
25
+
26
+ user32.IsWindowVisible.argtypes = [wintypes.HWND]
27
+ user32.IsWindowVisible.restype = wintypes.BOOL
28
+
29
+ user32.GetWindowTextLengthW.argtypes = [wintypes.HWND]
30
+ user32.GetWindowTextLengthW.restype = ctypes.c_int # 长度(TCHAR 数),可能为 0
31
+
32
+ user32.GetWindowTextW.argtypes = [wintypes.HWND, wintypes.LPWSTR, ctypes.c_int]
33
+ user32.GetWindowTextW.restype = ctypes.c_int # 实际拷贝的字符数
34
+
35
+
36
+ def enum_windows(only_visible=True):
37
+ """
38
+ 遍历顶层窗口,返回 [{hwnd, pid, title}, ...]
39
+ - only_visible=True 只返回可见窗口
40
+ """
41
+ results = []
42
+
43
+ @EnumWindowsProc
44
+ def callback(hwnd, lparam):
45
+ try:
46
+ # 可选过滤
47
+ if only_visible and not user32.IsWindowVisible(hwnd):
48
+ return True # 继续枚举
49
+
50
+ # 取 PID
51
+ pid = wintypes.DWORD(0)
52
+ user32.GetWindowThreadProcessId(hwnd, ctypes.byref(pid))
53
+
54
+ # 取标题
55
+ length = user32.GetWindowTextLengthW(hwnd)
56
+ title = ""
57
+ if length > 0:
58
+ buf = ctypes.create_unicode_buffer(length + 1)
59
+ copied = user32.GetWindowTextW(hwnd, buf, length + 1)
60
+ if copied > 0:
61
+ title = buf.value
62
+
63
+ # 结果里再把 HWND 规范化为无符号整数,避免负数显示
64
+ results.append({
65
+ "hwnd": ctypes.c_size_t(hwnd).value,
66
+ "pid": pid.value,
67
+ "title": title
68
+ })
69
+ except Exception:
70
+ # 回调里不要把异常抛给 WinAPI,否则会出现 “Exception ignored on calling ctypes callback function”
71
+ pass
72
+ return True # 继续
73
+
74
+ user32.EnumWindows(callback, 0)
75
+ return results
76
+
77
+
78
+ if __name__ == "__main__":
79
+ pass
80
+ # 枚举win窗口获取句柄和pid
81
+ # for win in enum_windows(only_visible=True):
82
+ # print(win)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: xtn-tools-pro
3
- Version: 1.0.1.3.2
3
+ Version: 1.0.1.3.3
4
4
  Summary: xtn 开发工具
5
5
  Author: xtn
6
6
  Author-email: czw011122@gmail.com
@@ -64,4 +64,5 @@ xtn_tools_pro/utils/retry.py
64
64
  xtn_tools_pro/utils/set_data.py
65
65
  xtn_tools_pro/utils/shell.py
66
66
  xtn_tools_pro/utils/sql.py
67
- xtn_tools_pro/utils/time_utils.py
67
+ xtn_tools_pro/utils/time_utils.py
68
+ xtn_tools_pro/utils/win.py