日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

用VC++修改注册表----让我们踏出第一步(适合初学者)

發布時間:2023/12/4 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 用VC++修改注册表----让我们踏出第一步(适合初学者) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
用VC++修改注冊表----讓我們踏出第一步(適合初學者)
轉載自:www.csdn.net
??開場白

???????你是不是非常期待通過自己的雙手,寫出一個有模有樣的"系統修改(維護)工具軟件"?我想答案應該是肯定的!而你也許也知道,這些工具所包含的很多功能,其實都是仰賴Windows注冊表;通過修改注冊表可以實現對系統相關參數的修改.也許這樣講來,你還是覺得不著邊際,好,不要急,讓我以這篇文章,告訴你一些你必須知道的事情,在你能夠真正動手修改注冊表之前.我假定這篇文章的讀者是初學者,我盡量用最簡單的筆調來講述如何修改注冊表,為的是使你即刻明白如何做,我絕不會故弄玄虛。但當然,你必須對Windows操作系統有一定認知,并具備基本的VC
++編程基礎(如果不是這樣,建議你就此打住,不要再往下看了--我不想浪費你的時間).

注冊表到底是什么東西?

?

????注冊表到底是什么東西?也許它經常在你的口頭出現,但我現在要你即刻講出來它到底是什么東西,有些什么用,如何產生作用?你能嗎?如果不能,請耐心看完這部分;否則,請跳過之。

????????Windows的注冊表包含了Windows的系統配置、PC機的硬件配置、Win32應用程序和用戶的其他設置信息。注冊表和INI文件不同,它是多層次的樹狀數據結構,具有六個分支(根鍵),每個分支又由許多的鍵和鍵值組成,而每個鍵則代表一個特定的配置項目。最直觀的一個實例就是,為什么Windows下的不同用戶可以擁有各自的個性化設置,如不同的墻紙,不同的桌面。這就是通過注冊表來實現的。

你必須清楚的幾個詞:

主鍵:(在NT下又稱為項)你可以認為這是整個注冊表結構中的一層,有點兒類似于資源管理器中的目錄樹結構。所以它的圖標與文件夾的圖標有點兒想像

字符串值:顧名思義,一串ASCII碼字符。

二進制值:這沒啥多說的,0101是也!

實例要出場了!

???????你如何知道要實現你想要的功能必須經由修改注冊表的哪一項來做到呢?哦,市面有一大堆的"羅列"注冊表各項的書(其實是手冊),隨便去挑一本吧,我保證你掏得起這個腰包.

???????實際編程的過程中你會遇到兩個問題:一個是如何訪問(讀取)注冊表,另一個是如何修改注冊表,而往往最吸引人的恐怕是后者.讓我們用實例來說話!

  假設你現在要實現的編程任務是,從注冊表獲知本機的用戶名,以及公司名稱。然后,將它們改成你想要指定的名稱。

在Visual?C
++?6.0中新建一基于對話框的工程,設置兩個命令按鈕,名為“Inquire”和“Modify”,分別用來查詢和修改。

說明:用戶的信息位于系統注冊表中?\HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\?的位置,鍵值名RegisteredOwner和RegisteredOrganization分別表示用戶的姓名和用戶公司的名稱。你絕對可以從那些“注冊表手冊”中查到。

1.查詢用戶信息的代碼?
HKEY?hKEY;?
//定義有關的?hKEY,?在查詢結束時要關閉。?
LPCTSTR?data_Set="Software\\Microsoft\\Windows\\CurrentVersion\\";?
//打開與路徑?data_Set?相關的?hKEY,第一個參數為根鍵名稱,第二個參數表。?
//表示要訪問的鍵的位置,第三個參數必須為0,KEY_READ表示以查詢的方式。?
//訪問注冊表,hKEY則保存此函數所打開的鍵的句柄。?
long?ret0=(::RegOpenKeyEx(HKEY_LOCAL_MACHINE,data_Set,?0,?KEY_READ,?&hKEY));?
if(ret0!=ERROR_SUCCESS)?//如果無法打開hKEY,則終止程序的執行?
{MessageBox("錯誤:?無法打開有關的hKEY!");?
return;}?
//查詢有關的數據?(用戶姓名?owner_Get)。?
LPBYTE?owner_Get=new?BYTE[80];?
DWORD?type_1
=REG_SZ?;?DWORD?cbData_1=80;??
//hKEY為剛才RegOpenKeyEx()函數所打開的鍵的句柄,"RegisteredOwner"。?
//表示要查?詢的鍵值名,type_1表示查詢數據的類型,owner_Get保存所。?
//查詢的數據,cbData_1表示預設置的數據長度。?
long?ret1=::RegQueryValueEx(hKEY,?"RegisteredOwner",?NULL,?
&type_1,?owner_Get,?&cbData_1);?
if(ret1!=ERROR_SUCCESS)?
{?
MessageBox(
"錯誤:?無法查詢有關注冊表信息!");?
return;?
}?
//?查詢有關的數據?(公司名?company_Get)?
LPBYTE?company_Get=new?BYTE?[80];?
DWORD?type_2
=REG_SZ;?DWORD?cbData_2=80;??
long?ret2=::RegQueryValueEx(hKEY,?"RegisteredOrganization",?NULL,&type_2,company_Get,?&cbData_2);?
if(ret2!=ERROR_SUCCESS)?
{?
MessageBox(
"錯誤:?無法查詢有關注冊表信息!");?
return;?
}?
//?將?owner_Get?和?company_Get?轉換為?CString?字符串,?以便顯示輸出。?
CString?str_owner=CString(owner_Get);?
CString?str_company
=CString(company_Get);?
delete[]?owner_Get;?delete[]?company_Get;?
//?程序結束前要關閉已經打開的?hKEY。?
::RegCloseKey(hKEY);?
……?
這樣,上述程序執行完畢,字符串str_owner和str_company則表示查詢到的用戶的姓名和公司的名稱,在VC
++中便可用對話框的方式將其顯示出來。?
2.修改用戶信息的代碼?
注意和上述的查詢代碼屬于不同的函數體。?
在程序中我們先顯示一個對話框,要求用戶輸入新的用戶姓名和公司名稱并按確認鍵,將取得CString類型的有關字符串。要先將其轉換為LPBYTE(即unsigned?
char*)型的數據類型,以便后面的函數調用。下面是程序中用到的將CString型轉換為LPBYTE的轉換函數:?
LPBYTE?CString_To_LPBYTE(CString?str)?
{?
LPBYTE?lpb
=new?BYTE[str.GetLength()+1];??
?
for(int?i=0;?ibr>?  lpb[str.GetLength()]=0;?
return?lpb;?
}?
以下則是具體的修改注冊表用戶信息的代碼:?
CString?str_owner,?str_company;?
……?
//通過對話框輸入新的用戶信息,保存到str_owner和str_company?
//定義有關的?hKEY,?在程序的最后要關閉。?
HKEY?hKEY;??
LPCTSTR?data_Set
="Software\\Microsoft\\Windows\\CurrentVersion";?

轉載于:https://www.cnblogs.com/yjm0105/archive/2005/05/26/162887.html

總結

以上是生活随笔為你收集整理的用VC++修改注册表----让我们踏出第一步(适合初学者)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。