保存したり、設定を取得するのにはレジストリ API を使用するには、方法

文書翻訳 文書翻訳
文書番号: 145679
すべて展開する | すべて折りたたむ

目次

概要

Visual Basic には、SaveSetting および GetSetting 関数が含まれていますが保存し、これらの関数は、レジストリから情報を取得するのにはVisual Basic、VBA は、レジストリの特定のセクションの動作します。HKEY_CURRENT_USER ルート キーのプログラムの設定。

この資料では、使用可能な 32 ビット Windows API 関数の説明します。設定するために使用し、検索から任意の場所、レジストリに値をします。トピックここで関数が参照する一般化されたプログラムには、16 ビットのレジストリに。

32 ビット API 関数は、セキュリティがも、セキュリティの概要については、この資料の範囲外です。

注: SaveSetting および GetSetting 関数、VBA の一部ではないです。関数ライブラリ。ただし、以下のサンプル コードが 32 ビットに完全にのみ適用されます。VBA を実装するアプリケーションを指定します。

詳細

一般的なレジストリ情報

レジストリのアプリケーションや Windows 構成の保存に使用されます。データです。これは、交換用ディスクに多数の INI ファイルです。Windows 3.x コンピューター ケースが増えて、また頻繁に OLE によって使用されます。

レジストリのキーと値の階層の一連を使用して構成されていますツリーのような。六つのあらかじめ定義されたルートのいずれかで始まる各キーキー、サブキー、およびそれに関連付けられている値ことができます。キーします。組織と名前付けの単位とは、Windows レジストリ エディターに表示されますファイルのフォルダーにします。値はデータ エントリをであり、テキストのエントリとして表示されます、レジストリ エディター ウィンドウの右側のウィンドウ。キーは、関連付けられている必要はありません。多くがあります。各値は、関連付けられたデータ型があります。2 つ最も一般的に使用されるレジストリ データ型が REG_SZ の null で終了です。文字列を返します。また、REG_DWORD、32 ビットの数値。

書き込みまたはレジストリの場所からの読み取りに使用する基本的な手順です。同じです。任意の指定されたキーまたは値を参照するには、ハンドルを必要なキーです。このハンドルの取得後は、キーのサブキーと値は、このハンドルを参照するのには読み取り、設定、または (列挙型) の一覧を表示できます。

このキーへのハンドルを取得するのには、レジストリ内の場所を指定することが必要六つの定義済みキー (HKEY_CLASSES_ROOT のいずれかで開始します。HKEY_CURRENT_USER、HKEY_LOCAL_MACHINE、HKEY_USERS、HKEY_CURRENT_CONFIG、およびHKEY_DYN_DATA) と、任意のキーになるまで、レジストリ ツリーを走査します。到達しました。ユーザー プログラムよく読み書きを HKEY_CURRENT_USER と[HKEY_LOCAL_MACHINE]。処理しているキーが既に存在する場合は、使用することができます。一連の RegOpenKey または RegOpenKeyEx 関数を呼び出す。場合は、キー作成する必要があります、ジョブ、RegCreateKey、および RegCreateKeyEx 関数を実行します。

任意のキーへのハンドルと、関数は、リストの設定をするために使用され取得情報を呼び出すことができます。すべての場合、関数が、Exサフィックスは、32 ビット プラットフォーム上でのみ動作します。関数のサフィックスが付いていない可能性があります。16 ビットと 32 ビットの両方のバージョンの Windows で動作します。点に注意してください、ないです。'Ex' サフィックスのないすべてのレジストリ関数が用意されている関数には16 ビット互換性。Ex サフィックスがのみいつ追加されたの機能16 ビットの機能拡張を実施しました。まったく新しいと特定された関数32 ビットのプラットフォームには、Ex 拡張子を持ちません。

RegSetValue や RegSetValueEx 関数は値の設定を許可します。変更するには、中 RegQueryValue、RegQueryValueEx の取得、現在の設定値。非 Ex、16 ビット バージョンの制限事項これらの Api のここでは明白です。16 ビットの RegSetValue を使用する場合関数が名前、値、し、この RegSetValue のための方法はありません。各キーに複数の値を関連付けることはできません。さらに、RegSetValue に書き込まれるすべての値を REG_SZ データ型であります。これら制限は、16 ビットのレジストリに固有です。RegSetValueEx できます、値の個数が複数で利用可能なデータ ・ タイプを作成します。

