国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

利用VC++編程實現(xiàn)程序自動啟動

2019-11-17 05:15:54
字體:
供稿:網(wǎng)友
工作中經(jīng)常碰到一些程序,它們在系統(tǒng)啟動的過程中,自動打開并運行,以便實現(xiàn)對系統(tǒng)的監(jiān)控或者病毒的檢測等特定的目的,典型的例子就是常用的一些殺毒軟件如:KV300及瑞星殺毒軟件等。筆者在此,以自己的編程實踐為基礎(chǔ),說明這些程序自動啟動的原理和方法,同時對一些典型程序代碼進行分析,以便讀者在今后的編程過程中使用。

一、 程序自動啟動的原理及方法:

1. 利用WIN.INI文件實現(xiàn)相關(guān)程序的自動啟動

WIN.INI是系統(tǒng)保存在C:/WINDOWS/目錄下的一個系統(tǒng)初始化文件。系統(tǒng)在起動時會檢索該文件中的相關(guān)項,以便對系統(tǒng)環(huán)境的初始設(shè)置。

在該文件中的"[windows]"數(shù)據(jù)段中,有兩個數(shù)據(jù)項"load="和"run=",它們的作用就是在系統(tǒng)起動之后自動得裝入和運行相關(guān)的程序。假如我們需要在系統(tǒng)起動之后裝入并運行一個程序,只將需要運行文件的全文件名添加在該數(shù)據(jù)項的后面系統(tǒng)起動后就會自動運行該程序,系統(tǒng)也會進入特定的操作環(huán)境中去。

2. 利用注冊表實現(xiàn)相關(guān)程序的自動啟動



系統(tǒng)注冊表保存著系統(tǒng)的軟件、硬件及其他與系統(tǒng)配置有關(guān)的重要信息,一個計算機系統(tǒng)的系統(tǒng)注冊表一旦遭到破壞,整個系統(tǒng)將無法運行。

在計算機的系統(tǒng)注冊表中的子目錄中有一個目錄的名稱為HKEY_LOCAL_MACHINE/Software /Microsoft/Windows/Current_Version/Run,假如你想讓程序在系統(tǒng)起動的過程中啟動該程序,就可以向該目錄添加一個子項,具體的過程是在注冊表中右擊該項,選中其中的"新建"項目,然后選中其中的"串值",建立新的串值后將它的名稱改成相應(yīng)的名稱,雙擊新建的串值,輸入新的數(shù)值,自動啟動程序的過程就設(shè)置完成。

二、 利用VC++編程實現(xiàn)程序自動啟動的編程實例。

微軟公司提供的VC++ 6.0程序開發(fā)工具功能非常強大。在VC++ 6.0中同時具有對注冊表和*.INI文件操作的函數(shù)。筆者經(jīng)過一段時間的摸索,成功的利用VC++ 6.0開發(fā)成功了一個小軟件,該軟件利用系統(tǒng)自動啟動程序的原理,將原來需要的繁瑣的手動工作轉(zhuǎn)變成成計算機的自動設(shè)置工作,使系統(tǒng)自動啟動相關(guān)程序的設(shè)置工作變的非常簡單可靠。

1.程序功能概述:

程序的主界面是對話框,在主界面對話框中有編輯框(EDIT BOX),圓形按鈕(RADIO BUTTON)和普通按鈕(COMMON BUTTON)組成。操作者通過向編輯框中添加需要自動加載的程序的全文件名(也可以通過瀏覽按鈕來完成),然后通過對兩個RADIO BUTTON的選擇,進而完成對加載方式的選擇(是選用注冊表方式還是選者修改WIN.INI文件的方式),最后操作者通過點擊"應(yīng)用"按鈕實現(xiàn)程序的自動加載功能,同時系統(tǒng)會提示操作者是否將操作計算機重新啟動,以便觀察程序的具體功能完成情況。程序在WIN98中調(diào)試運行正常。

2.編碼說明:

① 瀏覽按鈕的功能代碼:

void CAutoloadDlg::OnLiulan()

