人人做人人澡人人爽欧美,国产主播一区二区,久久久精品五月天,羞羞视频在线观看免费

當前位置:蘿卜系統下載站 > 技術開發教程 > 詳細頁面

Delphi編程完成程序快捷方式

Delphi編程完成程序快捷方式

更新時間:2022-10-14 文章作者:未知 信息來源:網絡 閱讀次數:

★中共河南省濟源市委黨校,耿百強

摘要:本文主要介紹了用Delphi編程實現程序的快捷方式的方法,其中主要討論了Delphi中COM編程的方法、快捷方式的實現方法,并給出了一個實例程序。
關鍵詞:Delphi,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; 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.programfan.com/article/"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.programfan.com/article/"http://www.jyzx.com/bbs/uploadImages/20023134353019903.jpg" WIDTH="408" HEIGHT="290"></P>

當然,你還可以把程序修改后用于你的安裝系統,實現個性化的安裝程序,那種感覺一定酷畢了!
程序在Windows2000、Delphi6.0下編譯通過。

作者:耿百強
地址:中共河南省濟源市委黨校
郵政編碼:454650
聯系電話:0391-6666267
E-Mail:dxgbq@sohu.com
OICQ:10562208
寫稿日期:2002-3-12

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統下載排行

網站地圖xml | 網站地圖html
主站蜘蛛池模板: 上高县| 新建县| 神农架林区| 建平县| 红原县| 邵东县| 雷州市| 新沂市| 资兴市| 拉孜县| 布尔津县| 黑河市| 城步| 景宁| 玉树县| 安庆市| 通化县| 梁山县| 花莲市| 乌拉特前旗| 咸丰县| 南岸区| 施秉县| 清原| 新郑市| 普安县| 康平县| 家居| 东源县| 营口市| 呼和浩特市| 江川县| 庆云县| 晋宁县| 沈阳市| 泸西县| 蒲城县| 秦皇岛市| 安溪县| 安顺市| 沾益县|