用python代码creatprocess函数_使用CreateProcess函数运行其他程序

为了便于控制通过脚本运行的程序,可以使用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())

(<584>, <600>, 280, 3076) # 函数返回进程句柄、线程句柄、进程ID以及线程ID600>584>

有了已创建进程的句柄就可以使用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  # 进程结束的返回值

使用CreateProcess函数使exe运行并重启,可以按照以下步骤进行: 1. 使用CreateProcess函数创建进程并运行exe文件。 2. 在exe程序中添加代码,使其在退出前重新启动自己。 以下是示例代码: ``` #include <windows.h> #include <tchar.h> int _tmain(int argc, TCHAR* argv[]) { STARTUPINFO si = { sizeof(si) }; PROCESS_INFORMATION pi; TCHAR szCmdLine[MAX_PATH] = _T("your_exe_file.exe"); while (true) { if (!CreateProcess(NULL, szCmdLine, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)) { _tprintf(_T("Failed to create process (%d)\n"), GetLastError()); return 1; } WaitForSingleObject(pi.hProcess, INFINITE); CloseHandle(pi.hProcess); CloseHandle(pi.hThread); Sleep(1000); // 等待1秒钟后重启 } return 0; } ``` 在上面的代码中,我们使用了一个while循环来不断重启exe程序。在exe程序中,可以使用类似以下的代码来实现重启: ``` #include <windows.h> #include <tchar.h> int _tmain(int argc, TCHAR* argv[]) { // your code ... _tprintf(_T("Restarting...\n")); // 关闭当前进程 HANDLE hProcess = GetCurrentProcess(); TerminateProcess(hProcess, 0); // 执行自己 STARTUPINFO si = { sizeof(si) }; PROCESS_INFORMATION pi; TCHAR szCmdLine[MAX_PATH] = _T("your_exe_file.exe"); CreateProcess(NULL, szCmdLine, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi); // your code ... return 0; } ``` 在上面的代码中,我们使用了TerminateProcess函数来关闭当前进程,然后使用CreateProcess函数来重新执行自己。注意,这里的exe文件名需要和主程序中的一致。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值