一程序自啟動的原理
程序自啟動有以下兩種方式:
利用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 環境下調試通過)
From:http://tw.wingwit.com/Article/program/Delphi/201311/24997.html