{

// TODO: Add your control notification handler code here

CFileDialog fileDlg(TRUE,_T("EXE"),_T("*.exe"),OFN_HIDEREADONLYOFN_OVERWRITE
if(fileDlg.DoModal()==IDOK)//當操作者選擇OK時,程序,取得選擇文//件的全路徑名(包括文件的路徑及文件名稱),并將相應(yīng)的數(shù)值傳輸給相//關(guān)的控件變量。

{

m_filename=fileDlg.GetPathName();//m_filename是EDIT BOX控件的相應(yīng)的變量。

UpdateData(FALSE);//向?qū)⒆兞恐械臄?shù)值傳輸給控件顯示出來。

}

}

② 應(yīng)用按鈕的功能代碼:

void CAutoloadDlg::OnOK()

{

// TODO: Add extra validation here

LPCTSTR title;

UpdateData(TRUE);

if(m_title.IsEmpty())//假如操作者沒有填寫要設(shè)置項的標題,程序顯示對話框,提示操作者進行相關(guān)的填寫。

{

MessageBox(_T("Please input the title name"));

return;

}

title=m_title;

if(m_filename.IsEmpty())//假如操作者沒有選擇要設(shè)置的程序的全路徑文//件名,程序顯示對話框,提示操作者進行相關(guān)的選擇。

{

MessageBox(_T("Please input the programe file name"));

return;

}

if(IsDlgButtonChecked(IDC_RADIO1))//假如操作者選擇注冊表方式,程序修改系統(tǒng)的注冊表。

{

HKEY hKey;

LPCTSTR data_Set="Software//Microsoft//Windows//CurrentVersion//Run";//設(shè)置注冊表中相關(guān)的路徑

Longret0=(::RegOpenKeyEx(HKEY_LOCAL_MACHINE,data_Set,0,KEY_WRITE,&hKey));//打開注冊表中的相應(yīng)項

if(ret0!=ERROR_SUCCESS)

{

MessageBox("錯誤0");

}

int length=m_filename.GetLength()+1;//將控件中的內(nèi)容進行轉(zhuǎn)換,以達到注冊表修改函數(shù)的參數(shù)調(diào)用需求。

for(int i=0;i {

if(m_filename[i]==92)

length=length+1;

}

D
Word cbData=length;

LPBYTE lpb=new BYTE[length];

int j=0;

for(i=0;i {

if(m_filename[i]==92)

{

lpb[j]=92;

j++;

lpb[j]=92;

j++;

}

else

{

lpb[j]=m_filename[i];

j++;

}

}

lpb[j]=0;

long ret1=(::RegSetValueEx(hKey,title,NULL,REG_SZ,lpb,cbData));//將相關(guān)的信息寫入注冊表。

if(ret1!=ERROR_SUCCESS)//判定系統(tǒng)的相關(guān)注冊是否成功?

{

MessageBox("錯誤1");

}

delete lpb;

::RegCloseKey(hKey);//關(guān)閉注冊表中的相應(yīng)的項

}

if(IsDlgButtonChecked(IDC_RADIO2))//假如操作者選擇用修改WIN.INI文件的方式

{

LPCTSTR filename;

filename=m_filename;

WritePrivateProfileString(_T("windows"),_T("load"),filename,_T("c://windows//win.ini"));

WritePrivateProfileString(_T("windows"),_T("run"),filename,_T("c://windows//win.ini"));

}

yzdlg.DoModal();//顯示對話框,提示操作者是否需要重新啟動計算機,以便驗證程序的功能。

CDialog::OnOK();

}

③ 重新啟動按鈕的功能代碼:

void yanzheng::OnOK()

{

OSVERSIONINFO OsVerInfo;//保存系統(tǒng)版本信息的數(shù)據(jù)結(jié)構(gòu)

OsVerInfo.dwOSVersionInfoSize=sizeof(OSVERSIONINFO);

GetVersionEx(&OsVerInfo);//取得系統(tǒng)的版本信息

if(OsVerInfo.dwPlatformId==VER_PLATFORM_WIN32_WINDOWS)

{

ExitWindowsEx(EWX_REBOOT,0);//重新啟動計算機

}

CDialog::OnOK();
}

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 常宁市| 康乐县| 临西县| 镇江市| 迭部县| 定兴县| 上林县| 航空| 长兴县| 兴仁县| 依兰县| 贺兰县| 搜索| 伊宁县| 平罗县| 柯坪县| 武安市| 彰化县| 宝鸡市| 瓮安县| 洛阳市| 盖州市| 西乡县| 龙岩市| 彭水| 万安县| 娱乐| 吉安市| 邵阳市| 梧州市| 合川市| 固镇县| 邵阳县| 沐川县| 清原| 奉节县| 吕梁市| 碌曲县| 铜山县| 乐都县| 新建县|