⑷ 程序示例
下面通过一个例子来说名 WinExec 和 ShellExecute 的使用 。下面程序有控制台程序示例 , 其使用两种不同的方法 , 打开文本文件 。下面程序使用 WinExec , 并明确指定使用记事本程序 。然后 , 使用 ShellExecute, 打开文本文件 。
程序清单
#include
#include
void main(int argc,char *argv[])
{
cout<<”Opening with WinExecn”;
if (WinExec(“notepad readme.txt”,SH_SHOW)<32)
MessagBox(NULL,”Can"t WinExec”,NULL,MB_OK);
cout<<”Press Entern”;
MessagBox(NULL,”Press OK to continue”,”Progrm Launched”,MB_OK);
cout<<”Opening with ShellExecuten”;
if (ShellExecute (NULL,”open”,
”readme.txt”,NULL,NULL,SW_SHOW)<(HANDLE) 32)
MessagBox(NULL,”Can"t ShellExecuten”,NULL,MB_OK);
}
4 使用 CreateProcess 命令
⑴ 函数原型:
BOOL CreateProcess(
LPCTSTR lpApplicationName ,
LPTSTR lpCommandLine ,
LPSECURITY_ATTRIBUTES lpProcessAttributes ,
LPSECURITY_ATTRIBUTES lpThreadAttributes ,
BOOL bInheritHandles ,
DWord dwCreationFlags ,
LPVOID lpEnvironment ,
LPCTSTR lpCurrentDirectory ,
LPSTARTUPINFO lpStartupInfo ,
LPPROCESS_INFORMATION lpProcessInformation
);
⑵ 参数:
lpApplicationName :指向一个以空结尾的串 , 他指定了要执行的模块
lpCommandLine :指向一个以空结尾的串 , 该串定义了要执行的命令行 。
lpProcessAttributes :指向一个 SECURITY_ATTRIBUTES 结构 , 该结构决定了返回的句柄是否可被子进程继承 。
lpThreadAttributes :指向一个 SECURITY_ATTRIBUTES 结构 , 该结构决定了返回的句柄是否可被子进程继承 。
bInheritHandles , : 表明新进程是否从调用进程继承句柄 。
dwCreationFlags : 定义控制优先类和进程创建的附加标志 。
lpEnvironment :指向一个新进程的环境块 。
lpCurrentDirectory :指向一个以空结尾的串 , 该串定义了子进程的当前驱动器和当前目录 。
lpStartupInfo :指向一个 STARTUPINFO 结构 , 该结构定义了新进程的主窗口将如何显示 。
lpProcessInformation : 指向 PROCESS_INFORMATION 结构 , 该结构接受关于新进程的表示信息 。
⑶ 返回值:
若函数调用成功 , 则返回值不为 0 ;若函数调用失败 , 返回值为 0。
ShellExecute 和 WinExec 命令用于简单的作业 。如果要完全控制一个新进程 , 就必须调用 CreateProcess。
在上述参数中 , 参数 lpStartupInfo 是 STARTUPINFO 结构 。可以用来设置控台的标题 , 新窗口的的初始大小和位置 , 及重定向标准输入和输出 。新程序通常可以忽略多数这些数据项 , 如果选择那样做的话 。可以规定该结构体中的标志 , 已表明要设置的数据段 。有时 , 不想设置任何信息 , 也必须传递一个有效的指针给空结构(确定设置大小到 cb , 及设置 dwFlags 成员为 0 ) 。参数 lpProcessInformation 返回进程和线程句柄 , 还包括进程和线程 ID。这些句柄拥有在参数 lpProcessAttributes 和 lpThreadAttributes 中规定的访问 。
要注意 , 针对 CreateProcess 的一些参数对控制台应用程序是特定的 , 而其它参数则对各种应用程序有用 。大多数情况下 , 并不一定要填入 STARTUPINFO 结构 , 但无论如何必须提供它 。其返回值是布尔型的 , 而真正感兴趣的返回值发生于作为参数传送的结构中( PROCESS_INFORMATION ) 。CreateProcess 返回该结构中的进程 ID 及其句柄 , 以及初始线程 ID 及其句柄 。可以将 ID 发送到其它进程 , 或使用句柄来控制新进程 。
⑷ 相关命令
给定进程句柄 , 就可以用相关命令来控制进程 。下面我们讨论进程结束的确定 , 进程结束的确定有以下几种方法:
推荐阅读
- 4 《Undocumented Windows 2000 Secrets》翻译 --- 第四章
- 3 《Undocumented Windows 2000 Secrets》翻译 --- 第四章
- Windows 2000/2003下如何使用组策略禁止用户修改密码
- windows 2000密码破解
- Windows 2000对调试技术的支持
- 永久删除 Windows 2000 默认本地 C, D 盘共享的两个批处理文件
- Windows 2000 无法直接关机解决方案
- 2 《Undocumented Windows 2000 Secrets》翻译 --- 第二章
- 2 《Undocumented Windows 2000 Secrets》翻译 --- 2
- 使用 Windows 2000 中的 IPSec IP 筛选器列表