レジストリの特定の場所への書き込みをする方法

あと、どのような機能をプロジェクトに使用する必要があります、関連する宣言から、コードをこの資料の末尾にコピーします。基本的なモジュールです。含まれている 2 つの Visual Basic の手順 (SetValueEx とQueryValueEx) RegSetValueEx と RegQueryValueEx API のラッパーのです機能およびその使用を大幅に簡略化します。以下の注意事項の使用Visual Basic 機能です。ただし、自由に直接呼び出しを行うには、必要な場合は API です。

作成変更キーと値。

宣言と手順は利用可能で、開くし、ことができますを作成キーを変更、および追加の値を読み取る。次の 3 つのセクションキーを作成、設定値を変更や値を照会する方法を説明します。

新しいキーを作成します。

新しいキーを作成、次の手順を使用するように簡単です。CreateNewKey を作成するには、キーと定数の名前になりますキーの下に作成するのには、定義済みのキーを表します。呼び出しRegCreateKeyEx の許可のセキュリティ メカニズムを利用しない、これを行うに変更可能性があります。レジストリ セキュリティを説明します。この資料の範囲外。
   Private Sub CreateNewKey (sNewKeyName As String, lPredefinedKey As Long)
       Dim hNewKey As Long         'handle to the new key
       Dim lRetVal As Long         'result of the RegCreateKeyEx function

       lRetVal = RegCreateKeyEx(lPredefinedKey, sNewKeyName, 0&, _
                 vbNullString, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, _
                 0&, hNewKey, lRetVal)
       RegCloseKey (hNewKey)
   End Sub
				

ここでの呼び出し。
   CreateNewKey "TestKey", HKEY_LOCAL_MACHINE
				

HKEY_LOCAL_MACHINE のすぐ下にある TestKey と呼ばれるキーを作成します。

CreateNewKey では次のように呼び出します。
      CreateNewKey "TestKey\SubKey1\SubKey2", HKEY_LOCAL_MACHINE
				

3 つの入れ子になったキーを TestKey で始まるを作成すぐ下にあります。HKEY_CURRENT_USER、SubKey1 TestKey、および SubKey3 の下に下位します。SubKey2。

値/設定を変更します。

作成し、指定したキーの値を設定と実行します。次の簡単な手順します。SetKeyValue が、キー、値値、値の設定名と、関連付けられる、値の種類 (REG_SZ のみ、SetValueEx 関数をサポートし、修正が必要な場合は変更できます)。新しい値を指定します。既存の sValueName の現在の設定値を変更します。
   Private Sub SetKeyValue (sKeyName As String, sValueName As String, _
   vValueSetting As Variant, lValueType As Long)
       Dim lRetVal As Long         'result of the SetValueEx function
       Dim hKey As Long         'handle of open key

       'open the specified key
       lRetVal = RegOpenKeyEx(HKEY_CURRENT_USER, sKeyName, 0, _
                                 KEY_SET_VALUE, hKey)
       lRetVal = SetValueEx(hKey, sValueName, lValueType, vValueSetting)
       RegCloseKey (hKey)
   End Sub
				

呼び出し:
   SetKeyValue "TestKey\SubKey1", "StringValue", "Hello", REG_SZ
				

「文字列」の設定で REG_SZ と呼ばれる型の値を作成します「こんにちは」この値は"TestKey"のキー SubKey1 に関連付けられてです。

この例では、"TestKey"のサブキー HKEY_CURRENT_USER がこれをすることができます。RegOpenKeyEx への呼び出しを変更して変更します。この呼び出しは失敗する場合"TestKey\SubKey1"は存在しません。この問題を回避するには、呼び出しを使用します。RegOpenKeyEx への呼び出しの代わりに RegCreateKeyEx。RegCreateKeyEx を開く既に存在する場合は、指定されたキー。

値のクエリを実行します。

