一般情况下,程序在安装时,要进行建立自己的程序组和程序项、在桌面上建立快捷方式、 让程序随WIN9X/NT自动启动、把程序快捷方式放入快速启动工具栏等工作,其目的就 是让用户更容易、更方便运行自己的程序,从而且增加程序的友好性。下面我们就讨论一下在 DELPHI程序如果实现这四项操作。 一、建立自己的程序组和程序项 1、实现原理 建立自己的程序组,就是在WINDOWS目录下的子目录Start Menu\Programs下, 建立一个子目录;建立程序项,就是在该子目录下建立程序的快捷方式。 2、建立程序的快捷方式 由于建立自己的程序组和程序项、在桌面上建立快捷方式、把程序快捷方式放入快速 启动工具栏三个操作中要用到建立程序快捷方式的操作,首先来讨论一下 如何在DELPHI 程序中建立程序快捷方式。 在手工建立程序的快捷方式时,通常要指定程序的文件名称和运行参数;在程序中建 立程序的快捷方式时还要指定程序的工作目录。我们可以用ShlObj单元中COM对象IShellLink 来指定程序的文件名称、运行参数和程序的工作目录三个参数,然后用COM对象IPersistFile 来保存快捷方式文件。具体的实现步骤请参见下面程序函数和注释。 我们要用到的操作是在指定目录下建立指定程序的快捷方式,因而要指定快捷文件要 保存的目录。 { 建立程序的快捷方式,程序文件名称为strExeFileName,运行参数为strParameters, 快捷方式所在目录为strPath,返回值为True表示成功建立快捷方式,请在单元包含中增加 ComObj, ShlObj, ActiveX三个单元 } function CreateShortcut( strExeFileName, strParameters, strPath : string ) : boolean; var strLnkFileName : widestring;//程序的快捷方式文件名称 shelllinkTemp : IShellLink; persistfileTemp : IPersistFile; begin //设置快捷方式的参数 shelllinkTemp := IShellLink( CreateComObject(CLSID_ShellLink)); with shelllinkTemp do begin SetPath( PChar( strExeFileName ) ); //设置程序文件全名 SetArguments( PChar( strParameters) );//设置程序的命令行参数 //设置程序的工作目录 SetWorkingDirectory( PChar( ExtractFilePath( strExeFileName ) ) ); end; //构造快捷方式的文件名(.LNK),路径采用指定目录,文件名为程序文件名,扩展名为LNK //路径采用指定目录,文件名为程序文件名 strLnkFileName := strPath + '\' + ExtractFileName( strExeFileName ); //替代文件扩展名 strLnkFileName := copy( strLnkFileName,1, length( strLnkFileName ) - length( ExtractFileExt( strExeFileName ) ) ) + '.LNK'; //保存快捷方式的文件 persistfileTemp := shelllinkTemp as IPersistFile; if S_OK = persistfileTemp.Save( PWChar( strLnkFileName ) , false ) then result := true //保存成功,返回True else result := false;//保存失败,返回False end; 3、建立自己的程序组和程序项 { 创建程序组和程序项 } procedure TForm1.Button2Click(Sender: TObject); begin //创建程序组MyGroup,即在C:\PWIN98\Start Menu\Programs下建立子目录MyGroup if not DirectoryExists( 'C:\PWIN98\Start Menu\Programs\MyGroup' ) then ForceDirectories( 'C:\PWIN98\Start Menu\Programs\MyGroup' ); //创建程序项,在该子目录下建立程序的快捷方式 if CreateShortcut( 'C:\Program Files\Borland\Dbd\Dbd32.exe','%1', 'C:\PWIN98\Start Menu\Programs\MyGroup' ) then memo1.lines.add( '创建程序组和程序项成功' )//创建程序组和程序项成功 else//创建程序组和程序项失败 memo1.lines.add( '创建程序组和程序项失败' ); end; 二、在桌面上建立程序的快捷方式 1、实现原理 在桌面上建立程序的快捷方式,就是在WINDOWS目录下的子目录Desktop下 建立程序的快捷方式。 2、在桌面上建立程序的快捷方式 { 在桌面上建立程序的快捷方式 } procedure TForm1.Button1Click(Sender: TObject); begin //在目录C:\PWIN98\Desktop下建立程序的快捷方式 if CreateShortcut( 'C:\Program Files\Borland\Dbd\Dbd32.exe','%1', 'C:\PWIN98\Desktop' ) then//创建桌面快捷方式成功 memo1.lines.add( '创建桌面快捷方式成功' ) else//创建桌面快捷方式失败 memo1.lines.add( '创建桌面快捷方式失败' ); end; 三、让程序随WIN9X/NT自动启动 让程序随WIN9X/NT自动启动,可以把程序的快捷方式放到“启动”程序组中, 不过这并不是一个好办法。较好的办法是修改系统注册表,在其中加入程序文件的名称及 运行参数。 1、实现原理 让程序随WIN9X/NT自动启动,可以在注册表的HKEY_LOCAL_MACHINE\Software \Microsoft\Windows\CurrentVersion\Run中加入程序文件的名称及运行参数,使程序作为一般 程序随WIN9X/NT自动启动;或在HKEY_LOCAL_MACHINE\Software\Microsoft\WindowsCurrentVersion\RunOnce中加入程序文件的名称及运行参数,使程序作为服务程序随WIN9X /NT自动启动,这样按Ctrl+Alt+Del时,任务列表中将不会列出该程序的有关信息。 2、让程序随WIN9X/NT自动启动 { 让自己的程序随WIN95/98/NT的启动而运行,请在单元包含中增加Registry单元 } procedure TForm1.Button3Click(Sender: TObject); var registerTemp : TRegistry; success : boolean; begin registerTemp := TRegistry.Create; //建立一个Registry实例 with registerTemp do begin RootKey:=HKEY_LOCAL_MACHINE;//设置根键值为HKEY_LOCAL_MACHINE //找到Software\Microsoft\Windows\CurrentVersion\Run if OpenKey('Software\Microsoft\Windows\CurrentVersion\Run',True) then //写入自己程序的快捷方式信息 begin WriteString( 'DBD', 'C:\Program Files\Borland\Dbd\Dbd32.exe' ); success := true;//设置程序自动启动成功 end else success := false;//设置程序自动启动失败 //善后处理 CloseKey; Free; end; if success then memo1.lines.add( '设置程序自动启动成功' ) else memo1.lines.add( '设置程序自动启动失败' ); end; 四、把程序快捷方式放入快速启动工具栏 Windows95/98的任务栏是桌面上的一个特殊区域,用于显示“开始”菜单、时钟等以及 目前执行的任务。Windows98的任务栏增加了快速启动工具栏,将程序的快捷方式放在任务栏 的“快速启动”区,可以更方便地启动程序,以免在开始菜单中一级级地查找或关闭窗口在 桌面上启动程序。 Windows98 安装后缺省的快速启动工具栏包含“显示桌面”、“IE 浏览器”等。如果快 速启动工具栏已关闭,可用鼠标右键单击任务栏的空白区域,单击“工具栏”,确认已选中 “快速启动”即可打开。 1、实现原理 把程序快捷方式放入快速启动工具栏,就是在WINDOWS目录下的子目录 Application Data\Microsoft\Internet Explorer\Quick Launch下建立程序的快捷方式。 2、把程序快捷方式放入快速启动工具栏 { 将程序快捷方式加入快速启动工具栏 } procedure TForm1.Button4Click(Sender: TObject); begin //将程序快捷方式加入快速启动工具栏 if CreateShortcut( 'C:\Program Files\Borland\Dbd\Dbd32.exe','%1', 'C:\PWIN98\Application Data\Microsoft\Internet Explorer\Quick Launch' ) then//成功 memo1.lines.add( '将程序快捷方式加入快速启动工具栏成功' ) else//失败 memo1.lines.add( '将程序快捷方式加入快速启动工具栏失败' ); end; 以上程序在PWIN98+DELPHI3.0下调试通过。 (作者:深圳王发军 wangfajun@163.net http://wangfajun.163.net) |