两个Windows下的API函数(热身篇)

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 :: OnProgressIBindStatusCallback :: OnDataAvailable方法。下载操作可以通过从任何回调返回 E_ABORT 来取消。如果不需要状态,可以将此参数设置为NULL

详见https://docs.microsoft.com/en-us/previous-versions/windows/internet-explorer/ie-developer/platform-apis/ms775123(v=vs.85)

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值