一程序自启动的原理
程序自启动有以下两种方式:
利用Winini文件实现程序的自动启动
Winini是系统保存在C:Windows目录下的一个系统初始化文件系统在启动时会检索该文件中的相关项以进行系统环境的初始设置在该文件中的[windows]数据段中有两个数据项load=和run=它们的作用就是在系统启动之后自动地装入和运行相关的程序如果我们需要在系统启动之后立即装入并运行一个程序只需要将运行文件的全文件名添加在该数据项的后面系统启动后就会自动运行该程序系统也会进入特定的操作环境中
利用注册表实现相关程序的自动启动
系统注册表保存着系统的软件硬件及其他与系统配置有关的重要信息一个计算机系统的系统注册表一旦遭到破坏整个系统将无法运行在计算机系统注册表中有HKEY_LOCAL_MACHINE/Software/Microsoft/Windows/Current_Version/Run子键如果要让程序在系统启动的过程中启动该程序就可以向该目录添加一个子键具体的过程是在注册表中右击该项选中其中的新建项目然后选中其中的串值建立新的串值后将它改成相应的名称双击新建的串值输入新的数值自动启动程序的过程就设置完成
二编程实例
在Delphi 中同时具有对注册表和INI文件操作的函数下面是笔者编写的一个简单程序该程序通过修改注册表和INI文件使系统自动启动相关程序的设置工作比较简单可靠
程序功能概述
程序的主界面是对话框在主界面对话框中有两个编辑框一个按钮组一个打开文件对话框两个普通按钮(Button)组成操作者先在编辑框中添加需要自动加载的程序全文件名(也可以通过浏览按钮来完成)然后通过按钮组中两个按钮完成加载方式的选择(注册表方式或者修改Winini文件的方式)最后操作者通过点击应用按钮实现程序的自动加载同时系统会提示操作者是否将计算机重新启动以便观察程序的具体功能完成情况
程序代码
procedure TFormButtonClick(Sender: TObject);
{浏览按钮的功能代码}
begin
if (OpenDlgExecute) then
{当操作者选择OK时程序取得选择文件的全路径名(包括文件的路径及文件名称)并将相应的数值传输给相关的控件变量}
EditText := OpenDlgFileName;
end;
procedure TFormOKBtnClick(Sender: TObject);
{应用按钮的功能代码}
Var
lKey: HKey;
ilen: integer;
title data_set: LPCTSTR;
retret: longint;
filename: String;
begin
if (editText =) THEN
{如果操作者没有填写要设置项的标题程序显示对话框提示操作者进行相关内容的填写}
begin
ApplicationMessageBox(Please input the title name提示MB_OK);
EXIT;
end;
title:=PChar(editText);
if (edittext =)THEN
{如果操作者没有选择要设置的程序全路径文件名程序显示对话框提示操作者进行相关的选择}
begin
ApplicationMessageBox(Please input the programe file name提示MB_OK);
exit;
end;
if (RadioGroupItemIndex = ) then
{如果操作者选择注册表方式程序修改系统的注册表}
begin
data_Set:=Software\Microsoft\
Windows\CurrentVersion\Run;
{设置注册表中相关的路径}
ret:=RegOpenKeyEx(HKEY_LOCAL_MACHINE data_Set KEY_WRITE lKey);
//打开注册表中的相应项
if (ret<>ERROR_SUCCESS) then
ApplicationMessageBox(错误提示MB_OK);
len := Length(Trim(Edittext))+;
filename := Trim(Edittext);
for i:= to Length(filename) do
if(filename[i]=\)then
len:=len+;
ret:=RegSetValueEx(lKeyPChar(title)REG_SZPchar(filename)len);
//将相关的信息写入注册表
if(ret<>ERROR_SUCCESS) then
//判断系统的相关注册是否成功?
ApplicationMessageBox(错误提示MB_OK);
RegCloseKey(lKey);
//关闭注册表中的相应的项
end
else begin
WritePrivateProfileString(windowsload PChar(filename)c:\windows\winini);
WritePrivateProfileString(windowsrun PChar(filename)c:\windows\winini);
end;
VerifyDlgShowModal;
{显示对话框提示操作者是否需要重新启动计算机以便验证程序的功能}
end;
procedure TVerifyDlgOKBtnClick(Sender: TObject);
{重新启动按钮的功能代码}
var
OsVerInfo:OSVERSIONINFO;
//保存系统版本信息的数据结构
Begin
OsVerInfodwOSVersionInfoSize:=sizeof(OSVERSIONINFO);
GetVersionEx(OsVerInfo);
//取得系统的版本信息
if(OsVerInfodwPlatformId=VER_PLATFORM
_WIN_WINDOWS) then
ExitWindowsEx(EWX_REBOOT);
//重新启动计算机
end;
(本程序在WinDelphi 环境下调试通过)