封装进程创建的原因主要是易语言自带的运行和执行命令不能启动游戏,当我们写一键启动,批量启动游戏时,便用到了进程_创建的命令。易语言里的运行(),执行()有时候并不能直接运行一些游戏,而采用进程创建才可以。如果直接使用运行,执行,需要进行以下的处理。
.版本 2
.子程序 _按钮1_被单击, , , 运行
.局部变量 路径, 文本型
' 运行 (“calc.exe”, 假, )
' 执行 (#打开文件, “calc.exe”, , , )
' 运行 (“D:\游戏\剑侠\剑侠情缘网络版\gamefree.exe”, 假, )
' 执行 (#打开文件, “D:\游戏\剑侠\剑侠情缘网络版\gamefree.exe”, , , )
路径 = “D:\游戏\剑侠\剑侠情缘网络版\gamefree.exe”
' ' 改变目录的作用,相当于是dos的cd,一个作用就是判断路径是否存在,第二个作用就是进入这个路径
' 改变目录 (取文本左边 (路径, 倒找文本 (路径, “\”, , 假)))
' 运行 (路径, 假, )
进程_创建 (路径, )
511遇见易语言模块API教程
用到的API CreateProcess
WIN32API函数CreateProcess用来创建一个新的进程和它的主线程,这个新进程运行指定的可执行文件。
函数原型
BOOL CreateProcess
(
LPCTSTR lpApplicationName,//程序路径可以是相对也可以是绝对路径
LPTSTR lpCommandLine,//启动参数可空
LPSECURITY_ATTRIBUTES lpProcessAttributes。//为空句柄不被继承
LPSECURITY_ATTRIBUTES lpThreadAttributes,// 参数为空,新进程使用默认的安全描述符
BOOL bInheritHandles,// TRUE表示允许当前进程中的所有句柄都由新建的子进程继承
DWORD dwCreationFlags,// 指定附加的、用来控制优先类和进程的创建的标志。
LPVOID lpEnvironment,// 指向一个新进程的环境块。如果此参数为空,新进程使用调用进程的环境。
LPCTSTR lpCurrentDirectory,// 这个字符串必须是一个包含驱动器名的绝对路径。
LPSTARTUPINFO lpStartupInfo,// 指向一个用于决定新进程的主窗体如何显示的STARTUPINFO结构体。
LPPROCESS_INFORMATIONlpProcessInformation//指向一个用来接收新进程的识别信息的PROCESS_INFORMATION结构体。
);
自定义数据类型
STARTUPINFO
.版本 2
.数据类型 STARTUPINFO, 公开, 进程启动信息(进程_创建)
.成员 cb, 整数型
.成员 lpReserved, 整数型
.成员 lpDesktop, 整数型
.成员 lpTitle, 整数型
.成员 dwX, 整数型
.成员 dwY, 整数型
.成员 dwXSize, 整数型
.成员 dwYSize, 整数型
.成员 dwXCountChars, 整数型
.成员 dwYCountChars, 整数型
.成员 dwFillAttribute, 整数型
.成员 dwFlags, 整数型
.成员 wShowWindow, 长整数型
.成员 cbReserved2, 长整数型
.成员 lpReserved2, 整数型
.成员 hStdInput, 整数型
.成员 hStdOutput, 整数型
.成员 hStdError, 整数型
PROCESS_INFORMATION
.版本 2
.数据类型 PROCESS_INFORMATION, 公开, 进程标识(进程_创建)
.成员 hProcess, 整数型, , , 进程句柄
.成员 hThread, 整数型, , , 线程句柄
.成员 dwProcessId, 整数型, , , 进程标识符
.成员 dwThreadId, 整数型, , , 线程标识符
命令源码
.版本 2
.子程序 进程_创建, 整数型, 公开, 返回非 0 表示成功,0表示失败
.参数 程序路径, 文本型, , 程序的路径
.参数 启动参数, 文本型, 可空
.局部变量 目录, 文本型
.局部变量 传参, STARTUPINFO
.局部变量 a, PROCESS_INFORMATION
目录 = 取文本左边 (程序路径, 倒找文本 (程序路径, “\”, , 假))
返回 (CreateProcess (程序路径, 启动参数, 0, 0, 4, 0, 0, 目录, 传参, a))
参考:易语言模块API制作系列视频教程
易语言模块API教程进程创建