能打开任何文件的API函数ShellExecute

转载 2007年09月18日 16:40:00
能打开任何文件〔包括桌面和URL快捷方式( .ink或 .url)〕的API函数ShellExecute
HINSTANCE ShellExecute(
    HWND hwnd,
    LPCTSTR lpOperation,
    LPCTSTR lpFile,
    LPCTSTR lpParameters,
    LPCTSTR lpDirectory,
    INT nShowCmd
)
ShellExecute取代了WinExec,可以给它任何文件的名字,它都能识别出来并打开它。
例如:
ShellExecute(NULL,"open","wash.rmvb",NULL,NULL,SW_SHOWNORMAL);
//使用缺省的rmvb播放器播放wash.rmvb
ShellExecute解析系统注册表HKEY_CLASSES_ROOT中所有的内容,判断启动那一个执行程序,并且启动一个新的实例或使用DDE将文件名连到一打开的实例。然后,ShellExecute 返回打开文件的应用的实例句柄。
ShellExecute还能识别其它协议,象Http、FTP、GOPHER。甚至识别“mailto”,如果文件名指向“mailto:chinawash@sohu.com”,它启动电子邮件程序并打开一个待编辑的新邮件。总之,ShellExecute函数就是如此简单地打开磁盘文件和Internet文件。如果将第二个参数“OPEN”改为“PRINT”或者“EXPLORE”,ShellExecute将能打印文件和打开文件夹。ShellExecute还有一个扩展函数ShellExecuteEx,所带参数中有一个特殊的结构,功能更强。

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



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=653509


 

能打开任何文件的API函数ShellExecute

能打开任何文件〔包括桌面和URL快捷方式( .ink或 .url)〕的API函数ShellExecute HINSTANCE ShellExecute(     HWND hwnd,     LPCT...
  • chinawash
  • chinawash
  • 2006-04-06 23:09:00
  • 1412

调用 API 函数-ShellExecute实例

一、API函数ShellExecute用法 1.   函数功能: 运行一个外部程序(或者是打开一个已注册的文件、打开一个目录、打印一个文件等等),并对外部程序有一定的控制。 2、ShellE...
  • foreverfall
  • foreverfall
  • 2015-06-01 14:41:38
  • 3175

windows客户端开发--通过ShellExecute函数打开浏览器

在我们的客户端中常常会有一些link,点击后希望通过浏览器导航到该链接。我们是通过ShellExecute函数来实现的。ShellExecute的功能是运行一个外部程序(或者是打开一个已注册的文件、打...
  • wangshubo1989
  • wangshubo1989
  • 2016-02-19 21:35:39
  • 3020

使用 ShellExecute 打开文件或执行程序

使用 ShellExecute 打开文件或执行程序可以使用 ShellExecute 打开文件或执行程序。原型:HINSTANCE ShellExecute( _In_opt_ HWND h...
  • yangyang031213
  • yangyang031213
  • 2017-03-20 09:55:56
  • 1703

原来ShellExecute不能执行批处理文件

以下代码怎么都不执行a.bat,最后通过WinExec("./a.bat", SW_SHOW);解决 ShellExecute(NULL, "open", "./a.bat", NULL, NULL,...
  • LaoWu_
  • LaoWu_
  • 2011-03-27 22:35:00
  • 4905

VC通过WinExec和ShellExecute打开指定程序或者文件的方法

⑴ 函数原型: UINT Win Exec(LPCSTR lpCmdLine, UINT uCmdShow); ⑵ 参数: lpCmdLine:指向一个空结束的字符串,串中包含将要执行的应用程序...
  • bluszhu
  • bluszhu
  • 2013-12-17 10:39:33
  • 1350

ShellExecute打开外部程序、文件或文件夹

ShellExecute是根据文件的扩展名然后查找注册表用默认的打开方式打开程序,也可以用指定的程序打开,参数不同就能达到不同的功能,还有一个CreateProcess是创建一个进程,也可以实现打开文...
  • ziwen1002
  • ziwen1002
  • 2012-11-04 14:19:59
  • 1037

使用ShellExecute打开目标文件所在文件夹并选中目标文件

ShellExecute很常用,我们可以使用它调用另外一个exe可执行程序,也可以使用它来打开指定的目录或文件。本文主要讨论如何通过ShellExecute来打开目标文件所在文件夹并选中目标文件。 ...
  • chenlycly
  • chenlycly
  • 2012-03-18 14:34:30
  • 10320

ShellExecute(打开程序)

  • 2013年09月03日 20:08
  • 13KB
  • 下载

VC++ ShellExecute 执行、运行一个外部程序函数功能详解:

ShellExecute 函数功能:     ShellExecute 的功能是运行一个外部程序(或者是打开一个已注册的文件、打开一个目录、打印一个文件等等),并对外部程序有一定的控制。 函数简...
  • whui890911
  • whui890911
  • 2015-05-20 11:52:20
  • 3413
收藏助手
不良信息举报
您举报文章:能打开任何文件的API函数ShellExecute
举报原因:
原因补充:

(最多只允许输入30个字)