没有合适的资源?快使用搜索试试~ 我知道了~
vc中调用外部程序方法
5星 · 超过95%的资源 需积分: 31 45 下载量 83 浏览量
2011-12-12
16:06:06
上传
评论
收藏 148KB PDF 举报
温馨提示
试读
14页
Vc中调用外部应用程序的几种方法,希望对你有所帮助.主要是几个函数的使用及其相关参数说明
资源推荐
资源详情
资源评论
vc 中调用其他应用程序
三个 SDK 函数: WinExec,ShellExecute ,CreateProcess 可以实现调用其他程序的要求,其中以 WinExec 最为
简单,ShellExecute 比 WinExec 灵活一些,CreateProcess 最为复杂。
WinExec 两个参数,前一个指定路径,后一个指定显示方式。
ShellExecute 可以指定工作目录,并且还可以寻找文件的关联直接打开不用加载与文件关联的应用程序,
ShellExecute 还可以打开网页,启动相应的邮件关联发送邮件等等。
CreateProcess 一共有十个参数,不过大部分都可以用 NULL 代替,它可以指定进程的安全属性,继承信息,
类的优先级等等。如果我们要得到足够多的关于新的进程的信息,控制新的进程的细节属性,若要达到这些目的,我们
就需要使用 CreateProcess 函数了。
WinExec, ShellExecute, CreateProcess
使用 WinExec 命令
⑴ 函数原型:
UINT Win Exec(LPCSTR lpCmdLine, UINT uCmdShow);
⑵ 参数:
lpCmdLine:指向一个空结束的字符串,串中包含将要执行的应用程序的命令行(文件名加上可选参数)。
uCmdShow:定义 Windows 应用程序的窗口如何显示,并为 CreateProcess 函数提供 STARTUPINFO 参数
的 wShowWindow 成员的值。
⑶ 返回值:
若函数调用成功,则返回值大于 31。若函数调用失败,则返回值为下列之一:
① 0:系统内存或资源已耗尽。
② ERROR_BAD_FORMAT:EXE 文件无效(非 Win32.EXE 或.EXE 影像错误)。
③ ERROR_FILE_NOT_FOUND:指定的文件未找到。
④ ERROR_PATH_NOT_FOUND:指定的路径未找到。
虽然Microsoft 认为 WinExec 已过时,但是在许多时候,简单的 WinExec 函数仍是运行新程序的最好方式。
简单地传送作为第一个参数的 命令行,还需要决定如何显示程序(该程序也许会忽视它)的第二个参数。通常,将其设
置为 SW_SHOW,也可尝试 SW_MINIMIZED 或 SW_MAXIMIZED。WinExec 不允许用 CreateProcess 获得的所有选
项,而它的确简单。
使用ShellExecute 命令
⑴ 函数原型:
HINSTANCE ShellExecute(HWND hwnd, LPCTSTR lpOperation, LPCTSTR lpFile, LPCTSTR lpParameters, L
PCTSTR lpDirectory, INT nShowCmd);
⑵ 参数:
hwnd:指向父窗口的窗口句柄。此窗口接收应用程序产生的任何信息框。
lpOperation:一个空结束的字符串地址,此字符串指定要执行的操作。下面的操作字符串是有效的:
"open" 此函数打开由参数 lpFile 指定的文件,此文件可以是一个可执行文件或文档文件,也可是一个文件夹。
"print" 此函数打印由参数 lpFile 指定的文件,此文件应是一个文档文件,假如此文件是一个可执行文件,则打开此
文件。
"explore" 此函数搜索由参数 lpFile 指定的文件夹,此文件应是一个文档文件,
此参数可以为空。这种情况下,函数用于打开由参数 lpFile 指定的文件。
lpFile:一个空结束的字符串地址,此字符串指定要打开或打印的文件或者是要打开或搜索的文件夹。
lpParameters:假如参数 lpFile 指定一个可执行文件,lpParameters 则是一个空结束的字符串地址,此字符
串指定要传递给应用程序的参数。假如 lpFile 指定一个文档文件,lpParameters 应为空。
lpDirectory:一个空结束的字符串地址,此字符串指定默认目录。
nShowCmd:假如 lpFile 指定一个可执行文件,nShowCmd 表明应用程序打开时如何显示。假如 lpFile 指定
一个文档文件,nShowCmd 应为空。
⑶ 返回值:
若函数调用成功,则返回值大于 32,否则为一个小于等于 32 的错误值。
说明:可以用此函数打开或搜索一个外壳文件夹。打开文件夹可用下面任何一种形式:
ShellExecute(handle, NULL, path_to_folder, NULL, NULL, SW_SHOWNORMAL);
或
ShellExecute(handle, "open", path_to_folder, NULL, NULL, SW_SHOWNORMAL);
搜索文件夹,可用如下形式
ShellExecute(handle, "explore", path_to_folder, NULL, NULL, SW_SHOWNORMAL);
ShellExecute 命令虽已过时但易于得到。该命令向命令解释程序提出打开、浏览或打印文档或文件夹的请求,
虽然可以用 ShellExecute 运行程序,但通常只发送文档名,而命令解释程序则决定要运行那个程序。另外在打开目录
文件夹时,ShellExecute 命令非 常有用。
⑷ 程序示例
下面通过一个例子来说名 WinExec 和 ShellExecute 的使用。下面程序有控制台程序示例,其使用两种不同的
方法,打开文本文件。下面程序使用 WinExec,并明确指定使用记事本程序。然后,使用 ShellExecute,打开文本文件。
程序清单
#include <windows.h >
#include <iostream.h >
void main(int argc,char *argv[])
{
cout < <”Opening with WinExec\n”;
if (WinExec(“notepad readme.txt”,SH_SHOW) <32)
MessagBox(NULL,”Can’t WinExec”,NULL,MB_OK);
cout < <”Press Enter\n”;
MessagBox(NULL,”Press OK to continue”,”Progrm Launched”,MB_OK);
cout < <”Opening with ShellExecute\n”;
if (ShellExecute (NULL,”open”,”readme.txt”,NULL,NULL,SW_SHOW) <(HANDLE) 32)
MessagBox(NULL,”Can’t ShellExecute\n”,NULL,MB_OK);
}
使用 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 结构,该结构决定了返回的句柄是否可被子进程继
承。
剩余13页未读,继续阅读
三分线徘徊
- 粉丝: 17
- 资源: 8
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页