把这个函数复制到自己的工程中:使用中注意LPSTR和CStirng的转换,LPSTR就是CString的buffer。
比如:CString str = "123";
LPSTR lp = str.GetBuffer(255);
BOOL CMyDialog::ShortcutCreateProgramLink(LPSTR szPath,//要创建的应用程序的路径
LPSTR szLink)//快捷方式的名称,要以(*.lnk)结尾,比如"myexe.lnk"
{
HRESULT hres;
IShellLink*psl;
IPersistFile*ppf;
WORD wsz[_MAX_PATH];
CoInitialize(0); // 初始化应用环境
//创建一个IShellLink实例
hres=CoCreateInstance(CLSID_ShellLink,NULL, CLSCTX_INPROC_SERVER,IID_IShellLink,(void**)&psl);
if(FAILED(hres)){CoUninitialize(); return FALSE;}
//设置目标应用程序
psl->SetPath(szPath);
//设置快捷键(此处设为Shift+Ctrl+'A')
//psl->SetHotkey(MAKEWORD('A', HOTKEYF_SHIFT|HOTKEYF_CONTROL));
psl->SetDescription("Delta Language tool for sycon.net.");
char sPath[_MAX_PATH]; lstrcpy(sPath, szPath);
lstrcpy(strrchr(sPath,'\\'), "\\");
psl->SetWorkingDirectory((LPSTR)sPath);
//psl->SetRelativePath((LPCSTR)sPath,0);
//从IShellLink获取其IPersistFile接口
//用于保存快捷方式的数据文件(*.lnk)
hres=psl->QueryInterface(IID_IPersistFile, (void**)&ppf);
if(FAILED(hres)){CoUninitialize(); return FALSE;}
//确保数据文件名为ANSI格式
MultiByteToWideChar(CP_ACP,0,szLink,-1, wsz,_MAX_PATH);
//调用IPersistFile::Save
//保存快捷方式的数据文件(*.lnk)
hres=ppf->Save(wsz,STGM_READWRITE);
//释放IPersistFile和IShellLink接口
ppf->Release();
psl->Release();
CoUninitialize();
return TRUE;
}
使用方法:比如要创建一个MyEXE.exe的桌面快捷方式
//创建桌面快捷方式
CString soucrPath; //应用程序的路径
sourcePath = "C:\\MyEXE.exe";
CString str;
TCHAR path[255];
SHGetSpecialFolderPath(0,path,0,0); //获得桌面路径 关于这个函数,这里有解释:http://blog.youkuaiyun.com/zengweicdut/article/details/8927576
str = (CString)path;
str += "\\MyEXE.exe";
ShortcutCreateProgramLink(sourcePath.GetBuffer(255),str.GetBuffer(255));
tempTargetPath.ReleaseBuffer();
str.ReleaseBuffer();