深入浅出ShellExecute

Q: 如何打开一个应用程序?

ShellExecute(this- >m_hWnd,"open","calc.exe","","", SW_SHOW );

ShellExecute(this->m_hWnd,"open","notepad.exe",
  "c:\\MyLog.log","",SW_SHOW );

正如您所看到的,我并没有传递程序的完整路径。

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);

时间: 2024-08-17 18:29:18

深入浅出ShellExecute的相关文章

深入浅出学习正则表达式

正则 前言: 半年前我对正则表达式产生了兴趣,在网上查找过不少资料,看过不少的教程,最后在使用一个正则表达式工具RegexBuddy时发现他的教程写的非常好,可以说是我目前见过最好的正则表达式教程.于是一直想把他翻译过来.这个愿望直到这个五一长假才得以实现,结果就有了这篇文章.关于本文的名字,使用"深入浅出"似乎已经太俗.但是通读原文以后,觉得只有用"深入浅出"才能准确的表达出该教程给我的感受,所以也就不能免俗了. 本文是Jan Goyvaerts为RegexBud

ActiveX深入浅出(一)

active|activex 纲要 可以这样说,Active平台代表了Microsoft的世界观.使用ActiveX控件,来构筑包括从与用户交互和适应COM的事务处理监视器,到Web服务器,全部实现自动化的机构,这就是Microsoft的打算了.桌面用的.基于COM的组件叫做ActiveX控件.所谓ActiveX控件不过是遵从一定的标准.与客户端交互的COM对象而已.基于组件的应用开发,其方法和组装电子装置一样,可以用已制作好的组件部件来构筑应用.这确实是一项很令人神往的技术.虽然说起来高深,但

深入浅出VC++串口编程之短信应用开发

前面数次连载我们以较长的篇幅讲解了串口通信的硬件原理.DOS平台控制以及基于WIN32 API.控件和第三方类的串口编程.作为本系列文章的最后一次连载,本章将给出一个典型的 应用实例:西门子短信服务模块TC35的串口控制. 1.短信控制终端 作为短信 (Short Message Service,SMS)一族,想必你有这样的体会:用手机编辑短信息十分不便. 容易出错,而且修改费时,若能用计算机来收发短信则方便许多.注意,本文所说的用计算 机收发短信并不是说通过"网易短信王"等方式在In

深入浅出VC++串口编程之第三方类

串口类 从本系列文章可以看出,与通过WIN32 API进行串口访问相比,通过MScomm这个Activex控 件进行串口访问要来的方便许多,它基本上可以向用户屏蔽多线程的细节,以事件(发出 OnComm消息)方式实现串口的异步访问. 尽管如此,MScomm控件的使用仍有诸多不便,譬如其发送和接收数据都要进行VARIANT类 型对象与字符串的转化等.因此,国内外许多优秀的程序员自己编写了一些串口类,使用这 些类,我们将可以更方便的操作串口.在笔者的<深入浅出Win32多线程程序设计之综合实例 >

深入浅出多线程(5)以并行包线程池为例说说线程池的设计需求及使用

接深入浅出多线程系列4, 线程对象的创建和销毁是需要花费系统资源的,通过线程池,可以避免该问 题并提高系统的响应时间.这种情形类似我们常提到的数据库连接池. 线程池的广泛应用使得在SUN在JDK 1.5的工具包提供了线程池的支持.我计 划将该系列分为设计需求与设计实现两个部分.这样会更加清晰.如果想要熟悉 ,并熟练应用线程池,那么通过设计需求篇也就是该篇就可以找到答案.如果想 探究实现的细节,那么在设计实现篇会有深入的说明. 本文以Concurrent包线程池设计为例,讨论线程池的设计. 线程池

深入浅出多线程(3)-Future异步模式以及在JDK1.5Concurrent包中的实现

接深入浅出多线程(2)在多线程交互的中,经常有一个线程需要得到另个一 线程的计算结果,我们常用的是Future异步模式来加以解决. 什么是Future模式呢?Future 顾名思义,在金融行业叫期权,市场上有看跌 期权和看涨期权,你可以在现在(比如九月份)购买年底(十二月)的石油,假 如你买的是看涨期权,那么如果石油真的涨了,你也可以在十二月份依照九月份 商定的价格购买.扯远了,Future就是你可以拿到未来的结果.对于多线程,如 果线程A要等待线程B的结果,那么线程A没必要等待B,直到B有结果

介绍一个功能强大的API函数 ShellExecute

问题的提出: 我使用MFC编写一个APP,要求About对话框中显示LOGO.公司名.地址和公司的URL链接.使用户点击URL链接以后,启动浏览器访问Web页面,这种对话框中的热链接使应用程序增色不少.我琢磨的方法是 从系统注册表中通过查找.htm 或 .html文件的关联程序来获得缺省浏览器的名字,这样好象有很多工作要做.此外,如果浏览器已经打开,总是开始一个新的实例替代当前已有的一个实例.想找一个容易一 点的方法,但我查过有关的资料,没有收获,请高手指教. 解决方法: 如果有这样的一个API

判断ShellExecute函数是否执行完一个程序的方法

ShellExecute是windows的API函数,功能是执行可执行文件(exe)或任何关联文件(doc. txt.xls等).但 ShellExecute是异步执行的,也就是说,不管执行的程序是否成功运行,运 行的时间是长是短,ShellExecute函数都会立即返回.这样虽然可以很好地完成执行程序的工 作,但却会给后续的工作带来麻烦. 例如,当调用bcp命令向sql server导入数据后,在DBGrid中显示这些导入的数据.如果使 用ShellExecute来直接执行bcp命令,很可能会

深入浅出之正则表达式

前言: 半年前我对正则表达式产生了兴趣,在网上查找过不少资料,看过不少的教程,最后在使用一个正则表达式工具RegexBuddy时发现他的教程写的非常好,可以说是我目前见过最好的正则表达式教 程.于是一直想把他翻译过来.这个愿望直到这个五一长假才得以实现,结果就有了这篇文章.关于本 文的名字,使用"深入浅出"似乎已经太俗.但是通读原文以后,觉得只有用"深入浅 出"才能准确的表达出该教程给我的感受,所以也就不能免俗了. 本文是Jan Goyvaerts为RegexBud