既存の設定を確認するのには、次の手順を使用できます。値です。QueryValue は、キーの名前と値の名前になりますそのキーとメッセージ] ボックスに対応するディスプレイ関連値です。下に定義されている QueryValueEx のラッパー関数への呼び出しを使用して、REG_SZ と REG_DWORD の種類のみをサポートします。
   Private Sub QueryValue (sKeyName As String, sValueName As String)
       Dim lRetVal As Long         'result of the API functions
       Dim hKey As Long         'handle of opened key
       Dim vValue As Variant      'setting of queried value

       lRetVal = RegOpenKeyEx(HKEY_CURRENT_USER, sKeyName, 0, _
   KEY_QUERY_VALUE, hKey)
       lRetVal = QueryValueEx(hKey, sValueName, vValue)
       MsgBox vValue
       RegCloseKey (hKey)
   End Sub
				

この手順では、呼び出し。
   QueryValue "TestKey\SubKey1", "StringValue"
				

「文字列」の現在の設定と、メッセージ ボックスが表示されます。値し、「文字列」に"TestKey\SubKey1"のキーが存在することを前提としています。

クエリは、値が存在しないかどうか、クエリ値が返されます、2 - 'ERROR_BADKEY' のエラー コード。

注意事項:

上記の例では、拡張の 32 ビット バージョンのレジストリを使用してください。排他的に機能します。これらの関数に複数の値を許可します。各キーに関連付けられています。16 ビットの RegSetValue 上で説明したように、RegQueryValue 法では、現在のキーに関連付けられた、単一の値 (常に、種類が REG_SZ のです)。これらの関数は 32 ビットを表示します。レジストリ エディターに<no name="">の名前します。設定、変更、またはこれを照会するのには特別な関連付けられている値をいずれかの 16 ビットのレジストリ関数を使用する必要があります。ほとんどは 16 ビット環境で、レジストリの読み書きされます。32 ビット環境よりも簡単。同じ基本的な手順が表示されます。キーを開きのハンドルを取得し、変更関数を呼び出すそのハンドルがない考慮が必要な複数の関連付けを可能にするには値またはデータ型を別の値にします。16 ビット アプリケーションを作成することができます。キーと値が、RegCreateKey の宣言を変更します。RegOpenKey、RegQueryValue、RegSetValue、RegCloseKey 関数。</no>

場合によっては、キーに関連付けられている値を必要はありません。アプリケーションのみ、特定のキーまたは値の存在と、知っておくべきことがあり、キーの値の性質についていません注意してください。このような状況では、RegEnumKeyEx、RegEnumKey、RegEnumValue の機能に使用することができます。キーまたは値が存在するかどうかを確認します。詳細についてはこれらの関数は、API のテキスト ビューアーや Windows API への参照を参照してください。

API 関数および定数の宣言

   Option Explicit

   Public Const REG_SZ As Long = 1
   Public Const REG_DWORD As Long = 4

   Public Const HKEY_CLASSES_ROOT = &H80000000
   Public Const HKEY_CURRENT_USER = &H80000001
   Public Const HKEY_LOCAL_MACHINE = &H80000002
   Public Const HKEY_USERS = &H80000003

   Public Const ERROR_NONE = 0
   Public Const ERROR_BADDB = 1
   Public Const ERROR_BADKEY = 2
   Public Const ERROR_CANTOPEN = 3
   Public Const ERROR_CANTREAD = 4
   Public Const ERROR_CANTWRITE = 5
   Public Const ERROR_OUTOFMEMORY = 6
   Public Const ERROR_ARENA_TRASHED = 7
   Public Const ERROR_ACCESS_DENIED = 8
   Public Const ERROR_INVALID_PARAMETERS = 87
   Public Const ERROR_NO_MORE_ITEMS = 259

   Public Const KEY_QUERY_VALUE = &H1
   Public Const KEY_SET_VALUE = &H2
   Public Const KEY_ALL_ACCESS = &H3F

   Public Const REG_OPTION_NON_VOLATILE = 0

   Declare Function RegCloseKey Lib "advapi32.dll" _
   (ByVal hKey As Long) As Long
   Declare Function RegCreateKeyEx Lib "advapi32.dll" Alias _
   "RegCreateKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, _
   ByVal Reserved As Long, ByVal lpClass As String, ByVal dwOptions _
   As Long, ByVal samDesired As Long, ByVal lpSecurityAttributes _
   As Long, phkResult As Long, lpdwDisposition As Long) As Long
   Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias _
   "RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, _
   ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As _
   Long) As Long
   Declare Function RegQueryValueExString Lib "advapi32.dll" Alias _
   "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As _
   String, ByVal lpReserved As Long, lpType As Long, ByVal lpData _
   As String, lpcbData As Long) As Long
   Declare Function RegQueryValueExLong Lib "advapi32.dll" Alias _
   "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As _
   String, ByVal lpReserved As Long, lpType As Long, lpData As _
   Long, lpcbData As Long) As Long
   Declare Function RegQueryValueExNULL Lib "advapi32.dll" Alias _
   "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As _
   String, ByVal lpReserved As Long, lpType As Long, ByVal lpData _
   As Long, lpcbData As Long) As Long
   Declare Function RegSetValueExString Lib "advapi32.dll" Alias _
   "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, _
   ByVal Reserved As Long, ByVal dwType As Long, ByVal lpValue As _
   String, ByVal cbData As Long) As Long
   Declare Function RegSetValueExLong Lib "advapi32.dll" Alias _
   "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, _
   ByVal Reserved As Long, ByVal dwType As Long, lpValue As Long, _
   ByVal cbData As Long) As Long
				

