欢迎访问宙启技术站
智能推送

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 进程,并在新进程创建前,通过指定 dwFlagswShowWindow 来设置了新进程主窗口的显示方式为显示窗口。