ShellExecute 函数的用法和实例

From: http://blog.sina.com.cn/s/blog_49364213010003d8.html

今天帮同学做毕业设计时,用到了ShellExecute 函数,在这写一下。
关于ShellExecute函数:
   
   在ShellAPI单元中,ShellExecute函数的定义为:
HINSTANCE ShellExecute(HWND hwnd,
    LPCTSTR lpOperation,
    LPCTSTR lpFile,
    LPCTSTR lpParameters,
    LPCTSTR lpDirectory,
    INT nShowCmd
);
作用:ShellExecute的功能是运行一个外部程序(或者是打开一个已注册的文件、打开一个目录、打印一个文件等等),并对外部程序有一定的控制。
参数说明:
    HWND hwnd,     //指向父窗口的句柄;
   
   LPCTSTR lpOperation,     //指向一个null结尾的串以指明要执行的操作;
                          可以是"open","print","explore",NULL;
    LPCTSTR lpFile,    //指向文件名或文件夹名串;
   
   LPCTSTR lpParameters,  //指向一个null结尾的串以指明可执行文件的参数;
                          如果FileName参数为文档,此参数应为NULL;
    LPCTSTR lpDirectory,     //指向一个null结尾的串以指明默认目录;
   
   INT nShowCmd    //文件在打开时是否显示;
                          如果FileName参数为文档,此参数应为0;

其中nShowcmd 详细说一下:
1 SW_HIDE 隐藏这个窗体,并激活其他窗体。
2 SW_MAXIMIZE 最大化指定的窗体。
3 SW_MINIMIZE 最小化指定的窗体,并按顺序激活最上层的窗体。
4 SW_RESTORE 激活并显示窗体。如果窗体为最小化或者最大化,窗体恢复到原始大小和位置。应用程序当恢复一个最小化的窗体时将指定标记。
5 SW_SHOW 以当前的大小和位置激活并显示窗体。
6 SW_SHOWDEFAULT
7 SW_SHOWMAXIMIZED 激活并最大化显示窗体。
8 SW_SHOWMINIMIZED 激活并最小化现实窗体。
9 SW_SHOWMINNOACTIVE 最小化窗体,保持其激活状态。
10 SW_SHOWNA 以当前状态显示窗体,保持其激活状态。
11 SW_SHOWNOACTIVATE 以当前的大小和位置显示窗体,并保持其激活状态。
12 SW_SHOWNORMAL 激活并显示一个窗体。如果窗体为最大化或者最小化,窗体恢复到原始的大小和位置。当窗体第一次显示的时候,应用程序记录标记。

一些实例:

Q: 如何打开一个应用程序?
ShellExecute(this->m_hWnd,open,calc.exe,,, SW_SHOW );

ShellExecute(this->m_hWnd,open,notepad.exe,
    c:\\MyLog.log,,SW_SHOW );
As you can see, I havent passed the full path of the programs.
 
Q: 如何打开一个同系统程序相关连的文档?
ShellExecute(this->m_hWnd,open,
    c:\\abc.txt,,,SW_SHOW );
 
