请问一个关于创建快捷方式函数createshortcut的问题 ( 积分: 50 )

  • 主题发起人 主题发起人 yangweiabc
  • 开始时间 开始时间
Y

yangweiabc

Unregistered / Unconfirmed
GUEST, unregistred user!
请问有哪位大虾知道createshortcut函数原型是在哪个单元里面定义的?我怎么在所有的api函数手册上都找不到这个函数的原型呢??先送50分。
 
请问有哪位大虾知道createshortcut函数原型是在哪个单元里面定义的?我怎么在所有的api函数手册上都找不到这个函数的原型呢??先送50分。
 
uses &nbsp;ShlObj, ActiveX, ComObj;<br><br>//在桌面上建立快捷方式<br>Procedure CreateShortcut(piFileName : String; piLinkName : String);<br>var<br> &nbsp;tmpObject : IUnknown;<br> &nbsp;tmpSLink : IShellLink;<br> &nbsp;tmpPFile : IPersistFile;<br> &nbsp;PIDL : PItemIDList;<br> &nbsp;StartupDirectory : array[0..MAX_PATH] of Char;<br> &nbsp;StartupFilename : String;<br> &nbsp;LinkFilename : WideString;<br>begin<br> &nbsp;StartupFilename := piFileName;<br> &nbsp;tmpObject := CreateComObject(CLSID_ShellLink);//创建建立快捷方式的外壳扩展<br> &nbsp;tmpSLink := tmpObject as IShellLink;//取得接口<br> &nbsp;tmpPFile := tmpObject as IPersistFile;//用来储存*.lnk文件的接口<br> &nbsp;tmpSLink.SetPath(pChar(StartupFilename));//设定notepad.exe所在路径<br> &nbsp;tmpSLink.SetWorkingDirectory(pChar(ExtractFilePath(StartupFilename)));//设定工作目录<br> &nbsp;SHGetSpecialFolderLocation(0,<br> &nbsp;CSIDL_DESKTOPDIRECTORY,<br> &nbsp;PIDL);//获得桌面的Itemidlist<br> &nbsp;SHGetPathFromIDList(PIDL, StartupDirectory);//获得桌面路径<br> &nbsp;LinkFilename := StartupDirectory;<br> &nbsp;tmpPFile.Save(pWChar(LinkFilename + '/' + piLinkName + '.lnk'), FALSE);//保存*.lnk文件<br>End;
 
unit Unit1;<br><br>interface<br><br>uses<br> &nbsp;Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,<br> &nbsp;Dialogs;<br><br>type<br> &nbsp;TForm1 = class(TForm)<br> &nbsp; &nbsp;procedure FormCreate(Sender: TObject);<br> &nbsp;private<br> &nbsp; &nbsp;{ Private declarations }<br> &nbsp;public<br> &nbsp; &nbsp;{ Public declarations }<br> &nbsp;end;<br><br>var<br> &nbsp;Form1: TForm1;<br><br>implementation<br><br>{$R *.dfm}<br><br>uses ComObj, ShlObj, ActiveX;<br><br>//VERSION V1.0<br>//AUTHOR: (Jfyes)<br>//Remark : string to PwideChar<br>//CREATE DATE : 2004-8 / 2004-9<br>function StrToPWideChar(str: String): PWideChar;<br>var<br> &nbsp;pwc: PWideChar;<br>begin<br> &nbsp;GetMem(pwc, Length(str) * Sizeof(PwideChar) + 1);<br> &nbsp;result := StringToWideChar(str, pwc, Length(str) * SizeOf(WideChar) + 1);<br>end;<br><br>//建立快捷方式<br>procedure CreateSellLink(SourceName: string; targetName: string);<br>var<br>tmpObject : IUnknown;<br>tmpSLink : IShellLink;<br>tmpPFile : IPersistFile;<br>StartupFilename : String;<br>begin<br> &nbsp;StartupFilename := SourceName;<br> &nbsp;tmpObject := CreateComObject(CLSID_ShellLink);//创建建立快捷方式的外壳扩展<br> &nbsp;tmpSLink := tmpObject as IShellLink;//取得接口<br> &nbsp;tmpPFile := tmpObject as IPersistFile;//用来储存*.lnk文件的接口<br> &nbsp;tmpSLink.SetPath(pChar(StartupFilename));//设定notepad.exe所在路径<br> &nbsp;tmpSLink.SetWorkingDirectory(pChar(ExtractFilePath(StartupFilename)));//设定工作目录<br> &nbsp;tmpPFile.Save(StrToPWideChar(targetName), true);<br>end;<br><br>procedure TForm1.FormCreate(Sender: TObject);<br>begin<br> &nbsp;CreateSellLink(Application.ExeName,<br> &nbsp;'C:/Documents and Settings/Administrator/Application Data/Microsoft/Internet Explorer/Quick Launch/' + 'MyExe.lnk');<br>end;<br><br>end.
 
