以下示例中的CreateLink功能创建快捷方式。参数包括指向要链接的文件的名称的指针,指向要创建的快捷方式的名称的指针,以及指向链接描述的指针。描述由字符串“【文件名】的快捷方式”组成,其中【文件名】是要链接的文件的名称。
因为CreateLink调用CoCreateInstance函数,所以假设已经调用了CoInitialize函数。CreateLink使用IPersistFile界面保存快捷方式和IShellLink界面来存储文件名和描述。
// CreateLink - 使用shell的IShellLink和IPersistFile接口
//创建并存储指定对象的快捷方式。
//返回调用接口成员函数的结果。
// lpszPathObj - 包含对象路径的缓冲区的地址
// lpszPathLink - 包含路径的缓冲区的地址
// shell链接被存储
// lpszDesc - 包含描述的缓冲区的地址
// Set the path to the shortcut target, and add the
HRESULT CreateLink(LPCSTR lpszPathObj,
LPSTR lpszPathLink,LPSTR lpszDesc)
{
HRESULT hres;
IShellLink* psl;
//获取指向IShellLink界面的指针。
hres = CoCreateInstance(&CLSID_ShellLink, NULL,
CLSCTX_INPROC_SERVER, &IID_IShellLink, &psl);
if(SUCCEEDED(hres)){
IPersistFile* ppf;
//设置快捷目标的路径,并添加
// description。
psl->lpVtbl->SetPath(psl, lpszPathObj);
psl->lpVtbl->SetDescription(psl, lpszDesc);
//查询用于保存IPersistFile界面的IShellLink
//持久存储中的快捷方式。
hres = psl->lpVtbl->QueryInterface(psl, &IID_IPersistFile,
&ppf);
if(SUCCEEDED(hres)){
WORD wsz[MAX_PATH];
//确保字符串为ANSI。
MultiByteToWideChar(CP_ACP,0,lpszPathLink,-1,
wsz, MAX_PATH);
//通过调用IPersistFile :: Save保存链接。
hres = ppf->lpVtbl->Save(ppf, wsz, TRUE);
ppf->lpVtbl->Release(ppf);
}
psl->lpVtbl->Release(psl);
}
return hres;
}