Delphi編程完成程序快捷方式
發(fā)表時(shí)間:2024-02-26 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]★中共河南省濟(jì)源市委黨校,耿百強(qiáng)摘要:本文主要介紹了用Delphi編程實(shí)現(xiàn)程序的快捷方式的方法,其中主要討論了Delphi中COM編程的方法、快捷方式的實(shí)現(xiàn)方法,并給出了一個(gè)實(shí)例程序。關(guān)鍵詞:Delphi,COM編程,快捷方式Windows系統(tǒng)提供了快捷方式來簡(jiǎn)化用戶對(duì)應(yīng)用程序的執(zhí)行,盡量使得用戶...
★中共河南省濟(jì)源市委黨校,耿百強(qiáng)
摘要:本文主要介紹了用Delphi編程實(shí)現(xiàn)程序的快捷方式的方法,其中主要討論了Delphi中COM編程的方法、快捷方式的實(shí)現(xiàn)方法,并給出了一個(gè)實(shí)例程序。
關(guān)鍵詞:Delphi,COM編程,快捷方式
Windows系統(tǒng)提供了快捷方式來簡(jiǎn)化用戶對(duì)應(yīng)用程序的執(zhí)行,盡量使得用戶不與應(yīng)用程序的具體位置掛上關(guān)系,大大方便了用戶的操作。所以,在Windows系統(tǒng)下,大多安裝程序一般都提供創(chuàng)建程序組和快捷方式。但,你有沒有想過,快捷方式是如何實(shí)現(xiàn)的呢?
下面,我就和大家來討論一下關(guān)于快捷方式編程實(shí)現(xiàn)的原理,并給大家一個(gè)具體的示例程序。
一、 編程原理
1、首先找到快捷方式的存放位置,創(chuàng)建程序組。
在Windows系統(tǒng)下,所謂的程序組就是文件夾,只是這些文件夾的存放位置比較特殊罷了,一般存放在“D:\Documents and Settings\All Users.WINNT\「開始」菜單\程序”文件夾(在Windows2000下),你可以打開這個(gè)文件夾,是不是可以看到那些以前只能在“開始-程序”中才能看到的項(xiàng)目?!所以,必須首先得到快捷方式的存放位置,要解決這個(gè)問題,可以有兩種解決方法。
第一、通過Windows2000下的一個(gè)API函數(shù)來實(shí)現(xiàn):
HRESULT SHGetSpecialFolderLocation(
HWND hwndOwner,
int nFolder,
LPITEMIDLIST *ppidl
);
第二、通過注冊(cè)表來實(shí)現(xiàn),打開注冊(cè)表,然后依次打開“HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders”,可以找到比如“開始菜單”、“程序”等文件夾的存放位置。
明白了程序組就是文件夾,要建立程序組就非常簡(jiǎn)單了,只要在找到的“程序”這個(gè)文件夾的位置中創(chuàng)建一個(gè)以“程序組”命名的文件夾就可以了。比如,我們把找到的“程序”所在的文件夾存放在Directory中,而程序組的名稱保存在GroupName中,下面的代碼可以實(shí)現(xiàn)在“程序”文件夾中創(chuàng)建“程序組”:
Directory := Reg.ReadString('Programs');
SubDir:= Directory+'\'+GroupName;
CreateDir(SubDir);
一般的應(yīng)用程序都會(huì)通過API函數(shù)來實(shí)現(xiàn),在本例中,我們通過第二種方法來實(shí)現(xiàn)。
2、創(chuàng)建快捷方式
解決了前面的兩個(gè)小問題,我們?cè)賮砜慈绾尉唧w實(shí)現(xiàn)快捷方式的創(chuàng)建。如果你經(jīng)常編寫程序,可能會(huì)想到利用API函數(shù)來實(shí)現(xiàn),不幸的是,你在API函數(shù)中找不到創(chuàng)建快捷方式的相應(yīng)函數(shù),因?yàn)檫@個(gè)功能需要用COM來實(shí)現(xiàn)。一些人可能會(huì)對(duì)COM編程感到陌生與恐懼,實(shí)際上,COM編程并不復(fù)雜,你不需要太了解COM就可以很好地使用它。
Windows提供了一個(gè)COM接口IshellLink,它能夠幫助我們創(chuàng)建、修改、刪除快捷方式。要使用COM接口提供的功能,必須首先調(diào)用CreateCOMObject函數(shù)創(chuàng)建一個(gè)接口的實(shí)例,Delphi提供了創(chuàng)建COM的一個(gè)基類Iunknown,具體的示例程序如下:
var
MyObject : IUnknown; file://IUnknown是COM的基類
MySLink : IShellLink; file://用于創(chuàng)建快捷方式的對(duì)象
MyObject := CreateCOMObject(CLSID_ShellLink);
MySLink := MyObject as IShellLink;
創(chuàng)建實(shí)例后,通過調(diào)用SetPath()方法設(shè)置快捷方式指向的源程序的路徑,快捷方式的存儲(chǔ)位置應(yīng)該是:“程序”的位置+程序組名稱+快捷方式名稱+擴(kuò)展名.lnk;通過SetDescription()方法設(shè)置快捷方式的描述,當(dāng)然你還可以調(diào)用比如SetHotKey()等方法設(shè)置熱鍵、顯示的圖標(biāo)(默認(rèn)為實(shí)際程序的圖標(biāo))等。實(shí)際上這個(gè)接口功能遠(yuǎn)不止這些,限于篇幅,直接略過。
設(shè)置完成的快捷方式并沒有保存到磁盤上,還必須通過IpersistFile對(duì)象的Save()方法來實(shí)現(xiàn)。如下面的代碼:
MyPFIle := MyObject as IPersistFile;
MyPFile.Save(PWChar(WFileName),True);
需要注意的是:快捷方式應(yīng)該使用Unicode存儲(chǔ),所以必須調(diào)用PWChar()函數(shù)將其轉(zhuǎn)換。
二、編程示例
下面,讓我們用Delphi6來編程實(shí)現(xiàn)一個(gè)簡(jiǎn)單的示例程序。程序的功能如下:你可以在窗口的三個(gè)文本框中輸入源程序的位置(也可以通過瀏覽按鈕來實(shí)現(xiàn))、程序組名稱和快捷方式名稱,通過下拉框來選擇快捷方式的存放位置,單擊“創(chuàng)建”按鈕可以創(chuàng)建程序組和快捷方式了。是不是很酷?心動(dòng)不如行動(dòng),讓我們一步一步來實(shí)現(xiàn)。
1、 啟動(dòng)Delphi6.0,打開一個(gè)新的標(biāo)準(zhǔn)工程。在窗體中添加所需的控件。
首先向窗體中添加四個(gè)Label對(duì)象、三個(gè)Edit對(duì)象、一個(gè)下拉框?qū)ο驝omboBox1、三個(gè)Button對(duì)象和一個(gè)OpenDialog對(duì)象。依次設(shè)置其相關(guān)屬性等,調(diào)整后的窗體界面如圖1所示。
<P><IMG BORDER="0" SRC=http://www.programfan.com/article/"http://www.jyzx.com/bbs/uploadImages/2002313434547824.jpg" WIDTH="412" HEIGHT="292"></P>
2、 向Tform1對(duì)象中新增一個(gè)函數(shù):
function CreateShortcut(SourceFileName : string; file://源程序的位置
ShortcutName : string; file://快捷方式的名稱
ShortcutLocation : ShortcutType; file://快捷方式的建立位置
SubDirectory : string file://程序組的名稱
):Boolean;
其中ShortcutType是程序中自定義的一個(gè)枚舉類:
type
ShortcutType=(_DESKTOP, file://桌面
_STARTMENU, file://開始菜單
_PROGRAMS, file://程序
_STARTUP, file://啟動(dòng)
_QUICKLAUNCH file://快速啟動(dòng)欄
);
CreateShortcut()函數(shù)用于實(shí)現(xiàn)快捷方式和程序組的創(chuàng)建,如果創(chuàng)建成功,則返回一個(gè)真值(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://用于創(chuàng)建快捷方式的對(duì)象
MyPFile : IPersistFile; file://用于保存快捷方式的對(duì)象
SubDir,Directory,LinkName : string;
WFileName : WideString;
Reg : TRegistry;
begin
Result:=False;
MyObject := CreateCOMObject(CLSID_ShellLink); file://建立快捷方式的COM對(duì)象
MySLink := MyObject as IShellLink;
MyPFIle := MyObject as IPersistFile;
MySLink.SetPath(pchar(SourceFileName)); file://設(shè)置快捷方式源文件的位置
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://當(dāng)源路徑是一個(gè)空值時(shí),實(shí)際它指向“我的電腦”
LinkName := '我的電腦';
MySLink.SetDescription(pchar(LinkName)); file://設(shè)置快捷方式描述
LinkName := ChangeFileExt(LinkName,'.lnk'); file://修改擴(kuò)展名
file://以下通過注冊(cè)表得到快捷方式的實(shí)際建立位置
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://快速啟動(dòng)欄的路徑比較特殊
end;
if Directory <> '' then
begin
if SubDirectory <> '' then
begin
SubDir:=Directory + '\'+ SubDirectory;
WFileName := SubDir + '\' + LinkName ;
if not CreateDir(SubDir) then file://創(chuàng)建目錄失敗
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、 下面是“創(chuàng)建”按鈕的代碼,直接調(diào)用我們建立的CreateShoutcut()函數(shù)來實(shí)現(xiàn):
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('快捷方式創(chuàng)建成功!'),pchar('系統(tǒng)消息'),MB_OK)
else
Application.MessageBox(pchar('快捷方式創(chuàng)建失敗!'),pchar('系統(tǒng)消息'),MB_OK);
end;
現(xiàn)在按下F9編譯運(yùn)行這個(gè)程序,你就可以試試創(chuàng)建快捷方式的效果了。程序的運(yùn)行效果如圖2:
<P><IMG BORDER="0" SRC=http://www.programfan.com/article/"http://www.jyzx.com/bbs/uploadImages/20023134353019903.jpg" WIDTH="408" HEIGHT="290"></P>
當(dāng)然,你還可以把程序修改后用于你的安裝系統(tǒng),實(shí)現(xiàn)個(gè)性化的安裝程序,那種感覺一定酷畢了!
程序在Windows2000、Delphi6.0下編譯通過。
作者:耿百強(qiáng)
地址:中共河南省濟(jì)源市委黨校
郵政編碼:454650
聯(lián)系電話:0391-6666267
E-Mail:dxgbq@sohu.com
OICQ:10562208
寫稿日期:2002-3-12