`
qzriso
  • 浏览: 236450 次
  • 性别: Icon_minigender_1
  • 来自: ph
社区版块
存档分类
最新评论

Delphi编程实现程序快捷方式

阅读更多

摘要:本文主要介绍了用Delphi编程实现程序的快捷方式的方法,其中主要讨论了Delphi中COM编程的方法、快捷方式的实现方法,并给出了一个实例程序。
关键词:COM编程,快捷方式

Windows系统提供了快捷方式来简化用户对应用程序的执行,尽量使得用户不与应用程序的具体位置挂上关系,大大方便了用户的操作。所以,在Windows系统下,大多安装程序一般都提供创建程序组和快捷方式。但,你有没有想过,快捷方式是如何实现的呢?
下面,我就和大家来讨论一下关于快捷方式编程实现的原理,并给大家一个具体的示例程序。

一、    编程原理
1、首先找到快捷方式的存放位置,创建程序组。
在Windows系统下,所谓的程序组就是文件夹,只是这些文件夹的存放位置比较特殊罢了,一般存放在“D:\Documents and Settings\All Users.WINNT\「开始」菜单\程序”文件夹(在Windows2000下),你可以打开这个文件夹,是不是可以看到那些以前只能在“开始-程序”中才能看到的项目?!所以,必须首先得到快捷方式的存放位置,要解决这个问题,可以有两种解决方法。
第一、通过Windows2000下的一个API函数来实现:
HRESULT SHGetSpecialFolderLocation(;
    HWND hwndOwner,
    int nFolder,
    LPITEMIDLIST *ppidl   
   );
第二、通过注册表来实现,打开注册表,然后依次打开“HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders”,可以找到比如“开始菜单”、“程序”等文件夹的存放位置。
明白了程序组就是文件夹,要建立程序组就非常简单了,只要在找到的“程序”这个文件夹的位置中创建一个以“程序组”命名的文件夹就可以了。比如,我们把找到的“程序”所在的文件夹存放在Directory中,而程序组的名称保存在GroupName中,下面的代码可以实现在“程序”文件夹中创建“程序组”:
Directory := Reg.ReadString('Programs');
SubDir:= Directory+'\'+GroupName;
CreateDir(SubDir);
一般的应用程序都会通过API函数来实现,在本例中,我们通过第二种方法来实现。
2、创建快捷方式
解决了前面的两个小问题,我们再来看如何具体实现快捷方式的创建。如果你经常编写程序,可能会想到利用API函数来实现,不幸的是,你在API函数中找不到创建快捷方式的相应函数,因为这个功能需要用COM来实现。一些人可能会对COM编程感到陌生与恐惧,实际上,COM编程并不复杂,你不需要太了解COM就可以很好地使用它。
Windows提供了一个COM接口IshellLink,它能够帮助我们创建、修改、删除快捷方式。要使用COM接口提供的功能,必须首先调用CreateCOMObject函数创建一个接口的实例,Delphi提供了创建COM的一个基类Iunknown,具体的示例程序如下:
var
  MyObject : IUnknown; //IUnknown是COM的基类
  MySLink : IShellLink;  //用于创建快捷方式的对象
MyObject := CreateCOMObject(CLSID_ShellLink);
MySLink := MyObject as IShellLink;
创建实例后,通过调用SetPath()方法设置快捷方式指向的源程序的路径,快捷方式的存储位置应该是:“程序”的位置+程序组名称+快捷方式名称+扩展名.lnk;通过SetDescription()方法设置快捷方式的描述,当然你还可以调用比如SetHotKey()等方法设置热键、显示的图标(默认为实际程序的图标)等。实际上这个接口功能远不止这些,限于篇幅,直接略过。
设置完成的快捷方式并没有保存到磁盘上,还必须通过IpersistFile对象的Save()方法来实现。如下面的代码:
MyPFIle := MyObject as IPersistFile;
MyPFile.Save(PWChar(WFileName),True);
需要注意的是:快捷方式应该使用Unicode存储,所以必须调用PWChar()函数将其转换。

二、编程示例
下面,让我们用Delphi6来编程实现一个简单的示例程序。程序的功能如下:你可以在窗口的三个文本框中输入源程序的位置(也可以通过浏览按钮来实现)、程序组名称和快捷方式名称,通过下拉框来选择快捷方式的存放位置,单击“创建”按钮可以创建程序组和快捷方式了。是不是很酷?心动不如行动,让我们一步一步来实现。
1、    启动Delphi6.0,打开一个新的标准工程。在窗体中添加所需的控件。
首先向窗体中添加四个Label对象、三个Edit对象、一个下拉框对象ComboBox1、三个Button对象和一个OpenDialog对象。依次设置其相关属性等,调整后的窗体界面如图1所示。

2、    向Tform1对象中新增一个函数:
    function CreateShortcut(SourceFileName : string;  //源程序的位置
    ShortcutName : string;    //快捷方式的名称
    ShortcutLocation : ShortcutType; //快捷方式的建立位置
    SubDirectory : string      //程序组的名称
):Boolean;
其中ShortcutType是程序中自定义的一个枚举类:
type
  ShortcutType=(_DESKTOP,  //桌面
                _STARTMENU, //开始菜单
                _PROGRAMS, //程序
                _STARTUP,  //启动
                _QUICKLAUNCH  //快速启动栏
                );
CreateShortcut()函数用于实现快捷方式和程序组的创建,如果创建成功,则返回一个真值(True),否则返回为假值(False)。这可是本文中最重要的代码段哟!
function TForm1.CreateShortcut(SourceFileName, ShortcutName: string;ShortcutLocation:ShortcutType; SubDirectory: string):boolean;
const
  REG_SHELLFOLDERS =
  'Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders';
var
  MyObject : IUnknown; //IUnknown是基本的COM类
  MySLink : IShellLink;  //用于创建快捷方式的对象
  MyPFile : IPersistFile; //用于保存快捷方式的对象
  SubDir,Directory,LinkName : string;
  WFileName : WideString;
  Reg : TRegistry;
begin
  Result:=False;
  MyObject := CreateCOMObject(CLSID_ShellLink); //建立快捷方式的COM对象
  MySLink := MyObject as IShellLink;
  MyPFIle := MyObject as IPersistFile;
  MySLink.SetPath(pchar(SourceFileName)); //设置快捷方式源文件的位置
  Reg := TRegistry.Create ;
  Reg.RootKey := HKEY_CURRENT_USER;
  try
    if Reg.OpenKey(REG_SHELLFOLDERS,false) then
    begin
      if SourceFileName<>'' then
        if ShortcutName <>'' then
           LinkName := ShortcutName
        else
           LinkName := ExtractFileName(SourceFileName)
      Else  //当源路径是一个空值时,实际它指向“我的电脑”
        LinkName := '我的电脑';

      MySLink.SetDescription(pchar(LinkName));  //设置快捷方式描述
      LinkName := ChangeFileExt(LinkName,'.lnk');  //修改扩展名
      //以下通过注册表得到快捷方式的实际建立位置
      case ShortcutLocation of
      _DESKTOP : Directory := Reg.ReadString('Desktop');
      _STARTMENU : Directory := Reg.ReadString('Startmenu');
      _PROGRAMS: Directory := Reg.ReadString('Programs');
      _STARTUP : Directory := Reg.ReadString('Startup');
      _QUICKLAUNCH:Directory:=Reg.ReadString('AppData')+
                        '\Microsoft\Internet Explorer\Quick Launch';  //快速启动栏的路径比较特殊
      end;
      if Directory <> '' then
      begin
        if SubDirectory <> '' then
        begin
          SubDir:=Directory + '\'+ SubDirectory;
          WFileName := SubDir + '\' + LinkName  ;
          if not CreateDir(SubDir) then  //创建目录失败
          begin
             Result:=false;
             Exit;
          end;
        end
        else
          WFileName := Directory + '\' + LinkName;
        if MyPFile.Save(PWChar(WFileName),True)<>S_OK then
        begin
          Result:=False;
          Exit;
        end
        else
          Result:=true;
       end
       else
         Result:=False;
      end;
    finally
      Reg.Free ; //释放空间
    end;
end;
3、    编写浏览文件按钮的代码,如下:
procedure TForm1.Button1Click(Sender: TObject);
begin
  if OpenDialog1.Execute then
     Edit1.Text := OpenDialog1.FileName ;
end;
4、    同样的步骤编写“退出”按钮的代码:
procedure TForm1.Button3Click(Sender: TObject);
begin
  Close;
end;
5、    下面是“创建”按钮的代码,直接调用我们建立的CreateShoutcut()函数来实现:
procedure TForm1.Button2Click(Sender: TObject);
var
  SLinkType : ShortcutType;
begin
  case ComboBox1.ItemIndex of
  0 : SLinkType := _DESKTOP;
  1 : SLinkType := _STARTMENU;
  2 : SLinkType := _PROGRAMS;
  3 : SLinkType := _STARTUP;
  4 : SLinkType := _QUICKLAUNCH;
  end;
  if CreateShortcut(Edit1.Text ,Edit3.Text ,SLinkType, Edit2.Text ) then
    Application.MessageBox(pchar('快捷方式创建成功!'),pchar('系统消息'),MB_OK)
  else
    Application.MessageBox(pchar('快捷方式创建失败!'),pchar('系统消息'),MB_OK);
end;
现在按下F9编译运行这个程序,你就可以试试创建快捷方式的效果了。程序的运行效果如图2:

当然,你还可以把程序修改后用于你的安装系统,实现个性化的安装程序,那种感觉一定酷毕了!
程序在Windows2000、Delphi6.0下编译通过。

分享到:
评论

相关推荐

    delphi创建快捷方式的方法.rar

    delphi创建程序快捷方式的方法,为自己的Delphi应用软件创建桌面快捷方式,带图标的快捷方式,在生成安装程序时,这是基本的功能,本源码演示了如何创建一个程序快捷图标,通过用户双击直接打开应用程序。...

    DELPHI专题文档-程序应用

    在Delphi编程中创建一个启动闪现窗口 如何用Delphi编ScreenSaver Delphi里如何计算日期 delphi怎样调用外部EXE文件 Win95/98下监控运行的其他程序 控制面板应用大全 避免一个程序二次运行 转换WINDOWS壁纸 ...

    DELPHI专题--程序应用

    在Delphi编程中创建一个启动闪现窗口 如何用Delphi编ScreenSaver Delphi里如何计算日期 delphi怎样调用外部EXE文件 Win95/98下监控运行的其他程序 控制面板应用大全 避免一个程序二次运行 转换WINDOWS壁纸 ...

    Delphi经典编程入门

    Delphi经典编程入门,Delphi是的可视化编程环境,为我们提供了一种方便、快捷的Windows应用程序开发工具。

    Delphi网络编程框架

    采用WebXone技术,可以用Delphi/CBuilder/VC等常用桌面应用程序工具快速开发出适用于网络的应用程序系统。 WebXone基于Delph/CBuilder/VC等成熟的开发平台,兼容绝大部分VCL控件,并采用统一的系统接口,可以快速...

    delphi经典编程入门

    delphi经典编程入门,Delphi是全新的可视化编程环境,为我们提供了一种方便、快捷的Windows应用程序开发工具。它使用了Microsoft Windows图形用户界面的许多先进特性和设计思想,采用了弹性可重复利用的完整的面向...

    Delphi 7.0编程实例五十讲-pdf版

    第二十讲 生成文件的快捷方式 第二十一讲 放大镜 第二十二讲 托盘程序 第二十三讲 禁止程序二次运行 第二十四讲 超级鼠标 第五篇多媒体程序设计 第二十五讲 CD播放器 第二十六讲 播放动画 第二十七讲 RealPlayer音频...

    delphi经典编程入门.chm

    delphi经典编程入门。Delphi是全新的可视化编程环境,提供了一种快捷的Windows应用程序开发工具。(chm无法显示内容时需在属性中“解除锁定”)

    DELPHI 5编程实例与技巧

    Delphi是由Inprise公司推出的面向对象的可视化软件开发工具。...快捷方式 428 16.6.23 在程序中运行其他程序 429 16.6.24 同时只运行程序的一个实例 429 16.6.25 关闭运行的其他应用程序 431 16.6.26 显示旋转字体 432

    delphi经典编程入门完美修正_单文件版.zip_delphi_delphi编程入门

    Delphi是全新的可视化编程环境,为我们提供了一种方便、快捷的Windows应用程序开发工具

    Delphi 5编程实例与技巧

    目 录 前言 第一部分 Delphi编程基础 第1章 Delphi集成开发...快捷方式 428 16.6.23 在程序中运行其他程序 429 16.6.24 同时只运行程序的一个实例 429 16.6.25 关闭运行的其他应用程序 431 16.6.26 显示旋转字体 432

    百例课堂.DELPHI.7编程入门篇

    百例课堂.DELPHI.7编程入门篇 目录 出版说明 前言 第1课 Delphi文件的新建与保存 实例1 创建一个名为“Project1”工程文件 第2课 Delphi的基本控件使用 实例2 制作文本显示程序 实例3 计算字符串长度程序设计 实例4...

    深入DELPHI核心编程

    Delphi是全新的可视化编程环境,为我们提供了一种方便、快捷的Windows应用程序开发工具。

    delphi数据库编程(图书管理系统)

    不错的delphi程序,利用sql数据库 附加数据库步骤 1)打开企业管理器,鼠标右键单击“数据库”选项,在弹出的快捷菜单中单击“所有任务”/“附加数据库”菜单项,打开附加数据库窗口。 2)单击“…”按钮,选择...

    用DELPHI实现文件加密压缩

    Delphi的全新可视化编程环境,为我们提供了一种方便、快捷的Windows应用程序开发工具。对于程序开发人员来讲,使用Delphi开发应用软件,无疑会大大地提高编程效率。在delphi中可以很方便的利用流实现文件处理、动态...

    delphi 5开发人员指南

    本书是美国资深Delphi 5程序开发者Steve Teixeira和Xavier Pacheco的最新力作,无论你是Delphi的初学者,还是富有经验的Delphic程序员,如果你想把自己的编程技巧提高一个层次,或者想了解Win32 API以及Delphi的某些...

    DELPHI 5开发人员指南

    本书是美国资深Delphi 5程序开发者Steve Teixeira和Xavier Pacheco的最新力作,无论你是Delphi的初学者,还是富有经验的Delphic程序员,如果你想把自己的编程技巧提高一个层次,或者想了解Win32 API以及Delphi的某些...

    Delphi实现保存最近打开的文件记录.rar

    Delphi实现保存最近打开的文件记录,这是个在软件使用中经常见到的功能,可以保存历史记录的DELPHI记忆窗体源程序,这在Windows中是比较常见的功能了,可把最近打开的文档的记录保存在打开菜单中,便于用户快捷打开...

Global site tag (gtag.js) - Google Analytics