用API函数创建了快捷方式,当打开时却出错,头疼!
各位大侠们,小弟找到了一段创建快捷方式的代码,通过运行,该代码也能创建快捷方式至桌面,但是当打开时却出问题了,连不上数据库了,感觉不是创建的快捷方式,而是直接把文件复制到桌面了,原来程序应有的连接都出错了。 请各位大侠们看看,帮小弟找出原因并指正。谢谢!
创建快捷方式代码:
String name;
name = GetCurrentDir()+"\\Project.exe"; //文件快捷创建的文件名(赋值的方式)
if(FAILED(CoInitialize(NULL)))
{
MessageBox(Handle,"COM初始化失败","信息提示",MB_OK);
return;
}
AnsiString StrFileName=name;
int CSIDLVALUE;
char Path[MAX_PATH+1];
AnsiString StrDestDir;
CSIDLVALUE=CSIDL_DESKTOPDIRECTORY;//"桌面文件夹";
LPITEMIDLIST pidl;
LPMALLOC pShellMalloc;
if(SUCCEEDED(SHGetMalloc(&pShellMalloc)))
if(SUCCEEDED(SHGetSpecialFolderLocation(NULL,CSIDLVALUE,&pidl)))
if(!SHGetPathFromIDList(pidl,Path))
{
MessageBox(Handle,"操作失败","提示信息",MB_OK);
return;
}
pShellMalloc->Free(pidl);
pShellMalloc->Release();
StrDestDir=Path;
StrDestDir+="\";
//&&&&&&&&&注意:&&&&&&&&&&&&&&&&&设定快捷方式的文件名&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
StrDestDir+="快捷方式"; //设定好创建快捷方式后的名字
StrDestDir+=".lnk";
IShellLink* psl;
if(SUCCEEDED( CoCreateInstance(CLSID_ShellLink,NULL,CLSCTX_INPROC_SERVER,IID_IShellLink,(LPVOID*) &psl)))
{
psl->SetPath(StrFileName.c_str());
IPersistFile* ppf;
if (SUCCEEDED(psl->QueryInterface( IID_IPersistFile, (LPVOID *) &ppf)))
{
WCHAR wsz[MAX_PATH];
MultiByteToWideChar(CP_THREAD_ACP, MB_PRECOMPOSED, StrDestDir.c_str(), -1, wsz,MAX_PATH);
if ( SUCCEEDED ( ppf->Save(wsz, TRUE) ) )
{
MessageBox(Handle,"创建快捷方式完成!","信息提示",MB_OK+MB_ICONWARNING);
}
ppf->Release();
return;
}
psl->Release();
}
MessageBox(Handle,"快捷方式创建失败!","信息提示",MB_OK+MB_ICONWARNING);
::CoUninitialize();
[解决办法]
http://topic.csdn.net/u/20090811/22/8ca09038-0f61-4ab2-b104-2dbcb4d80a59.html
看这个例子,注意有个trWorkingDir工作路径的参数
[解决办法]
psl->SetPath(StrFileName.c_str());
psl->SetWorkingDirectory(ExtractFilePath(Application->ExeName).c_str()); //加了这一句话,设置工作目录,也就是起始位置
[解决办法]
我来了。你看看创建的快捷方式的文件属性,这个.lnk文件有多大?