
delphi 快捷方式 65
我想请问一下,delphi如何把一个文件夹里面的东西快捷来桌面,,比果。。我的D盘D:\netgame这个文件里面有千千静听.exeQQ.exekugo.exe这些文件在...
我想请问一下,delphi如何把一个文件夹里面的东西快捷来桌面,,
比果。。我的D盘 D:\netgame 这个文件里面有 千千静听.exe QQ.exe kugo.exe这些文件在里面,,我想当我运行程序的时候,D:\netgame 里面的文件就快捷出来桌,, 帮忙的朋友 可以看清楚回答哦,,,不是把netgame文件夹快捷到桌面,,而是把netgame夹里面的文件快捷到面。。。我这样做也是为了以后,,再把任何一个文件放到指定netgame文件夹面的时候,只要运行程序,它就会把netgame文件里面的文件快捷来桌面。。。
我这样的思路相信很多朋友也想要的吧,呵呵,望高手们教教我怎么做???
回答OK的再加分!!! 展开
比果。。我的D盘 D:\netgame 这个文件里面有 千千静听.exe QQ.exe kugo.exe这些文件在里面,,我想当我运行程序的时候,D:\netgame 里面的文件就快捷出来桌,, 帮忙的朋友 可以看清楚回答哦,,,不是把netgame文件夹快捷到桌面,,而是把netgame夹里面的文件快捷到面。。。我这样做也是为了以后,,再把任何一个文件放到指定netgame文件夹面的时候,只要运行程序,它就会把netgame文件里面的文件快捷来桌面。。。
我这样的思路相信很多朋友也想要的吧,呵呵,望高手们教教我怎么做???
回答OK的再加分!!! 展开
1个回答
展开全部
一、 编程原理
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; file://IUnknown是COM的基类
MySLink : IShellLink; file://用于创建快捷方式的对象
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所示。
<P><IMG BORDER="0" SRC="http://www.jyzx.com/bbs/uploadImages/2002313434547824.jpg" WIDTH="412" HEIGHT="292"></P>
2、 向Tform1对象中新增一个函数:
function CreateShortcut(SourceFileName : string; file://源程序的位置
ShortcutName : string; file://快捷方式的名称
ShortcutLocation : ShortcutType; file://快捷方式的建立位置
SubDirectory : string file://程序组的名称
):Boolean;
其中ShortcutType是程序中自定义的一个枚举类:
type
ShortcutType=(_DESKTOP, file://桌面
_STARTMENU, file://开始菜单
_PROGRAMS, file://程序
_STARTUP, file://启动
_QUICKLAUNCH file://快速启动栏
);
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; file://IUnknown是基本的COM类
MySLink : IShellLink; file://用于创建快捷方式的对象
MyPFile : IPersistFile; file://用于保存快捷方式的对象
SubDir,Directory,LinkName : string;
WFileName : WideString;
Reg : TRegistry;
begin
Result:=False;
MyObject := CreateCOMObject(CLSID_ShellLink); file://建立快捷方式的COM对象
MySLink := MyObject as IShellLink;
MyPFIle := MyObject as IPersistFile;
MySLink.SetPath(pchar(SourceFileName)); file://设置快捷方式源文件的位置
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 file://当源路径是一个空值时,实际它指向“我的电脑”
LinkName := '我的电脑';
MySLink.SetDescription(pchar(LinkName)); file://设置快捷方式描述
LinkName := ChangeFileExt(LinkName,'.lnk'); file://修改扩展名
file://以下通过注册表得到快捷方式的实际建立位置
case ShortcutLocation of
_DESKTOP : Directory := Reg.ReadString('Desktop');
_STARTMENU : Directory := Reg.ReadString('Start Menu');
_PROGRAMS: Directory := Reg.ReadString('Programs');
_STARTUP : Directory := Reg.ReadString('Startup');
_QUICKLAUNCH:Directory:=Reg.ReadString('AppData')+
'\Microsoft\Internet Explorer\Quick Launch'; file://快速启动栏的路径比较特殊
end;
if Directory <> '' then
begin
if SubDirectory <> '' then
begin
SubDir:=Directory + '\'+ SubDirectory;
WFileName := SubDir + '\' + LinkName ;
if not CreateDir(SubDir) then file://创建目录失败
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 ; file://释放空间
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:
<P><IMG BORDER="0" SRC="http://www.jyzx.com/bbs/uploadImages/20023134353019903.jpg" WIDTH="408" HEIGHT="290"></P>
当然,你还可以把程序修改后用于你的安装系统,实现个性化的安装程序,那种感觉一定酷毕了!
程序在Windows2000、Delphi6.0下编译通过。
另外,建立文件快捷方式的三方控件:
http://delphi.icm.edu.pl/ftp/d30free/PDJ_Shortcut.zip
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; file://IUnknown是COM的基类
MySLink : IShellLink; file://用于创建快捷方式的对象
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所示。
<P><IMG BORDER="0" SRC="http://www.jyzx.com/bbs/uploadImages/2002313434547824.jpg" WIDTH="412" HEIGHT="292"></P>
2、 向Tform1对象中新增一个函数:
function CreateShortcut(SourceFileName : string; file://源程序的位置
ShortcutName : string; file://快捷方式的名称
ShortcutLocation : ShortcutType; file://快捷方式的建立位置
SubDirectory : string file://程序组的名称
):Boolean;
其中ShortcutType是程序中自定义的一个枚举类:
type
ShortcutType=(_DESKTOP, file://桌面
_STARTMENU, file://开始菜单
_PROGRAMS, file://程序
_STARTUP, file://启动
_QUICKLAUNCH file://快速启动栏
);
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; file://IUnknown是基本的COM类
MySLink : IShellLink; file://用于创建快捷方式的对象
MyPFile : IPersistFile; file://用于保存快捷方式的对象
SubDir,Directory,LinkName : string;
WFileName : WideString;
Reg : TRegistry;
begin
Result:=False;
MyObject := CreateCOMObject(CLSID_ShellLink); file://建立快捷方式的COM对象
MySLink := MyObject as IShellLink;
MyPFIle := MyObject as IPersistFile;
MySLink.SetPath(pchar(SourceFileName)); file://设置快捷方式源文件的位置
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 file://当源路径是一个空值时,实际它指向“我的电脑”
LinkName := '我的电脑';
MySLink.SetDescription(pchar(LinkName)); file://设置快捷方式描述
LinkName := ChangeFileExt(LinkName,'.lnk'); file://修改扩展名
file://以下通过注册表得到快捷方式的实际建立位置
case ShortcutLocation of
_DESKTOP : Directory := Reg.ReadString('Desktop');
_STARTMENU : Directory := Reg.ReadString('Start Menu');
_PROGRAMS: Directory := Reg.ReadString('Programs');
_STARTUP : Directory := Reg.ReadString('Startup');
_QUICKLAUNCH:Directory:=Reg.ReadString('AppData')+
'\Microsoft\Internet Explorer\Quick Launch'; file://快速启动栏的路径比较特殊
end;
if Directory <> '' then
begin
if SubDirectory <> '' then
begin
SubDir:=Directory + '\'+ SubDirectory;
WFileName := SubDir + '\' + LinkName ;
if not CreateDir(SubDir) then file://创建目录失败
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 ; file://释放空间
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:
<P><IMG BORDER="0" SRC="http://www.jyzx.com/bbs/uploadImages/20023134353019903.jpg" WIDTH="408" HEIGHT="290"></P>
当然,你还可以把程序修改后用于你的安装系统,实现个性化的安装程序,那种感觉一定酷毕了!
程序在Windows2000、Delphi6.0下编译通过。
另外,建立文件快捷方式的三方控件:
http://delphi.icm.edu.pl/ftp/d30free/PDJ_Shortcut.zip
已赞过
已踩过<
评论
收起
你对这个回答的评价是?

2024-09-19 广告
随着AI技术的飞速发展,如今市面上涌现了许多实用易操作的AI生成工具1、简介:AiPPT: 这款AI工具智能理解用户输入的主题,提供“AI智能生成”和“导入本地大纲”的选项,生成的PPT内容丰富多样,可自由编辑和添加元素,图表类型包括柱状图...
点击进入详情页
本回答由AiPPT提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询