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:[email protected],,, 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);

你可能感兴趣的:(ShellExecute 函数的用法和实例)