win32process模块中STARTUPINFO的用法和注意事项
发布时间:2023-12-18 14:00:49
STARTUPINFO 是 win32process模块中的一个类,它用来指定新创建的进程的主窗口的外观和行为。
STARTUPINFO 类的构造函数如下:
class STARTUPINFO:
def __init__(self):
self.cb = sizeof(self)
self.lpReserved = None
self.lpDesktop = None
self.lpTitle = None
self.dwX = 0
self.dwY = 0
self.dwXSize = 0
self.dwYSize = 0
self.dwXCountChars = 0
self.dwYCountChars = 0
self.dwFillAttribute = 0
self.dwFlags = 0
self.wShowWindow = 0
self.cbReserved2 = 0
self.lpReserved2 = None
self.hStdInput = None
self.hStdOutput = None
self.hStdError = None
可以看到,STARTUPINFO 类的成员变量非常多,下面我们对一些常用的成员变量做一些说明和使用示例。
1. cb:指定结构的大小,必须设置为 sizeof(self),即使用 win32process 模块中的 sizeof() 函数来获取结构的大小。
2. lpDesktop:指定新进程的桌面。默认为 None,表示使用当前桌面。
3. dwX, dwY:指定新进程主窗口的初始位置。默认为 0。
4. dwXSize, dwYSize:指定新进程主窗口的初始大小。默认为 0。
5. dwFlags:指定新进程主窗口的标识。常用的标识如下:
- STARTF_USESHOWWINDOW:指定 wShowWindow 成员有效。
- STARTF_USEPOSITION:指定 dwX, dwY,dwXSize, dwYSize 成员有效。
6. wShowWindow:指定新进程主窗口的显示方式。常用的取值如下:
- SW_HIDE:隐藏窗口。
- SW_MAXIMIZE:最大化窗口。
- SW_MINIMIZE:最小化窗口。
- SW_RESTORE:恢复窗口,默认值。
下面是一个使用 STARTUPINFO 的例子:
import win32process
import win32con
startupinfo = win32process.STARTUPINFO()
startupinfo.dwFlags |= win32con.STARTF_USESHOWWINDOW
startupinfo.wShowWindow = win32con.SW_SHOW
# 创建新进程
process_info = win32process.CreateProcess(
None, # 指定可执行文件的路径
"notepad.exe", # 命令行参数
None, # 进程安全描述符
None, # 线程安全描述符
False, # 指示是否继承句柄
0, # 创建标志
None, # 环境变量
None, # 工作目录
startupinfo # STARTUPINFO 对象
)
# 等待进程结束
win32process.WaitForSingleObject(process_info[0], win32process.INFINITE)
上述代码创建了一个新的 notepad.exe 进程,并在新进程创建前,通过指定 dwFlags 和 wShowWindow 来设置了新进程主窗口的显示方式为显示窗口。
