Delphi中用于建立快捷方式的函数: CreateShortcut

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

uses
  ShlObj, ActiveX, ComObj; {该函数使用的单元}

{函数说明:}
{第一个参数是要建立快捷方式的文件, 这是必须的; 其他都是可选参数}
{第二个参数是快捷方式名称, 缺省使用参数一的文件名}
{第三个参数是指定目的文件夹, 缺省目的是桌面; 如果有第四个参数, 该参数将被忽略}
{第四个参数是用常数的方式指定目的文件夹; 该系列常数定义在 ShlObj 单元, CSIDL_ 打头}
function CreateShortcut(Exe:string; Lnk:string = ''; Dir:string = ''; ID:Integer = -1):Boolean;
var
  IObj: IUnknown;
  ILnk: IShellLink;
  IPFile: IPersistFile;
  PIDL: PItemIDList;
  InFolder: array[0..MAX_PATH] of Char;
  LinkFileName: WideString;
begin
  Result := False;
  if not FileExists(Exe) then Exit;
  if Lnk = '' then Lnk := ChangeFileExt(ExtractFileName(Exe), '');

  IObj := CreateComObject(CLSID_ShellLink);
  ILnk := IObj as IShellLink; ILnk.SetPath(PChar(Exe)); ILnk.SetWorkingDirectory(PChar(ExtractFilePath(Exe))); if (Dir = '') and (ID = -1) then ID := CSIDL_DESKTOP;
  if ID > -1 then
  begin
    SHGetSpecialFolderLocation(0, ID, PIDL);
    SHGetPathFromIDList(PIDL, InFolder);
    LinkFileName := Format('%s\%s.lnk', [InFolder, Lnk]);
  end else
  begin
    Dir := ExcludeTrailingPathDelimiter(Dir);
    if not DirectoryExists(Dir) then Exit;
    LinkFileName := Format('%s\%s.lnk', [Dir, Lnk]);
  end;

  IPFile := IObj as IPersistFile;
  if IPFile.Save(PWideChar(LinkFileName), False) = 0 then Result := True;
end; {CreateShortcut 函数结束}

{测试 1: 把当前程序在桌面上建立快捷方式}
procedure TForm1.Button1Click(Sender: TObject);
begin
  CreateShortcut(Application.ExeName);
end;

{测试 2: 在桌面上建立快捷方式, 同时指定快捷方式名称}
procedure TForm1.Button2Click(Sender: TObject);
begin
  CreateShortcut(Application.ExeName, 'NewLinkName');
end;

