打印本文 打印本文 关闭窗口 关闭窗口
在Delphi中操作快捷方式
作者:武汉SEO闵涛  文章来源:敏韬网  点击数2694  更新时间:2009/4/23 18:26:10  文章录入:mintao  责任编辑:mintao
sp;  psl.SetRelativePath(info.RelativePath,0);

           psl.SetWorkingDirectory(info.WorkDirectory);

           result:=succeeded(psl.Resolve(0,SLR_UPDATE));

         end

         else

         begin

           psl.GetPath(info.FileName,MAX_PATH, wfd,SLGP_SHORTPATH );

           psl.GetIconLocation(info.IconLocation,MAX_PATH,info.IconIndex);

           psl.GetWorkingDirectory(info.WorkDirectory,MAX_PATH);

           psl.GetDescription(info.Description,CCH_MAXNAME);

           psl.GetArguments(info.Arguments,MAX_PATH);

           psl.GetHotkey(info.HotKey);

           psl.GetIDList(info.ItemIDList);

           psl.GetShowCmd(info.ShowState);

           result:=true;

         end;

       end;

     end;

   end;

end;

 finally

 freemem(buf);

 end;

end;

  2)建立快捷方式函数CreateLinkFile

说明:第一个参数为一个LINK_FILE_INFO结构,你必须进行初始化,第二个参数为要保存快捷方式的文件名,默认为相同目录下的同名的LNK文件。

原型:

function CreateLinkFile(const info:LINK_FILE_INFO;const DestFileName:string=''''''''):boolean;

var

 anobj:IUnknown;

 shlink:IShellLink;

 pFile:IPersistFile;

 wFileName:widestring;

begin

 wFileName:=destfilename;

 anobj:=CreateComObject(CLSID_SHELLLINK);

 shlink:=anobj as IShellLink;

 pFile:=anobj as IPersistFile;

 shlink.SetPath(info.FileName);

 shlink.SetWorkingDirectory(info.WorkDirectory);

 shlink.SetDescription(info.Description);

 shlink.SetArguments(info.Arguments);

 shlink.SetIconLocation(info.IconLocation,info.IconIndex);

 shlink.SetHotkey(info.HotKey);

 shlink.SetShowCmd(info.ShowState);

 shlink.SetRelativePath(info.RelativePath,0);

 if DestFileName='''''''' then

  wFileName:=ChangeFileExt(info.FileName,''''lnk'''');

 result:=succeeded(pFile.Save(pwchar(wFileName),false));

end;

 

3)函数ShortCutToString用于将快捷方式中的热键转化成字符串,以便于显示,Delphi本身没有提供将相关的函数。

function ShortCutToString(const HotKey:word):string;

var

 shift:tshiftstate;

begin

  shift:=[];

  if ((wordrec(HotKey).hi shr 0) and 1)<>0 then

     include(shift,ssshift);

  if ((wordrec(HotKey).hi shr 1) and 1)<>0 then

     include(shift,ssctrl);

  if ((wordrec(HotKey).hi shr 2) and 1)<>0 then

     include(shift,ssalt);

  result:=shortcuttotext(shortcut(wordrec(hotkey).lo,shift));

end;

 

4.         调用实例:

  新建一个Application,在窗体上放置一个OpenDialog,三个Button,一个Edit,设置OpenDialog的属性Option部分的ofNoDereferenceLinks为true,Filter属性为lnk file|*.lnk;然后为Button1、Button2和Button3分别添加如下代码(注意修改相应的文件名称和路径):

procedure TForm1.Button1Click(Sender: TObject);

var

info:LINK_FILE_INFO;

begin

if opendialog1.Execute then

 if LinkFileInfo(opendialog1.FileName,info) then

  begin  showmessage(''''FileName:''''+info.filename+#13+''''Description:''''+info.Description+#13+''''IconFilename:''''+info.IconLocation+'''',''''+inttostr(info.IconIndex)+#13+''''WorkDir:''''+info.WorkDirectory+#13+''''Arguments:''''+info.Arguments+#13+''''ShorCuts:''''+shortcuttostring(info.HotKey)+#13+''''WindowState:''''+inttostr(info.ShowState)+#13+''''ItemIDList:(''''+inttostr(info.itemidlist.mkid.cb)+'''',(''''+inttostr(info.itemidlist.mkid.abid[0])+''''))'''');

  info.WorkDirectory:=edit1.text;

linkfileinfo(opendialog1.filename,info,true);

  end;

end;

 

procedure TForm1.Button2Click(Sender: TObject);

begin

shellexecute(handle,''''open'''',''''start.exe'''',''''c:\windows\desktop\aaa.lnk'''','''''''',sw_hide);

end;

 

procedure TForm1.Button3Click(Sender: TObject);

var

上一页  [1] [2] [3]  下一页

打印本文 打印本文 关闭窗口 关闭窗口