ShellExecute(hwnd, op , file , params , dir , bShow )
其参数含义如下所示。
hwnd:父窗口的句柄,如果没有父窗口,则为0。
op:要进行的操作,为“open”、“print”或者为空。
file:要运行的程序,或者打开的脚本。
params:要向程序传递的参数,如果打开的为文件,则为空。
dir:程序初始化的目录。
bShow:是否显示窗口
可以这么理解,使用ShellExecute就像在windows下的cmd中调用某个exe文件
为了便于控制通过脚本运行的程序,可以使用win32process模块中的CreateProcess()函数。其函数原型如下所示。
CreateProcess(appName, commandLine , processAttributes , threadAttributes , bInheritHandles ,dwCreationFlags , newEnvironment , currentDirectory , startupinfo )
其参数含义如下。
appName:可执行的文件名。
commandLine:命令行参数。
processAttributes:进程安全属性,如果为None,则为默认的安全属性。
threadAttributes:线程安全属性,如果为None,则为默认的安全属性。
bInheritHandles:继承标志。
dwCreationFlags:创建标志。
newEnvironment:创建进程的环境变量。
currentDirectory:进程的当前目录。
startupinfo :创建进程的属性。
CreateProcess调用exe与ShellExecute调用略有不同,主要是参数的传递不同。接下来以例子说明
编写一段简单的C++代码,并生成exe文件,代码如下
#include
#include
using namespace std;
int main(int argc, char* argv[])
{
if (argc < 2)
{
cerr << "hello nothing" << endl;
cin.get();
return -1;
}
for (int i = 1; i < argc; ++i)
{
cout << argv[i] << endl;
}
cin.get();
return 0;
}
使用ShellExecute调用
#usr/bin/env python
#-*- coding: utf-8 -*-
import win32api
import win32event
import win32process
def main():
exePath = "E:\python_wk\callExeOnWin\helloSomething.exe"
param = "hello world abc 123"
win32api.ShellExecute(0,
"open",
exePath,
param,
'',
1)
if '__main__' == __name__:
main()
可以看到参数用空格隔开即可
使用CreateProcess调用
#usr/bin/env python
#-*- coding: utf-8 -*-
import win32api
import win32event
import win32process
def main():
exePath = "E:\python_wk\callExeOnWin\helloSomething.exe"
param = "hello world abc 123"
param = exePath + " " + param
handle = win32process.CreateProcess(exePath,
param,
None,
None,
0,
win32process.CREATE_NEW_CONSOLE,
None,
None,
win32process.STARTUPINFO())
if '__main__' == __name__:
main()
因为由C++编译的exe文件的第一个参数是自己本身,也就是在C++程序中 argv[0] 的值是exe文件本身的路径,可以看到,在使用CreateProcess调用exe时,我们需要将exe路径加入到参数中,而在ShellExecute中是不需要的。