HINSTANCE ShellExecute(
  _In_opt_ HWND    hwnd,//父窗口句柄或出错时显示错误父窗口的句柄,可以为 NULL
  _In_opt_ LPCTSTR lpOperation,//操作
  _In_     LPCTSTR lpFile,//要打开的文件名、执行的程序名、浏览的文件夹等。
  _In_opt_ LPCTSTR lpParameters,//可执行程序的参数,否则为 NULL
  _In_opt_ LPCTSTR lpDirectory,//默认目录
  _In_     INT     nShowCmd//显示类型

lpOperation 是一个字符串,通常为:

  • edit 用编辑器打开 lpFile 指定的文档,如果 lpFile 不是文档,则会失败
  • explore 浏览 lpFile 指定的文件夹
  • find 搜索 lpDirectory 指定的目录
  • open 打开 lpFile 文件,lpFile 可以是文件或文件夹
  • print 打印 lpFile,如果 lpFile 不是文档,则函数失败
  • properties 显示属性
  • runas 请求以管理员权限运行,比如以管理员权限运行某个exe
  • NULL 执行默认”open”动作

nShowCmd 执行操作之后程序显示类型,指定该参数后运行起来的程序不一定能按照指定参数显示,只是通知程序的显示状态。类型如下:

  • SW_HIDE 隐藏窗口,活动状态给令一个窗口
  • SW_MINIMIZE 最小化窗口,活动状态给令一个窗口
  • SW_RESTORE 用原来的大小和位置显示一个窗口,同时令其进入活动状态
  • SW_SHOW 用当前的大小和位置显示一个窗口,同时令其进入活动状态
  • SW_SHOWMAXIMIZED 最大化窗口,并将其激活
  • SW_SHOWMINIMIZED 最小化窗口,并将其激活
  • SW_SHOWMINNOACTIVE 最小化一个窗口,同时不改变活动窗口
  • SW_SHOWNA 用当前的大小和位置显示一个窗口,不改变活动窗口
  • SW_SHOWNOACTIVATE 用最近的大小和位置显示一个窗口,同时不改变活动窗口
  • SW_SHOWNORMAL 与SW_RESTORE相同

返回值:
返回值为被执行程序的实例句柄。若返回值小于32,则表示出现错误。错误如下:

  • 0 系统内存或资源不足
  • ERROR_FILE_NOT_FOUND 找不到指定的文件
  • ERROR_PATH_NOT_FOUND 找不到指定路径
  • ERROR_BAD_FORMAT .exe文件无效
  • SE_ERR_ACCESSDENIED 拒绝访问指定文件
  • SE_ERR_ASSOCINCOMPLETE 文件名关联无效或不完整
  • SE_ERR_DDEBUSY DDE事务正在处理,DDE事务无法完成
  • SE_ERR_DDEFAIL DDE事务失败
  • SE_ERR_DDETIMEOUT 请求超时,无法完成DDE事务请求
  • SE_ERR_DLLNOTFOUND 未找到指定dll
  • SE_ERR_FNF 未找到指定文件
  • SE_ERR_NOASSOC 未找到与给的文件拓展名关联的应用程序,比如打印不可打印的文件等
  • SE_ERR_OOM 内存不足,无法完成操作
  • SE_ERR_PNF 未找到指定路径
  • SE_ERR_SHARE 发生共享冲突

怎样打开一个网页?

假设将FileName參数设置为http:协议格式,那么该函数将打开默认浏览器并链接到指定的URL地址。

若用户机器中安装了多个浏览器,则该函数将依据Windows 9x/NT注冊表中http协议处理程序(Protocols Handler)的设置确定启动哪个浏览器。

如:ShellExecute(handle,L"open",L" http://www.neu.edu.cn", NULL, NULL, SW_SHOWNORMAL);ShellExecute()函数在HKEY_CLASSES_ROOT\http\shell\open\command下进行搜索。默认浏览器在注冊表HKEY_CLASSES_ROOT\.htm键下的Default设置。

怎样激活相关程序,发送EMAIL?

假设将FileName參数设置为mailto:协议格式,那么该函数将启动默认邮件客户程序,如Microsoft Outlook(也包含Microsoft Outlook Express)或Netscape Messanger。若用户机器中安装了多个邮件客户程序,则该函数将依据Windows 9x/NT注冊表中mailto协议处理程序的设置确定启动哪个邮件客户程序。mailto:用户账号@邮件server地址?subject=邮件主题&body=邮件正文;

如:ShellExecute(handle,L"open",L"mailto:who@mail.neu.edu.cn?subject=Hello&Body=This is a test", NULL,NULL, SW_SHOWNORMAL);

打开新邮件窗体,并自己主动填入收件人地址、邮件主题和邮件正文。若邮件正文包含多行文本,则必须在每行文本之间增加换行转义字符%0a。ShellExecute()函数在HKEY_CLASSES_ROOT\mailto\shell\open\command下搜索。

怎样打开一个程序?

ShellExecute(NULL,L"open",L"notepad.exe",  L"c:\\MyLog.log", NULL, SW_SHOW );

怎样用系统打印机打印文档?

ShellExecute(NULL,L"print", L"c:\\abc.txt",NULL, NULL, SW_HIDE); 

怎样用系统查找功能来查找指定文件?

ShellExecute(NULL,L"find",L"d:\\nish",  NULL, NULL, SW_SHOW);

怎样启动一个程序,直到它执行结束?

        SHELLEXECUTEINFO ShExecInfo = {0};
        ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
        ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
        ShExecInfo.hwnd = NULL;
        ShExecInfo.lpVerb = NULL;
        ShExecInfo.lpFile =L"c:\\MyProgram.exe";
        ShExecInfo.lpParameters = NULL;
        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(L"c:\\winnt\\notepad.exe", NULL, NULL,NULL,FALSE,0,NULL, NULL,&StartupInfo,&ProcessInfo))
             WaitForSingleObject(ProcessInfo.hProcess,INFINITE);
             CloseHandle(ProcessInfo.hThread);
             CloseHandle(ProcessInfo.hProcess);
             MessageBox(NULL,L"The process could not be started",NULL,NULL);

