在C++ Builder3下實現程式自動執行的方法 (轉)

gugu99發表於2008-03-07
在C++ Builder3下實現程式自動執行的方法 (轉)[@more@]現在很多應用後都可以實現開機自動執行,大大方便了使用。想當初我就對這項功能羨慕至極。能否在我們自己編寫的中實現程式自動執行呢?答案當然是肯定的。利用Borland公司出品的C++ Builder3我們就可以很方便地做到這一點。 
---- C++ Builder3是由Borland公司於近年推出的新產品,支援視覺化設計。喜歡使用BC3.1的人使用C++ Builder3真是輕車熟路。它的斷點以及Watch功能都承襲了BC3.1的優良傳統,除錯程式很方便。眾多熱鍵都沿用了BC3.1的方案,上手十分容易。難怪它在測試階段就獲得了眾多的好評呢! 

---- 有了好的開發工具,下面就要切入正題了。首先,我們來看看在95、98環境下,程式實現開機自動執行的方法。根據有關資料,大致有以下三種方法: 

利用"開始"選單中的"啟動"程式項。凡是拖入該程式項的程式都可以實現自動執行。

利用Win.ini中的run變數。編輯Win.ini,為run變數賦值。如run= 某程式, 可以使某程式實現自動執行。

利用登錄檔。透過修改登錄檔中相關項,實現程式自動執行。 
---- 看上去,第一種方法是最容易實現的。由於所謂的"開始"程式選單實際上是一個特殊目錄下的特殊檔案。其目錄一般在C: Windows
Start Menu Programs下。"啟動"程式項的目錄一般為C: Windows Start Menu
Programs 啟動。這樣程式只要在把自身複製到此目錄下就可以實現程式自動執行了。然而這裡有個問題,如果出現特殊情況,"啟動"程式項的目錄不在理想目錄下呢?自動執行顯然無法實現了。要解決這個問題,我們可以利用登錄檔得到有關資訊。在登錄檔HKEY_USERS.Default
SoftwareWindows CurrentVersion TRegister *Test; Test = new TRegister(); Test- >Key = HKEY_USERS; if(Test- >OpenKey(".DefaultSoftware MicrosoftWindowsCurrentVersion Explorer Folders",false)) Path = Test- >ReadString("Startup"); //獲得"啟動"程式項準確目錄 delete Test; 
 
---- 對於第二種方法,關鍵在於對Win.ini的讀寫。Win.ini為WINDOWS啟動時初始檔案,存放在目錄下。系統目錄可以在登錄檔HKEY_LOCAL_MACHINE SOFTWAREWindows
CurrentVersion下,透過讀取SystemRoot值得到。程式自身的存放路徑可以利用C++ Builder3中Application類的ExeName變數得到。使用C++ Builder3提供的TIniFile類,我們可以十分方便地對INI檔案進行操作。程式如下: 

TRegister *Test;
TIniFile *IniFile;
Test = new TRegister();
Test- >RootKey = HKEY_LOCAL_MACHINE;
if(Test- >OpenKey
("SOFTWAREWindowsCurrentVersion",false))
Path = Test- >ReadString("SystemRoot");
//獲得WINDOWS系統目錄
delete Test;
Path = Path + "Win.ini";
//獲得Win.ini的完整路徑
IniFile = new TIniFile(Path);
IniFile- >WriteString
("windows","run",Application- >ExeName); 
// run = 檔名
delete IniFile;

---- 對於第三種方法,實現起來最為隱蔽。如果不瞭解登錄檔,想去掉自動執行都不行哦。在登錄檔HKEY_LOCAL_MACHINE SOFTWARE
Microsoft Windows CurrentVersion Run下的所有程式項都可以被WINDOWS自動執行。因此,我們可以透過新增新程式項實現自動執行功能。程式如下: 

TRegister *Test;
Test = new TRegistry();
Test- >RootKey = HKEY_LOCAL_MACHINE;
if(Test- >OpenKey
("SOFTWAREMicrosoftWindows
CurrentVersionRun",false))
Test- >WriteString
("My Program",Application- >ExeName);
delete Test;

怎麼樣?用C++ Builder3實現程式自動執行夠簡單的吧。利用C++ Builder3的TRegister類,我們可以方便地實現對登錄檔的讀寫,從而完成很多強大功能。使用TIniFile類可以很容易地實現對INI檔案的讀寫操作,對於儲存自己程式的配置相當有效。自己動手用C++ Builder3,感覺真不錯!

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-1000517/,如需轉載,請註明出處,否則將追究法律責任。

相關文章