1 URLDownloadToFile函数
通过函数名字不难看出,该函数的功能为根据ULR将资源下载到指定文件。
1.1 参数介绍
HRESULT URLDownloadToFile(
LPUNKNOWN pCaller,
LPCTSTR szURL,
LPCTSTR szFileName,
_Reserved_ DWORD dwReserved,
LPBINDSTATUSCALLBACK lpfnCB
);
(1)pCaller:指向调用方ActiveX组件的控制IUnknown接口的指针(如果调用者是ActiveX组件)。如果调用应用程序不是ActiveX组件,则可以将该值设置为NULL。
(2)szURL:指向包含要下载的URL的字符串值的指针。不能设置为NULL。如果URL无效,则返回INET_E_DOWNLOAD_FAILURE。
(3)szFileName:指向一个字符串值的指针,该字符串值包含要为下载创建的文件的名称或完整路径。如果szFileName包含路径,则目标目录必须已经存在。
(4)dwReserved:保留位,必须设置为0。
(5)lpfnCB:指向调用者的IBindStatusCallback接口的指针。通过使用IBindStatusCallback :: OnProgress,调用者可以接收下载状态。URLDownloadToFile在收到数据时调用IBindStatusCallback :: OnProgress和IBindStatusCallback :: OnDataAvailable方法。下载操作可以通过从任何回调返回 E_ABORT 来取消。如果不需要状态,可以将此参数设置为NULL。
1.2 返回值
该函数可以返回这些值之一。
返回码 | 描述 |
---|---|
S_OK | 下载成功开始。 |
E_OUTOFMEMORY | 缓冲区长度无效,或内存不足,无法完成操作。 |
INET_E_DOWNLOAD_FAILURE | 指定的资源或回调接口无效。 |
1.3 函数应用
#include <windows.h>
#pragma comment(lib, "urlmon.lib")
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
/*
/ 下载文件
*/
HRESULT lRet = URLDownloadToFile(NULL, "https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png", "E:\\Project\\04_test\\456.png", 0, NULL);
if(lRet == S_OK)
{
MessageBox(NULL, "下载成功!", "tip", MB_OK);
}
else
{
MessageBox(NULL, "下载失败!", "tip", MB_OK);
}
return 0;
}
2 ShellExecuteEx函数
该函数的功能是启动某个指定的应用程序。
2.1 参数介绍
BOOL ShellExecuteEx(
SHELLEXECUTEINFO *pExecInfo
);
(1)pExecInfo:指向SHELLEXECUTEINFO结构的指针,该结构包含并接收有关正在执行的应用程序的信息。
typedef struct _SHELLEXECUTEINFO {
DWORD cbSize;
ULONG fMask;
HWND hwnd;
LPCSTR lpVerb;
LPCSTR lpFile;
LPCSTR lpParameters;
LPCSTR lpDirectory;
int nShow;
HINSTANCE hInstApp;
void *lpIDList;
LPCSTR lpClass;
HKEY hkeyClass;
DWORD dwHotKey;
union {
HANDLE hIcon;
HANDLE hMonitor;
} DUMMYUNIONNAME;
HANDLE hProcess;
} SHELLEXECUTEINFO, *LPSHELLEXECUTEINFO;
结构体中参数的定义详见:https://docs.microsoft.com/en-us/windows/win32/api/shellapi/ns-shellapi-shellexecuteinfoa
2.2 返回值
成功返回TRUE,失败返回FLASE。
2.3 函数应用
#include <windows.h>
#pragma comment(lib, "urlmon.lib")
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
/*
/ 执行程序
*/
SHELLEXECUTEINFO seInfo = {0};
seInfo.cbSize = sizeof(SHELLEXECUTEINFO);
seInfo.lpVerb = "open";
seInfo.lpFile = "E:\\Project\\04_test\\456.png";
BOOL bRet = ShellExecuteEx(&seInfo);
if(bRet == TRUE)
{
MessageBox(NULL, "打开成功!", "tip", MB_OK);
}
else
{
MessageBox(NULL, "打开失败!", "tip", MB_OK);
}
return 0;
}