{测试 3: 在 C:\ 下建立快捷方式}
procedure TForm1.Button3Click(Sender: TObject);
begin
  CreateShortcut(Application.ExeName, '', 'C:\');
end;

{测试 3: 在开始菜单的程序文件夹下建立快捷方式}
procedure TForm1.Button4Click(Sender: TObject);
begin
  CreateShortcut(Application.ExeName, '', '', CSIDL_PROGRAMS);
end;

end.

时间: 2024-10-18 07:35:23

Delphi中用于建立快捷方式的函数: CreateShortcut的相关文章

Delphi中优秀的字符串分割函数

Delphi没有自己的字符串分割函数,所以只能程序员自己写了,网上搜了好多但是真正好用的没有几个. 下面这个是我在网上找到修改后了的,个人感觉算法不错,所以就贴了上来. function SplitString(Source, Deli: string ): TStringList;stdcall; var EndOfCurrentString: byte; StringList:TStringList; begin StringList:=TStringList.Create; while P

QTP中用于场景恢复的函数

在制作场景恢复的时候可以选择调用函数来解决,下面的函数就是为此写的.因为之前用的场景恢复只报错了,看报告后大概了解了Object.Method.Arguments.retVal等参数的意义,于是写了这个方法,一方面可以截图,另一方面可以在报告中看到哪个对象出问题了.因为我经常是通过公司的自动化平台调用测试案例,一般晚上或凌晨执行,第二天看结果,看结果的时候一般直接从QC打开报告查看,这样方便自己定位问题. 这个方法的作用我简单描述一下:首先是指定一个目录,然后检查是否从QC调用的(因为有时候自己

详解Delphi中用于读写的文件类型

一.旧pascal文件类型 用文件变量表示的文件类型,比如 F:text,F:File. 定义了三类:有类型,无类型,字符类型以及一些Delphi的文件操作函数.比如:AssignPrn,Writeln,这些文件类和Windows文件句柄不兼容 二.Windows文件句柄(handle) 面向对象的Pascal的文件句柄封装了Windows文件句柄类型,文件操作函数库则封装了Windows API函数,比如"Fileread"就是调用了Windows API数"ReadFil

C语言中用于产生随机数的函数使用方法总结_C 语言

在UNIX操作系统和window的操作系统上,我们知道有一个函数rand,它就是用来产生随机数的函数API接口,那么它的原理如何实现? 如果约定a1=f(seed),an+1=f(an),那么可以得到一个序列a1,a2,a3..an,那么要制作一个伪随机函数rand,只需要让它每调用一次就返回序列的下一个元素就行.其实就是相当于第1次调用rand返回a1,第2次返回a2,-,第n次返回an,这样每次返回的数值都不一样,也就是相当于随机数了.但是其实不是真正的随机数,真正的随机数是使用物理现象产生

在delphi中如何动态建立类的实例

本文为原创,如需转载,请注明作者和出处,谢谢!     在面向对象语言中,用两种方法建立类的实例:静态建立和动态建立.静态建立就是在程序中显式地建立类的实例,如c1 = TClass1.Create().而动态建立是在只知道类名的前题下建立类的实例.动态建立在实现上要比静态建立更灵活,因为动态建立无需引用被建立 类,并且更容易实现如多态等面向对象特性. 一.    动态建立类的实例 在delphi中动态建立类的实例可分为4步. 1. 声明一个从TPersistent继承的类.因为在注册类时要求必

在Delphi中调用.Net编写的DLL中的函数

最近因公司群发邮件程式需要给注册一段时间没有激活的用户发激活邮件,邮件中有注册密码 需要还原发给用户 但由于密码加密是用C# 中的TripleDES完成,手头上又没有现成Delphi的实现.时间紧急,现翻译是来不及了,于是经过查资料反复实施 终于成功实现在Delphi中调用 C# 封装的DLL中的方法(Function)和过程(Procedure)现把实施步骤写下,以供有需要的XDJM分享: 1.建立:DotNetFunc.cs 封装要使用的Function.Procedure. 2.生成密钥文

DELPHI中利用API函数实现多态FORM

实现异型FORM并不是一件难事,本文将向您介绍如何利用API函数实现圆角矩 形和椭圆形FORM,并在此基础之上探讨实现TWINcontrol类的后裔的异型的实现 . 欲改变FORM的形状,也就是实现对区域(region)的控制.在Win32 API程序 参考手册有关区域(region)的定义是这样描述的:它可以是一个矩形,多边形 ,椭圆形(或者是两者的复合,或者是更多的形状),这些都可以被填充,画图 ,翻转,结构化并可以得到焦点执行. 由定义得出结论:区域(region)是可以被改变和操纵的,依

Delphi中的SendKeys函数

用过Visual Basic等编程语言的朋友们一定对其SendKeys函数非常熟悉.利用该函数可以把一个字符串发送到目标窗口(比如记事本)或控件(比如一个Edit控件)中,就好像是在目标窗口或控件中输入这个字符串一样. 但是,在Delphi中却没有为我们提供这样的函数.其实,Borland的工程师们早就提供了一个方便的方法:在Delphi5.0企业版的安装盘的\info\Extras\SendKeys\文件夹中,有一个sndKey32.Pas文件, 只需把该文件复制到Delphi的安装目录下\L

delphi中move()函数用c#如何写

问题描述 delphi中move()函数用c#如何写,请各位帮忙看下 解决方案 解决方案二:请大家赶快瞅瞅,谢谢,急!解决方案三:Marshal.Copy 解决方案四:谢谢!解决方案五:能不能举个例子?谢谢