文章編號: 816162 - 上次校閱: 2007年5月21日 - 版次: 2.4

如何撰寫您自己的登錄存取使用基底類別程式庫在 Visual C++.NET 或 Visual C++ 2005年中的函式

全部展開 | 全部摺疊

結論

本文說明如何使用 Microsoft Visual C++。 NET 或 Microsoft Visual C++ 2005年存取登錄。 執行此動作撰寫您自己的登錄存取函式使用了基底類別程式庫。

使用 「 登錄類別和 RegistryKey 類別

Microsoft.NET、 登錄 類別和 RegistryKey 類別中提供登錄的控制項。

這些類別的定義存在 Microsoft.Win32 命名空間中以及 mscorlib.dll 的組件。 在使用這些類別之前,您必須使用命名空間和組件。

若要存取沒有任何限制登錄,使用 [ Microsoft.Win32 命名空間中的 [ 登錄 ] 類別和 RegistryKey 類別]。

登錄 類別有七個欄位成員,讓您存取登錄的特定區域。 很類似開啟登錄機碼。 所有這些成員傳回至 RegistryKey 類別的指標。
摺疊此表格展開此表格
ClassesRootWindows 登錄基底機碼 HKEY_CLASSES_ROOT。
CurrentConfigWindows 登錄基底機碼 HKEY_CURRENT_CONFIG。
CurrentUserWindows 登錄基底機碼 HKEY_CURRENT_USER。
DynDataWindows 登錄基底機碼 HKEY_DYN_DATA。
LocalMachineWindows 登錄基底機碼的方式。
PerformanceDataWindows 登錄基底機碼 HKEY_PERFORMANCE_DATA。
使用者Windows 登錄基底金鑰 HKEY_USERS。

建立 Visual C++.NET 或 Visual C++ 2005年應用程式

