为了便于控制通过脚本运行的程序,可以使用win32process模块中的CreateProcess()函数创建一个运行相应程序的进程。其函数原型如下。
CreateProcess(appName, commandLine , processAttributes , threadAttributes , bInheritHandles , dwCreationFlags , newEnvironment , currentDirectory , startupinfo )
其参数含义如下。
appName 可执行文件名。
commandLine 命令行参数。
processAttributes 进程安全属性,如果为None则为默认的安全属性。
threadAttributes 线程安全属性,如果为None则为默认的安全属性。
bInheritHandles 继承标志。
dwCreationFlags 创建标志。
newEnvironment 创建进程的环境变量。
currentDirectory 进程的当前目录。
startupinfo 创建进程的属性。
以下代码是使用win32process.CreateProcess函数运行记事本程序。
>>> import win32process
>>> win32process.CreateProcess('c:\\windows\\notepad.exe', '', None , None , 0 ,win32process. CREATE_NO_WINDOW , None , None ,win32process.STARTUPINFO())
(<PyHANDLE:584>, <PyHANDLE:600>, 280, 3076) # 函数返回进程句柄、线程句柄、进程ID以及线程ID
有了已创建进程的句柄就可以使用win32process.TerminateProcess函数结束进程,或者使用win32event.WaitForSingleObject等待创建的线程结束。其函数原型如下。
TerminateProcess(handle, exitCode)
WaitForSingleObject(handle, milliseconds )
对于TerminateProcess,其参数含义如下。
handle 为要操作的进程句柄。
exitCode 进程退出代码。
对于WaitForSingleObject,其参数含义如下。
handle 为要操作的进程句柄。
milliseconds 等待的时间,如果为-1则一直等待。
以下代码用于创建进程,然后对创建的进程进行相应的操作。
>>> import win32process
# 打开记事本程序,获得其句柄
>>> handle = win32process.CreateProcess('c:\\windows\\notepad.exe', '', None , None , 0 ,win32process. CREATE_NO_WINDOW , None , None ,win32process.STARTUPINFO())
# 使用TerminateProcess函数终止记事本程序
>>> win32process.TerminateProcess(handle[0],0)
# 导入win32event模块
>>> import win32event
# 创建进程获得句柄
>>> handle = win32process.CreateProcess('c:\\windows\\notepad.exe', '', None , None , 0 ,win32process. CREATE_NO_WINDOW , None , None ,win32process.STARTUPINFO())
# 等待进程结束
>>> win32event.WaitForSingleObject(handle[0], -1)
0 # 进程结束的返回值