现在的位置: 首页 > 综合 > 正文

ShellExecute 函数的用法和实例

2013年02月23日 ⁄ 综合 ⁄ 共 3027字 ⁄ 字号 评论关闭

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

抱歉!评论已关闭.