- 浏览: 242923 次
- 性别:
- 来自: ph
文章分类
最新评论
-
zrj_software:
说了等于没说,LZ能否把DLL代码给我研究下啊30729375 ...
如何在Delphi中调用.Net编写的DLL中的函数 -
reyesyang:
正在查找ruby单例模式相关资料,很有帮助,谢谢。
ruby中的单例模式 -
chaochao_pc:
您好,您的通讯工具能传输文件吗? 我在上边好像没找到!!! ...
Silverlight Socket 实现收发信息 -
huaxia524151:
谢谢,解决问题。return self.name.encode ...
Django笔记5(管理站点) -
yahon:
在flash中如何获取呢?
Flash+html--网页向FLASH传递参数
摘要:本文主要介绍了用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下编译通过。
发表评论
-
idftp几个简单函数
2010-10-08 11:00 24761 连接远程服务器procedure Connect(AAu ... -
用Delphi实现文件下载的几种方法
2010-10-08 10:23 1293笔者最近开发的系统中需要写一个下载文件的功能。以前用BCB调用 ... -
Delphi absolute关键字
2010-09-20 11:51 1160//它使得你能够创建一个新变量, 并且该变量的起始地址与另一个 ... -
如何在Delphi中调用.Net编写的DLL中的函数
2010-09-16 09:30 2223最近因公司群发邮件程式需要给注册一段时间没有激活的用户 ... -
WinAPI: SetLayeredWindowAttributes - 设置窗口的透明
2010-09-15 15:22 2010//声明:SetLayeredWindowAttributes ... -
Delphi 2010 中的泛型
2010-09-15 09:42 13192010已发布很长时间了,口碑还不错,准备用它开发下一项目,但 ... -
Delphi2010组件/控件安装方法
2010-09-14 09:36 1470delphi 有很多组件可以用,下面介绍一下 在delphi2 ... -
delphi利用SHBrowseForFolder选择目录
2010-08-02 09:41 2101要求:利用Win32 API SHBrowseForFolde ... -
Microsoft Agent技术简介
2009-11-12 11:33 1251Agent技术的应用 ---- Micr ... -
delphi对象序列化
2009-10-31 10:12 1222function ComponentToStr(ACompon ... -
Delphi屏蔽控件的默认右键菜单
2009-10-28 14:34 1847在很多情况下我们也许 ... -
基于Delphi的融合DLL中的窗体
2009-09-24 14:29 7324基于Delphi的融合DLL中的 ... -
delphi中的静态变量
2009-09-24 10:51 1500众所周知,java,vb,c和c++中都有静态变量,它们都在变 ... -
取得系统运行的进程名
2009-07-31 14:13 856var hCurrentWindow:HWnd;szText: ... -
获得消逝时间
2009-07-31 14:11 998在测试硬件或软件的效率时或跟踪用户的响应速度时,需要测定消逝的 ... -
使用Delphi获取系统信息
2009-07-31 14:05 992Delphi以其优良的可视化编程,灵活的Windows ... -
相对路径转化为绝对路径
2009-07-31 14:02 1328请先添加 ComObj, ComConst引用,以下是实现代码 ...
相关推荐
在Delphi编程环境中,创建桌面快捷方式是一种常见的需求,它能为用户提供方便的访问路径。通过在可执行文件(EXE)中嵌入相应的代码,我们可以实现这一功能。以下将详细解释如何在Delphi中创建桌面快捷方式以及相关...
在Delphi编程环境中,创建桌面快捷方式和设置应用程序开机自启动是常见的系统集成步骤,这有助于用户更加方便地访问和管理程序。以下将详细介绍如何通过Delphi实现这两个功能。 首先,我们来讨论如何创建桌面快捷...
delphi创建程序快捷方式的方法,为自己的Delphi应用软件创建桌面快捷方式,带图标的快捷方式,在生成安装程序时,这是基本的功能,本源码演示了如何创建一个程序快捷图标,通过用户双击直接打开应用程序。...
本实例程序是针对初学者设计的,旨在教会他们如何利用Delphi来实现程序的开机自启动以及在用户的桌面上创建快捷方式。 首先,我们来了解什么是开机自启动。开机自启动是指程序或服务在操作系统启动时自动运行。在...
在Delphi编程环境中,我们可以利用API函数来读取并处理这些信息。本教程主要围绕如何使用Delphi来读取快捷方式(.lnk)中的图标和路径信息进行详细讲解。 首先,我们需要了解两个关键的Windows API库:`Shell32.dll...
在Delphi编程环境中,创建和删除桌面快捷方式是常见的任务,尤其在开发系统工具或桌面应用时。Delphi提供了一套API接口和组件,使得开发者能够轻松地完成这些操作。以下将详细介绍如何在Delphi中实现桌面快捷方式的...
在Delphi编程环境中,创建桌面快捷方式是一项常见的任务,它能帮助用户快速访问应用程序或功能。下面我们将深入探讨如何利用Delphi的API函数来实现这一功能。 首先,我们需要理解快捷方式(Shortcut)在Windows操作...
通过这种方式,开发者可以充分利用Delphi的开发优势,构建高效稳定的后端服务,同时利用微信小程序的便利性,打造用户友好的移动端应用。这种结合不仅降低了开发成本,也提升了用户体验,是现代移动应用开发的一种...
在Delphi编程中,VCL(Visual Component Library)组件库是非常关键的一部分,它提供了大量的预定义组件,如按钮、表格、数据库连接组件等,大大简化了用户界面的设计和功能实现。书中可能详细介绍了如何使用这些...
在Delphi编程环境中,创建快捷方式是常见的需求,特别是在开发应用程序时,为了方便用户快速启动或访问程序,通常会在桌面、开始菜单等位置提供快捷方式。本教程将深入讲解如何利用Delphi的API函数和组件来实现快捷...
本主题聚焦于如何使用Delphi来创建Windows开始菜单程序组快捷方式,这是一个常见的软件安装过程中的功能,使得用户能够方便地从开始菜单启动程序。下面将详细阐述这一过程涉及的知识点。 首先,了解快捷方式的基本...
在Delphi编程中创建一个启动闪现窗口 如何用Delphi编ScreenSaver Delphi里如何计算日期 delphi怎样调用外部EXE文件 Win95/98下监控运行的其他程序 控制面板应用大全 避免一个程序二次运行 转换WINDOWS壁纸 ...
总的来说,利用Delphi开发Windows快捷方式读写器,不仅可以提升开发效率,还能充分利用其强大的Windows API支持,实现高效且稳定的系统级功能。通过深入学习和实践,你可以进一步掌握Delphi在系统编程领域的强大能力...
Delphi是全新的可视化编程环境,为我们提供了一种方便、快捷的Windows应用程序开发工具。它使用了Microsoft Windows图形用户界面的许多先进特性和设计思想,采用了弹性可重复利用的完整的面向对象程序语言(Object-...
- `『Delphi园地』.url` 是一个快捷方式链接,指向一个Delphi相关的网站,可能是学习资源、论坛或博客,供读者扩展学习。 通过阅读《Delphi模式编程》,读者不仅可以掌握Delphi编程的基础,还能了解到如何将设计...
总结,"delphi新建快捷方式.rar"是一个与Delphi编程相关的学习资源,主要教授如何使用Delphi和Windows API来创建快捷方式。这个实例对于理解和实践Delphi的API调用以及Windows壳层编程具有一定的教育价值。
这可以通过修改注册表或创建启动快捷方式来实现。 9. **程序退出**:程序应该有一个优雅的退出机制,释放所有资源并停止计时器,避免因程序意外退出而引发的问题。 综上所述,创建一个Delphi定时注销程序需要掌握...
在Delphi编程中创建一个启动闪现窗口 如何用Delphi编ScreenSaver Delphi里如何计算日期 delphi怎样调用外部EXE文件 Win95/98下监控运行的其他程序 控制面板应用大全 避免一个程序二次运行 转换WINDOWS壁纸 ...
『Delphi园地』.url可能是指向一个Delphi编程论坛或社区的快捷方式,供开发者交流和解决问题;而“应用篇源程序”和“基础篇源程序”则是核心的学习材料,分别提供了实际项目应用和基础概念的实例代码。 Delphi是一...