可是两位大虾,我在ComObj, ShlObj, ActiveX这三个dcu中均找不到createshortcut函数的原形啊。另外我碰到的createshortcut函数的原形是:<br>ShortcutType = (ST_DESKTOP, ST_SENDTO, ST_QUICKLAUNCH, ST_STARTMENU);<br> &nbsp; &nbsp;procedure CreateShortcut(FileName :string; Description :string;<br>  arguements :string; Location :ShortcutType);<br>  var<br>  cObj :IUnknown;<br>  sLink :IShellLink;<br>  pFile :IPersistFile;<br>  sDir :string;<br>  lName :string;<br>  spath :string;<br>  wFileName :WideString;<br>  mReg :TRegistry;<br>  key :string;<br>  tmp :string;<br>  begin<br>  cObj :=CreateComObject(CLSID_ShellLink); //创建COM对象<br>  sLink :=cObj as IShellLink; //COM对象转化为IShellLink型接口<br>  pFile :=cObj as IPersistFile; //COM对象转化为IPersistFile型接口<br><br>  //获取路径<br>  sPath :=ExtractFilePath(FileName);<br>  with sLink do begin<br>  SetPath(PChar(FileName)); //设置执行文件名<br>  SetArguments(PChar(arguements)); //设置执行参数<br>  SetDescription(Pchar(Description)); //设置描述信息<br>  SetWorkingDirectory(PChar(sPath)); //设置工作路径,即执行程序所在目录<br>  end;<br><br>  //获取各快捷方式的实际目录<br>  mReg :=TRegistry.Create;<br>  with mReg do begin<br>  RootKey :=HKEY_CURRENT_USER;<br><br>  key :=REGSTR_PATH_EXPLORER; //Delphi在单元RegStr中定义的常量<br>  tmp :=key + '/Shell Folders';<br>   <br><br>OpenKey(tmp, false);<br>  case Location of<br>  ST_DESKTOP: sDir :=ReadString('Desktop');<br>  ST_SENDTO: sDir :=ReadString('SendTo');<br>  ST_STARTMENU: sDir :=ReadString('Start Menu');<br>  ST_QUICKLAUNCH:<br>  begin<br>  sDir :=ReadString('AppData');<br>  sDir :=sDir + '/Microsoft/Internet Explorer/Quick Launch';<br>  end;<br>  end;<br>和你们俩的不一样,这是怎么回事啊?还有createshortcut函数是包括在哪个单元里面的啊?
 
createshortcut是用户自定义函数
 
真正的是调用Com对象做;<br><br>你说的那个名字估计是自定义过程、函数;<br><br>basic里可以看 shell 里的很多对象;<br><br>这里你可能导入 shell32.dll 后也会有很多.
 
还有没有更好一点的解释啊!
 
这个函数既不是Win32 API 函数,也不是VCL里面的服务例程,而是第三方的Raize Components 组件包(我用的是3.0,英文不是很好,不知道它是从哪个版本开始有这个函数的)里面提供的一个全局函数。如果你安装Raize Components 的时候是用它提供的安装程序来装的话,它会把自己的Help 链接到Delphi 的帮助系统里面,这样你就能用Delphi 的帮助系统查到它的信息。
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
915
SUNSTONE的Delphi笔记
S
后退
顶部