SetValueEx と QueryValueEx のラッパー関数:
   Public Function SetValueEx(ByVal hKey As Long, sValueName As String, _
   lType As Long, vValue As Variant) As Long
       Dim lValue As Long
       Dim sValue As String
       Select Case lType
           Case REG_SZ
               sValue = vValue & Chr$(0)
               SetValueEx = RegSetValueExString(hKey, sValueName, 0&, _
                                              lType, sValue, Len(sValue))
           Case REG_DWORD
               lValue = vValue
               SetValueEx = RegSetValueExLong(hKey, sValueName, 0&, _
   lType, lValue, 4)
           End Select
   End Function

   Function QueryValueEx(ByVal lhKey As Long, ByVal szValueName As _
   String, vValue As Variant) As Long
       Dim cch As Long
       Dim lrc As Long
       Dim lType As Long
       Dim lValue As Long
       Dim sValue As String

       On Error GoTo QueryValueExError

       ' Determine the size and type of data to be read
       lrc = RegQueryValueExNULL(lhKey, szValueName, 0&, lType, 0&, cch)
       If lrc <> ERROR_NONE Then Error 5

       Select Case lType
           ' For strings
           Case REG_SZ:
               sValue = String(cch, 0)

   lrc = RegQueryValueExString(lhKey, szValueName, 0&, lType, _
   sValue, cch)
               If lrc = ERROR_NONE Then
                   vValue = Left$(sValue, cch-1)
               Else
                   vValue = Empty
               End If
           ' For DWORDS
           Case REG_DWORD:
   lrc = RegQueryValueExLong(lhKey, szValueName, 0&, lType, _
   lValue, cch)
               If lrc = ERROR_NONE Then vValue = lValue
           Case Else
               'all other data types not supported
               lrc = -1
       End Select

   QueryValueExExit:
       QueryValueEx = lrc
       Exit Function

   QueryValueExError:
       Resume QueryValueExExit
   End Function
				

関連情報

Windows 95 ユーザー インターフェイス、「第 10 章 - プログラミング"を使用して、レジストリの」

関数への参照は: 任意のガイドに、Win16 または Win32 API。

プロパティ

文書番号: 145679 - 最終更新日: 2011年7月1日 - リビジョン: 3.0
キーワード:?
kbhowto kbtophit kbcode kbmt KB145679 KbMtja
機械翻訳の免責
重要: このサポート技術情報 (以下「KB」) は、翻訳者による翻訳の代わりに、マイクロソフト機械翻訳システムによって翻訳されたものです。マイクロソフトは、お客様に、マイクロソフトが提供している全ての KB を日本語でご利用いただけるように、翻訳者による翻訳 KB に加え機械翻訳 KB も提供しています。しかしながら、機械翻訳の品質は翻訳者による翻訳ほど十分ではありません。誤訳や、文法、言葉使い、その他、たとえば日本語を母国語としない方が日本語を話すときに間違えるようなミスを含んでいる可能性があります。マイクロソフトは、機械翻訳の品質、及び KB の内容の誤訳やお客様が KB を利用されたことによって生じた直接または間接的な問題や損害については、いかなる責任も負わないものとします。マイクロソフトは、機械翻訳システムの改善を継続的に行っています。
英語版 KB:145679
Microsoft Knowledge Base の免責: Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。

フィードバック

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com