三、创建程序的快捷方式
1、创建快捷方式http://www.shengfang.org
在VC中,微软已经http://www.shengfang.org提供了这方面的COM接口:IshellLink,该类提供了对快捷方式的创建、修改等函数,我们需要引用该接口,进行自己需要的操作。
BOOL CreateLink(LPCSTR pszFile, LPCSTR pszLink)
PszFile:程序路径,例如“D:\PWIN98\ EXPLORER.EXE”;
pszLink:http://www.shengfang.org快捷方式路径,如果我们在DOS查看快捷方式,就可以发现它其实是一个 后缀名为“LNK”的文件,例如“C:\EXPLORER.LNK”。
现在说明函数主体:
{
CoInitialize(NULL);//初始化COM接口
HRESULT http://www.shengfang.org hres;
IShellLink *psl; /http://www.shengfang.org /定义一个ISHELLLINK对象
hres =http://www.shengfang.org CoCreateInstance (CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER,
IID_IShellLink, (void **)&psl); //创建实例
if (!SUCCEEDED (hres))//如果创建失败,返回
return FALSE;http://www.shengfang.org
IPersistFile *ppf;// 定义IpersistFile对象,用来保存ISHELLLINK对象
hres = psl->QueryInterface(IID_IPersistFile, (void **)&ppf);
//从ISHELLLINK对象中获得IpersistFile对象的接口。
if (!SUCCEEDED (hres))
{
psl->Release ();//释放ISHELLLINK对象
return FALSE;
}
hres = psl->SetPath (pszFile);
//使用ISHELLLINK的SETPATH方法设置快捷方式中的程序路径
WORD wsz [MAX_PATH]; // 定义Unicode字符串
MultiByteToWideChar (CP_ACP, 0, pszLink, -1, wsz, MAX_PATH);
// 确保快捷方式路径由ANSI字符组成
hres = ppf->Save (wsz, TRUE); //保存快捷方式
ppf->Release ();//释放IpersistFile对象
psl->Release ();//释放ISHELLLINK对象
return TRUE;
}
以上就是一个比较简单创建快捷方式的函数,更多细节请参考MSDN中的说明。
2、获得各种系统目录
只是能够创建快捷http://www.shengfang.org方式是不够的,我们还要将快捷方式创建到我们指定的位置当中,例如开始菜单、桌面以及IE快速启动栏,甚至启动程序组中。
为了获得这些特殊目录,我们必须使用SHGetSpecialFolderLocation函数,该函数需要三个参数:
HWND hwndOwner, http://www.shengfang.org母窗口的句柄;int nFolder, 指定的特殊目录;
LPITEMIDLIST *ppidl
以下是代码示例:
LPITEMIDLIST ppidl; //定义IDLIST指针
charlinkpath[255]; //定义字符串,保存目录名
获得桌面路径:
SHGetSpecialFolderLocation(NULL,0 ,&ppidl);
SHGetPathFromIDList(ppidl,linkpath);
获得程序组路径
SHGetSpecialFolderLocation(NULL,CSIDL_PROGRAMS ,&ppidl);
SHGetPathFromIDList(ppidl,linkpath);
获得启动程序项路径
SHGetSpecialFolderLocation(NULL,CSIDL_STARTUP ,&ppidl);
SHGetPathFromIDList(ppidl,linkpath);
获得IE快速启动栏路径
SHGetSpecialFolderLocation(NULL,CSIDL_APPDATA ,&ppidl);
SHGetPathFromIDList(ppidl,linkpath);
strcat(linkpath,"\Microsoft\Internet Explorer\Quick Launch");
如果我们改变SHGetSpecialFolderLocation函数中的nFolder参数,就可以获得不同的特殊目录,更多的信息请查看MSDN帮助。
以上代码在VC6,WIN98以及WIN2K下测试通过,至于其他的细节,例如设置标志,我们可以通过INI文件或者注册表进行,http://www.shengfang.org基本我们就可以实现一个简单的安装功能了。