建立主控台應用程式專案讀取和寫入登錄,藉由使用 登錄 類別和 RegistryKey 類別。 要這麼做,請您執行下列步驟:
  1. 啟動 Microsoft Visual Studio.NET 或 Microsoft Visual Studio 2005 中執行。
  2. 在 [ 檔案 ] 功能表上指向 [ 新增 ,] 然後按一下 [ 專案 ]。
  3. 在 Microsoft Visual Studio.NET 2002,按一下 [ 專案類型 ,] 下的 [ Visual C++ 專案 ],再在 [ 範本 ] 下按 管理 C + + 應用程式 ]。

    在 Visual Studio.NET 2003 Microsoft,按一下 [ 專案類型 ,] 下的 [ Visual C++ 專案 ],再在 [ 範本 ] 下按 主控台應用程式 (.NET) ]。

    在 Visual 的 Studio 2005 中按一下 [ 專案類型 下的 [ Visual C++ ],再在 [ 範本 ] 下按 CLR 主控台應用程式 ]。
  4. 在 [ 名稱 ] 文字方塊中輸入 登錄 ,],再按 [確定] ]。
  5. 開啟 Registry.cpp 的檔案,然後再新增下列程式碼下方將 # include 指示詞:
    using namespace System;
    using namespace System::Diagnostics;
    using namespace Microsoft::Win32;
    
  6. 加入下列程式碼下使用上方 _tmain() 函式的陳述式。

    附註 在 Visual 的 Studio 2005 中函式是 main () 函式
    void WriteRegistry(RegistryKey __gc* ParentKey , String __gc* SubKey , String __gc* ValueName , Object *Value )
    {
    	RegistryKey __gc* Key;
        try
    	{
    		//Open the registry key.
    		Key = ParentKey->OpenSubKey(SubKey,true);
    		if (!Key) //if the key does not exist.
    		{
                //Create the Subkey
    			Key = ParentKey->CreateSubKey(SubKey);
    		}
            
    		//Set the value.
    		Key->SetValue(ValueName, Value);
    
    		Console::WriteLine(S"Value:{0} for {1} is successfully written.", Value, ValueName);
    	}
    	catch (Exception *e)
    	{
    		Console::WriteLine(S"Error occurs in WriteRegistry", e->Message); 
    	}
    }
    
    void ReadRegistry( RegistryKey __gc* ParentKey , String __gc* SubKey, String __gc* ValueName , Object *Value)
    {
        RegistryKey __gc* Key;
        try
    	{
            //Open the registry key.
            Key = ParentKey->OpenSubKey(SubKey, true);
    
            if (!Key)	//if the key does not exist
    		{
                throw new Exception(S"The registry key does not exist");
    		}
    
            //Get the value.
    		Value = Key->GetValue(ValueName);
    
    		Console::Write(S"Value:{0} for {1} is successfully retrieved.", Value, ValueName);
    	}
    	catch( Exception *e)
    	{
    		Console::Write(S"Error occurs in ReadRegistry", e->Message );
    	}
    }
    附註 您必須加入通用語言執行階段支援的編譯器選項 (/ clr:oldSyntax) 在 Visual C++ 2005 成功編譯先前的程式碼範例中。 在 Visual C++ 2005年中新增通用語言執行階段支援編譯器選項,請遵循這些步驟:
    1. 按一下 [ 專案 ],然後再按一下 <ProjectName> 屬性

      附註 <ProjectName> 是專案的名稱的預留位置。
    2. 展開 [ 組態屬性 ,然後按一下 [ 一般
    3. 按一下以選取 通用語言執行階段支援、 舊的語法 (/ clr:oldSyntax) 通用語言執行階段支援 專案設定中在右窗格中,請在按一下 [ 套用 ],再按 [確定]
    如需有關公用語言執行時間支援的編譯器選項,請造訪下列 Microsoft 網站:
    / clr (通用語言執行階段編譯)
    http://msdn2.microsoft.com/en-us/library/k8d11d4s.aspx (http://msdn2.microsoft.com/en-us/library/k8d11d4s.aspx)
  7. 取代 int _tmain() 函式所產生的 Visual C++.NET 使用下列程式碼。

    附註 在 Visual 的 Studio 2005 中函式是
    int _tmain(int argc, _TCHAR* argv[])
    {
    	Int32 i = 123;
    	System::Object* obj = __box(i);
    	WriteRegistry(Registry::CurrentUser, S"Software\\MySoftware", S"Count", obj);
    
        Object * Value;
    	ReadRegistry(Registry::CurrentUser, S"Software\\MySoftware", S"Count", Value);
    
    	Console::ReadLine();
    }
    
    main () 函式。
  8. 按下 F5 以執行應用程式。
附註 此程序會建立登錄機碼,稱為 MySoftware HKEY_CURRENT_USER\Software 子機碼下建立 DWORD 值,稱為計算 MySoftware 機碼下。 計算的值為 123

?考

如需有關類別和命名空間中這份文件所使用的其他資訊,請造訪下列 Microsoft 網站 (英文):
http://msdn2.microsoft.com/en-us/library/microsoft.win32.registrykey(vs.71).aspx (http://msdn2.microsoft.com/en-us/library/microsoft.win32.registrykey(vs.71).aspx)
http://msdn2.microsoft.com/en-us/library/microsoft.win32.registry(vs.71).aspx (http://msdn2.microsoft.com/en-us/library/microsoft.win32.registry(vs.71).aspx)
http://msdn2.microsoft.com/en-us/library/microsoft.win32(vs.71).aspx (http://msdn2.microsoft.com/en-us/library/microsoft.win32(vs.71).aspx)

這篇文章中的資訊適用於:
  • Microsoft Visual C++ 2005 Express Edition
  • Microsoft Visual C++ .NET 2003 Standard Edition
  • Microsoft Visual C++ .NET 2002 Standard Edition
  • Microsoft .NET Framework 1.1
  • Microsoft .NET Framework 1.0
關鍵字:?
kbmt kbregistry kbhowtomaster KB816162 KbMtzh
機器翻譯機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:816162? (http://support.microsoft.com/kb/816162/en-us/ )
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。
 

文章翻譯