怎样显示文件或目录的属性?

        SHELLEXECUTEINFO ShExecInfo ={0};
        ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
        ShExecInfo.fMask = SEE_MASK_INVOKEIDLIST ;
        ShExecInfo.hwnd = NULL;
        ShExecInfo.lpVerb = L"properties";
        ShExecInfo.lpFile = L"c:\\"; //can be a file as well
        ShExecInfo.lpParameters = NULL;
        ShExecInfo.lpDirectory = NULL;
        ShExecInfo.nShow = SW_SHOW;
        ShExecInfo.hInstApp = NULL;
        ShellExecuteEx(&ShExecInfo);
    int ret = (int)ShellExecute(NULL, _T("open"), _T("Dbgview.exe"), NULL, NULL, SW_NORMAL);//打开exe
    if (ret < 32)//检测是否指定成功
        MessageBox(_T("ERROR"));
    ret = (int)ShellExecute(NULL, _T("open"), _T("help.pdf"), NULL, NULL, SW_NORMAL);//打开指定文件,将调用默认处理的程序打开
    if (ret < 32)
        MessageBox(_T("ERROR"));
    ret = (int)ShellExecute(NULL, _T("open"), _T("https://www.baidu.com"), NULL, NULL, SW_NORMAL);//打开网址
    if (ret < 32)
        MessageBox(_T("ERROR"));
    ret = (int)ShellExecute(NULL, _T("open"), _T("c:\\windows"), NULL, NULL, SW_NORMAL);//打开文件夹
    if (ret < 32)
        MessageBox(_T("ERROR"));
    ret = (int)ShellExecute(NULL, _T("runas"), _T("cmd.exe"), NULL, NULL, SW_NORMAL);//请求管理员权限打开cmd
    if (ret < 32)
        MessageBox(_T("ERROR"));
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <shellapi.h>
int main(void)
	test01();
int test01()
	HINSTANCE hNewExe = ShellExecuteA(NULL, "open", "calc.exe", NULL, NULL, SW_SHOW);
	if ((DWORD)hNewExe <= 32)
		printf("return value:%d\n", (DWORD)hNewExe);
		printf("successed!\n");
	printf("GetLastError: %d\n", GetLastError());
	system("pause");
	return 1;
                    使用 ShellExecute 打开文件或执行程序可以使用 ShellExecute 打开文件或执行程序。原型:HINSTANCE ShellExecute(  _In_opt_ HWND    hwnd,//父窗口句柄或出错时显示错误父窗口的句柄,可以为 NULL  _In_opt_ LPCTSTR lpOperation,//操作  _In_     LPCTSTR ...
				
调用此命令打开系统文件目录窗口,有时不能置顶,是最小化在状态栏。如何才能置顶?ShellExecute(NULL, NULL, dirpath, NULL, NULL, SW_SHOWNORMAL); 你可以使用 SW_SHOWMAXIMIZED 或 SW_MAXIMIZE 替换 SW_SHOWNORMAL 以最大化文件目录窗口。例如: ShellExecute(NULL, NULL, dirpath, NULL, NULL, SW_SHOWMAXIMIZED); ShellExecute(NU
<br />1.  ShellExecute函数功能:<br />你可以给它任何文件的名字,它都能识别出来并打开它。<br /><br />2.ShellExecute函数原型:<br />HINSTANCE ShellExecute(<br />                           HWND hwnd, <br />                           LPCTSTR lpOperation,<br />                           LPCT
int a = 10; int b = (a++) + (++a) *3+ (--a) + (a++); printf("%d\n", b);??? 此方法不规范,答案取决于不同的编译器。(但是VS编译器得出的答案,鄙人计算不出来) 2、运算符表:
前天课设(C++环境),里面有这么一个要求,在接收到文件后程序自动打开文件显示,开始我也是整了挺久,找了好多资料,最终发现调用ShellExecute这个函数就可以实现。 下面用一个简单的例子演示一下: #include<iostream> #include<stdio.h> #include<WinSock2.h> using namespace std; int main() { cout << "请输入文件路径:" << endl.
// 获取桌面路径 TCHAR desktopPath[MAX_PATH]; SHGetFolderPath(NULL, CSIDL_DESKTOPDIRECTORY, NULL, 0, desktopPath); // 要打开的文件名 const TCHAR* fileName = _T("example.txt"); // 拼接路径和文件名 TCHAR filePath[MAX_PATH]; _stprintf_s(filePath, _T("%s\\%s"), desktopPath, fileName); // 打开文件 ShellExecute(NULL, _T("open"), filePath, NULL, NULL, SW_SHOWNORMAL); return 0; 以上代码使用了 Windows API 中的 `SHGetFolderPath` 函数获取桌面路径,然后使用了 `ShellExecute` 函数打开指定文件。这里的 `example.txt` 是要打开的文件名,可以根据实际需要修改。