您的位置:首页 > 运维架构 > Shell

ShellExecute 函数的用法和实例

2013-01-24 11:54 232 查看
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);

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: