生成——桌面快捷方式,用IshellLink接口时需要 调用什么*.dcu 单元文件?还有一个问题,和上面的差不多,怎么样才能知道,程序需要哪个*.dcu 文件。

解决方案 »

  1.   

    多谢"Drate"和“SYSU”
    第二个问题,怎么才能知道程序需要调用哪个 *.dcu文件,也就是API封装问题。
    难道只能经验积累吗?!!
      

  2.   

    不是了,一般来说,如果是调用API的话,那就用SHELLAPI
    如果是SHELL或是COM的话,则用COMOBJ,SHLOBJ
    其它的VCL的话,在DELPHI的帮助中是有说明的,它属于哪个DCU文件
      

  3.   

    一般可以查微软的MSDN,里面有说明是在哪个头文件里的(比如Shellapi.h),Delphi一般就用它的名字做单元名(比如Shellapi.pas)。
      

  4.   

    var
    tmpObject : IUnknown;
    tmpSLink : IShellLink;
    tmpPFile : IPersistFile;
    PIDL : PItemIDList;
    StartupDirectory : array[0..MAX_PATH] of Char;
    StartupFilename : String;
    LinkFilename : WideString;
    begin
    StartupFilename := 'c:\windows\notepad.exe';
    tmpObject := CreateComObject(CLSID_ShellLink);//创建建立快捷方式的外壳扩展
    tmpSLink := tmpObject as IShellLink;//取得接口
    tmpPFile := tmpObject as IPersistFile;//用来储存*.lnk文件的接口
    tmpSLink.SetPath(pChar(StartupFilename));//设定notepad.exe所在路径
    tmpSLink.SetWorkingDirectory(pChar(ExtractFilePath(StartupFilename)));//设定工作目录
    SHGetSpecialFolderLocation(0,
    CSIDL_DESKTOPDIRECTORY,
    PIDL);//获得桌面的Itemidlist
    SHGetPathFromIDList(PIDL,
    StartupDirectory);//获得桌面路径
    LinkFilename := StartupDirectory + '\zw.lnk';
    tmpPFile.Save(pWChar(LinkFilename),FALSE);//保存*.lnk文件
    end;end.
      

  5.   

    WWWWA(aaaa)
    谢谢了!我也有这段代码,可是编译时好像需要*。dcu文件,你编译通过了吗?
      

  6.   

    我已通过,可正常运行,需要什么dcu文件,贴出来看一下。
      

  7.   

    tmpPFile : IPersistFile;
    错误好像出在这里!!真弄不懂你怎么通过的!!
    把全部都帖出来
      

  8.   

    USES shlobj,comobj,activex, StdCtrls;
    没有加入activex。
      

  9.   

    我来终结我的帖子吧!
    USES shlobj,comobj,activex, StdCtrls;
    是需要加的!!给份了!!谢谢大家!