首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

用API函数创办了快捷方式,当打开时却出错,头疼

2013-01-06 
用API函数创建了快捷方式,当打开时却出错,头疼!各位大侠们,小弟找到了一段创建快捷方式的代码,通过运行,该

用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文件有多大?

热点排行