Q: 如何打开一个网页?
ShellExecute(this->m_hWnd,open,
    http://www.google.com,,, SW_SHOW );
 
Q: 如何激活相关程序,发送EMAIL?
ShellExecute(this->m_hWnd,open,
    mailto:nishinapp@yahoo.com,,, SW_SHOW );
 
Q: 如何用系统打印机打印文档?
ShellExecute(this->m_hWnd,print,
    c:\\abc.txt,,, SW_HIDE);
 
Q: 如何用系统查找功能来查找指定文件?
ShellExecute(m_hWnd,find,d:\\nish,
    NULL,NULL,SW_SHOW);
 
Q: 如何启动一个程序,直到它运行结束?
SHELLEXECUTEINFO ShExecInfo = {0};
ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
ShExecInfo.hwnd = NULL;
ShExecInfo.lpVerb = NULL;
ShExecInfo.lpFile = c:\\MyProgram.exe;            
ShExecInfo.lpParameters = ;    
ShExecInfo.lpDirectory = NULL;
ShExecInfo.nShow = SW_SHOW;
ShExecInfo.hInstApp = NULL;      
ShellExecuteEx(&ShExecInfo);
WaitForSingleObject(ShExecInfo.hProcess,INFINITE);
或:
PROCESS_INFORMATION ProcessInfo;
STARTUPINFO StartupInfo; //This is an [in] parameter
ZeroMemory(&StartupInfo, sizeof(StartupInfo));
StartupInfo.cb = sizeof StartupInfo ; //Only compulsory field
if(CreateProcess(c:\\winnt\\notepad.exe, NULL,
    NULL,NULL,FALSE,0,NULL,
    NULL,&StartupInfo,&ProcessInfo))
{
    WaitForSingleObject(ProcessInfo.hProcess,INFINITE);
    CloseHandle(ProcessInfo.hThread);
    CloseHandle(ProcessInfo.hProcess);

else
{
    MessageBox(The process could not be started...);
}
 
 
Q: 如何显示文件或文件夹的属性?
SHELLEXECUTEINFO ShExecInfo ={0};
ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
ShExecInfo.fMask = SEE_MASK_INVOKEIDLIST ;
ShExecInfo.hwnd = NULL;
ShExecInfo.lpVerb = properties;
ShExecInfo.lpFile = c:\\; //can be a file as well
ShExecInfo.lpParameters = ;
ShExecInfo.lpDirectory = NULL;
ShExecInfo.nShow = SW_SHOW;
ShExecInfo.hInstApp = NULL;
ShellExecuteEx(&ShExecInfo);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/405189.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[React]你有用过哪些React的表单库吗?说说它们的优缺点

[React]你有用过哪些React的表单库吗?说说它们的优缺点 redux-formreact-jsonschema-formformikunform 个人简介 我是歌谣,欢迎和大家一起交流前后端知识。放弃很容易, 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题…

嵌入式产品开发流程

嵌入式产品,与普通电子产品一样,开发过程都需要遵循一些基本的流程,都是一个从需求分析到总体设计,详细设计到最后产品完成的过程。但是,与普通电子产品相比,嵌入式产品的开发流程又有其特殊之处。它包含嵌…

Codeforces 478B 6thweek contest_B

Random teams 题意: 有n个选手和m个队伍,让你分配,条件是每个队伍至少要有1个选手。分配完之后,每队伍里2个人可以组成一组,求分配完之后最多的组数和最少的组数 分析: 1. 最多的情况就是,先每…

apache代理IIS的80端口实现共存

IIS与apache共用80端口方法: 一:如何有多的公网IP。可在一个网卡上绑定多个IP来实现。 IIS6,多IP下共存,IIS为192.168.0.1,apache为192.168.0.2 原文地址到2003的CD下的 support/tools/Support.cab。解压出httpcfg.exe…

[react] 你有使用过formik库吗?说说它的优缺点

[react] 你有使用过formik库吗?说说它的优缺点 Formik提供了便捷的表单操作, 如获取表单数据,表单校验,提交事件等 结合yup来设置表单校验规则非常方便 Formik is a small library that helps you with the 3 most annoying par…

Linux 多线程开发-线程创建pthread_creat

1、函数原型 int pthread_creat(pthread_t *pid, const pthread_attr_t *attr,void *(*start_routine)(void *),void *arg); pid:返回创建成功后的线程ID,unsigned int型变量;attr:设置线程属性,为NULL则为默认属性&…

Eclipse的maven插件最新地址

最新地址:http://download.eclipse.org/technology/m2e/releases 原先:http://m2eclipse.sonatype.org/sites/m2e转载于:https://www.cnblogs.com/binarysheep/p/4752793.html

USB大全

http://www.crifan.com/files/doc/docbook/usb_basic/release/html/usb_basic.html

[react] 怎样动态导入组件?

[react] 怎样动态导入组件? 自己使用 import 和 async/await 实现的异步组件React.lazy开源库 react-loadable 库/react-lazyload 库babel 动态导入(Dynamic Import) 个人简介 我是歌谣,欢迎和大家一起交流前后端知识。放弃很容…

/dev/fb0入门练习

From: http://sunnyshineboy.blog.163.com/blog/static/20281511820124121118700/ 大家都知道Unix/Linux系统是由命令驱动的。那么最基本的系统是命令行的(就是想DOS一样的界面)。X-Window-System是Unix/Linux上的图形系统&…

Linux 多线程开发-等待线程结束pthread_join

1、函数原型 int pthread_join(pthread_t pid, void **value_ptr); pid:所等待的线程ID;value_ptr:通常设置为NULL,如果不为NULL,pthread_join将复制一份线程退出值到一个内存区域,并让*value_ptr指向该内…

SQL常用语句|创建表,设置主键......

新建表 create table [表名]([自动编号字段] int IDENTITY (1,1) PRIMARY KEY ,[字段1] nVarChar(50) default \默认值\ null ,[字段2] ntext null ,[字段3] datetime,[字段4] money null ,[字段5] int default 0,[字段6] Decimal (12,4) default 0,[字段7] image null ,) 删除…

如何Keil官网下载器件支持包Software Packs

步骤1:百度一下Keil,在搜索结果中点击打开官网 步骤2:在官网的搜索栏输入Software Packs,点击Go 步骤3:点击打开MDK Software Packs 步骤4:往下拉,找到自己需要的Pack 步骤5:以下载s…

为文档快速插入页眉和页脚

专业的文档往往需要配以漂亮的页眉、页脚等修饰性元素才会更加完美。在Word 2010中您不必再为设计漂亮页眉和页脚而大费周折,内置的“页眉样式库”和“页脚样式库”为您提供了丰富的选择余地。 (1)打开Word 2010文档,在“插入”选…

基于海思开发板的屏幕截图程序(一)

一直以来从事基于海思开发板的开发&#xff0c;但是每次想到“屏幕截图"&#xff0c;真的让人非常惭愧&#xff01; 参考网上的代码修改了下&#xff1a; #include <stdio.h> #include <stdlib.h> #include <sys/ioctl.h> #include <unistd.h> #…

[react] 如何给非控组件设置默认的值?

[react] 如何给非控组件设置默认的值&#xff1f; 表单元素依赖于状态(state)&#xff0c;表单元素需要默认值实时映射到状态的时候&#xff0c;就是受控组件 <input name"username" type"text" value{this.state.username} onChange{this.handleChan…

Linux 多线程开发-线程的属性-分离detached和连接joinable

1、描述 linux的POSIX线程分离状态决定一个线程以什么方式来终止。默认的分离状态是可连接态&#xff08;joinable&#xff09;&#xff0c;创建线程是参数设置为NULL&#xff0c;就是默认连接态&#xff0c;可以被pthread_join。 Linux的POSIX线程要么分离要么连接分别用一下…

oracle10g随服务器启动而自动启动(linux as 5)

http://blog.sina.com.cn/s/blog_5007d1b10100lq7g.html

[BBS]搭建开源论坛之Jforum搭配开源CKEDITOR

本文作者&#xff1a;sushengmiyan本文地址&#xff1a;http://blog.csdn.net/sushengmiyan/article/details/47946065使用默认的编辑器的时候&#xff0c;格式都无法保存。现在按照上节的方法更改了编辑器。今天再对编辑器进行更改&#xff0c;适应jforum.效果如下图了。记录几…

Linux cJSON库的使用、编译为cJSON动态库

参考 &#xff1a; https://blog.csdn.net/nanfeibuyi/article/details/86605314