WinTools Windows工具模块
专为Windows系统设计的工具集合,提供窗口管理、文件编译、安装包制作等功能
📋 目录
✨ 功能特性
- 🪟 窗口管理: 设置窗口透明度、查找窗口句柄
- 🔧 文件编译: Python文件编译为PYD、C++编译
- 📦 安装包制作: NSIS安装包制作、自动安装脚本
- 🐍 Python管理: 自动安装Python、包管理
- 💬 消息框: 系统消息框、用户交互
- 🎨 界面美化: 任务栏透明、窗口特效
- ⚡ 系统工具: 系统信息、进程管理
🚀 快速开始
基本使用
from sindre.win_tools import tools, taskbar
# 设置窗口透明度
taskbar.set_windows_alpha(128, "Shell_TrayWnd")
# 编译Python文件
tools.py2pyd(r"C:\project\src", clear_py=False)
# 显示消息框
tools.show_message("操作完成", "任务已成功执行")
安装包制作
from sindre.win_tools import tools
# 制作NSIS安装包
tools.exe2nsis(
work_dir=r"C:\project",
files_to_compress=[
r"C:\project\app.exe",
r"C:\project\config.ini",
r"C:\project\data\"
],
exe_name="MyApp.exe"
)
🔧 核心功能
文件编译函数
def py2pyd(source_path: str, clear_py: bool = False):
"""
将目录下所有py文件编译成pyd文件
Args:
source_path: 源码目录
clear_py: 是否编译后清除py文件,注意备份
"""
def pip_install(package_name: str = "", target_dir: str = "", requirements_path: str = ""):
"""
模拟pip安装
Args:
package_name: 包名
target_dir: 安装目录,为空则自动安装到当前环境下
requirements_path: requirements.txt路径
"""
def python_installer(install_dir: str, version: str = '3.9.6'):
"""
自动安装Python
Args:
install_dir: 安装目录
version: Python版本
"""
def exe2nsis(work_dir: str, files_to_compress: list, exe_name: str,
appname: str = "AI", version: str = "1.0.0.0",
author: str = "SindreYang", license: str = "", icon_old: str = ""):
"""
制作NSIS安装包
Args:
work_dir: 工作目录
files_to_compress: 要压缩的文件列表
exe_name: 生成的exe名称
appname: 应用名称
version: 版本号
author: 作者
license: 许可证
icon_old: 图标路径
"""
窗口管理函数
def set_windows_alpha(alpha: int = 255, class_name: str = "Shell_TrayWnd"):
"""
通过查找class_name,强制用于设置任务栏透明程度
Args:
alpha: 透明度 (0--完全透明,255--完全不透明)
class_name: 窗口类名
"""
def get_windows_child(hWnd):
"""
获取窗口的所有子窗口
Args:
hWnd: 窗口句柄
Returns:
list: 子窗口句柄列表
"""
def HEXtoRGBAint(HEX: str):
"""
将HEX颜色转换为RGBA整数
Args:
HEX: 十六进制颜色字符串
Returns:
int: RGBA整数值
"""
系统工具函数
def is_service_exists(service_name: str) -> bool:
"""
检查Windows服务是否存在
Args:
service_name: 服务名称
Returns:
bool: 服务是否存在
"""
def check_port(port: int) -> bool:
"""
检查端口是否被占用
Args:
port: 端口号
Returns:
bool: 端口是否被占用
"""
def kill_process_using_port(server_port: int) -> bool:
"""
杀死占用指定端口的进程
Args:
server_port: 端口号
Returns:
bool: 是否成功杀死进程
"""
def download_url_file(url: str, package_path: str = "test.zip") -> bool:
"""
下载URL文件
Args:
url: 下载URL
package_path: 保存路径
Returns:
bool: 下载是否成功
"""
def zip_extract(zip_path: str, install_dir: str) -> bool:
"""
解压ZIP文件
Args:
zip_path: ZIP文件路径
install_dir: 解压目录
Returns:
bool: 解压是否成功
"""
📖 使用指南
1. 窗口管理
设置窗口透明度
from sindre.win_tools import taskbar
# 设置任务栏透明度
taskbar.set_windows_alpha(255, "Shell_TrayWnd") # 完全不透明
taskbar.set_windows_alpha(128, "Shell_TrayWnd") # 半透明
taskbar.set_windows_alpha(0, "Shell_TrayWnd") # 完全透明
# 设置其他窗口透明度
taskbar.set_windows_alpha(200, "Notepad") # 记事本
taskbar.set_windows_alpha(150, "Calculator") # 计算器
# 批量设置窗口透明度
windows = ["Notepad", "Calculator", "Paint"]
for window in windows:
try:
taskbar.set_windows_alpha(180, window)
print(f"设置 {window} 透明度成功")
except Exception as e:
print(f"设置 {window} 透明度失败: {e}")
查找和管理窗口
from sindre.win_tools import taskbar
import win32gui
# 查找窗口句柄
notepad_handle = win32gui.FindWindow("Notepad", None)
if notepad_handle:
print(f"记事本窗口句柄: {notepad_handle}")
# 获取子窗口
child_windows = taskbar.get_windows_child(notepad_handle)
print(f"子窗口数量: {len(child_windows)}")
else:
print("未找到记事本窗口")
# 获取所有窗口信息
def list_windows():
"""列出所有可见窗口"""
def enum_windows_callback(hwnd, windows):
if win32gui.IsWindowVisible(hwnd):
window_text = win32gui.GetWindowText(hwnd)
if window_text:
windows.append((hwnd, window_text))
return True
windows = []
win32gui.EnumWindows(enum_windows_callback, windows)
return windows
# 显示所有窗口
all_windows = list_windows()
for hwnd, title in all_windows[:10]: # 显示前10个
print(f"窗口: {title} (句柄: {hwnd})")
2. 文件编译
Python文件编译
from sindre.win_tools import tools
# 编译整个目录
tools.py2pyd(r"C:\project\src", clear_py=False)
# 编译并删除原文件
tools.py2pyd(r"C:\project\src", clear_py=True)
# 编译特定目录
tools.py2pyd(r"C:\project\src\utils", clear_py=False)
包管理
from sindre.win_tools import tools
# 安装单个包
tools.pip_install(package_name="numpy")
# 安装到指定目录
tools.pip_install(package_name="pandas", target_dir=r"C:\custom_packages")
# 从requirements文件安装
tools.pip_install(requirements_path=r"C:\project\requirements.txt")
# 安装到指定目录
tools.pip_install(requirements_path=r"C:\project\requirements.txt",
target_dir=r"C:\project\packages")
3. Python环境管理
from sindre.win_tools import tools
# 安装Python 3.9.6
tools.python_installer(r"C:\Python39", version="3.9.6")
# 安装Python 3.8.10
tools.python_installer(r"C:\Python38", version="3.8.10")
# 安装最新版本
tools.python_installer(r"C:\Python", version="3.11.0")
4. 安装包制作
from sindre.win_tools import tools
# 基本安装包制作
tools.exe2nsis(
work_dir=r"C:\project",
files_to_compress=[
r"C:\project\app.exe",
r"C:\project\config.ini",
r"C:\project\data\"
],
exe_name="MyApp.exe"
)
# 自定义安装包
tools.exe2nsis(
work_dir=r"C:\project",
files_to_compress=[
r"C:\project\app.exe",
r"C:\project\lib\",
r"C:\project\resources\"
],
exe_name="MyApp.exe",
appname="我的应用",
version="2.1.0",
author="张三",
license="MIT",
icon_old=r"C:\project\icon.ico"
)
5. 系统工具
端口管理
from sindre.win_tools import tools
# 检查端口占用
port = 8080
if tools.check_port(port):
print(f"端口 {port} 被占用")
# 杀死占用进程
if tools.kill_process_using_port(port):
print(f"成功杀死占用端口 {port} 的进程")
else:
print(f"无法杀死占用端口 {port} 的进程")
else:
print(f"端口 {port} 可用")
服务管理
from sindre.win_tools import tools
# 检查服务是否存在
service_name = "MySQL"
if tools.is_service_exists(service_name):
print(f"服务 {service_name} 存在")
else:
print(f"服务 {service_name} 不存在")
文件下载和解压
from sindre.win_tools import tools
# 下载文件
url = "https://example.com/file.zip"
if tools.download_url_file(url, "downloaded_file.zip"):
print("文件下载成功")
# 解压文件
if tools.zip_extract("downloaded_file.zip", r"C:\extracted"):
print("文件解压成功")
else:
print("文件解压失败")
else:
print("文件下载失败")
🚀 高级功能
1. 网络工具
TCP映射
from sindre.win_tools import tools
# 创建TCP映射
mapping = tools.tcp_mapping_qt(conn_receiver, conn_sender)
mapping.start()
# IP绑定
ip_binder = tools.ip_bind()
ip_binder.set_ip("192.168.1.100", "8080")
ip_binder.start()
2. 批量操作
from sindre.win_tools import tools
import os
# 批量编译多个目录
directories = [
r"C:\project\src\utils",
r"C:\project\src\models",
r"C:\project\src\controllers"
]
for directory in directories:
if os.path.exists(directory):
print(f"编译目录: {directory}")
tools.py2pyd(directory, clear_py=False)
else:
print(f"目录不存在: {directory}")
# 批量安装包
packages = ["numpy", "pandas", "matplotlib", "scikit-learn"]
for package in packages:
print(f"安装包: {package}")
tools.pip_install(package_name=package)
3. 自动化脚本
from sindre.win_tools import tools
import os
def setup_development_environment():
"""设置开发环境"""
# 1. 安装Python
python_dir = r"C:\Python39"
if not os.path.exists(python_dir):
print("安装Python...")
tools.python_installer(python_dir, version="3.9.6")
# 2. 安装依赖包
requirements_file = r"C:\project\requirements.txt"
if os.path.exists(requirements_file):
print("安装依赖包...")
tools.pip_install(requirements_path=requirements_file)
# 3. 编译源代码
src_dir = r"C:\project\src"
if os.path.exists(src_dir):
print("编译源代码...")
tools.py2pyd(src_dir, clear_py=False)
# 4. 制作安装包
print("制作安装包...")
tools.exe2nsis(
work_dir=r"C:\project",
files_to_compress=[
r"C:\project\app.exe",
r"C:\project\src\",
r"C:\project\config\"
],
exe_name="MyApp.exe"
)
print("开发环境设置完成!")
# 执行设置
setup_development_environment()
🔧 系统集成
1. 与CI/CD集成
from sindre.win_tools import tools
import os
def ci_build():
"""CI/CD构建流程"""
# 检查环境
if not os.path.exists("requirements.txt"):
print("缺少requirements.txt文件")
return False
# 安装依赖
tools.pip_install(requirements_path="requirements.txt")
# 编译代码
tools.py2pyd("src", clear_py=False)
# 制作安装包
tools.exe2nsis(
work_dir=".",
files_to_compress=["app.exe", "src/", "config/"],
exe_name="AppInstaller.exe"
)
return True
if __name__ == "__main__":
success = ci_build()
exit(0 if success else 1)
2. 与PyInstaller集成
from sindre.win_tools import tools
import subprocess
def build_with_pyinstaller():
"""使用PyInstaller构建"""
# 安装PyInstaller
tools.pip_install(package_name="pyinstaller")
# 使用PyInstaller构建
subprocess.run([
"pyinstaller",
"--onefile",
"--windowed",
"app.py"
])
# 制作安装包
tools.exe2nsis(
work_dir=".",
files_to_compress=["dist/app.exe", "config/"],
exe_name="AppSetup.exe"
)
build_with_pyinstaller()
❓ 常见问题
Q1: 编译时出现Cython错误?
A: 需要安装Cython:
tools.pip_install(package_name="cython")
Q2: 窗口透明度设置不生效?
A: 确保已安装pywin32:
tools.pip_install(package_name="pywin32")
Q3: NSIS安装包制作失败?
A: 检查以下几点: 1. 确保文件路径存在 2. 确保有足够的磁盘空间 3. 检查文件权限
Q4: 端口检查不准确?
A: 使用管理员权限运行程序,或者:
# 手动检查端口
import socket
def check_port_manual(port):
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
return s.connect_ex(('localhost', port)) == 0
Q5: Python安装失败?
A: 可能的原因: 1. 网络连接问题 2. 磁盘空间不足 3. 权限不足
Q6: 如何调试编译问题?
A: 查看编译日志:
# 编译时保留临时文件
tools.py2pyd("src", clear_py=False)
# 检查tmp目录中的编译日志
📊 性能基准
操作 | 数据大小 | 时间 | 内存使用 |
---|---|---|---|
文件编译 | 100个PY文件 | ~30s | ~50MB |
安装包制作 | 100MB文件 | ~60s | ~200MB |
Python安装 | 标准安装 | ~120s | ~500MB |
窗口透明度 | 单个窗口 | ~0.1s | ~1MB |