前のトピック: RegSetValue - レジストリ キーとテキスト文字列の関連付け次のトピック: 文字列操作関数


RegSetVariable - レジストリ キーへの変数の保存

Windows 上で有効

RegSetVariable 関数によって、指定されたレジストリ キーに変数が保存されます。

このレジストリ操作関数の形式は、以下のとおりです。

RegSetVariable(hKey as Integer, name as String, value as Integer) as Boolean
RegSetVariable(hKey as Integer, name as String,	value as String) as Boolean
RegSetVariable(hkey as integer, name as string, buffer as void, bufsize as integer) as integer.
RegSetVariable(hkey as integer, name as string, buffer as void, bufsize as integer, type as integer) as integer.
hKey

現在開いているキーまたは事前定義されたキーを指定します。 hKey パラメータには、以下のいずれかの事前定義された値を指定できます。

HKEY_CLASSES_ROOT
HKEY_CURRENT_USER
HKEY_LOCAL_MACHINE
HKEY_USERS
name

設定する変数の名前を指定します。

value

変数に設定する文字列または整数値を指定します。

buffer

変数に設定する値を含むバッファです。

bufsize

バッファのタイプが string である場合、タイプ char の配列である場合、バッファのサイズは chars 単位で指定されます。それ以外の場合は、バイト数が指定されます。

type

レジストリ エントリのタイプ。

レジストリ エントリのタイプが Microsoft の表記法で返されました。

REG_NONE

値: 0

REG_SZ

値: 1

REG_EXPAND_SZ

値: 2

REG_BINARY

値: 3

REG_DWORD

値: 4

REG_DWORD_LITTLE_ENDIAN

値: 5

REG_DWORD_BIG_ENDIAN

値: 6

REG_LINK

値: 7

REG_MULTI_SZ

値: 8

この関数が正常に完了すると、TRUE が返されます。それ以外の場合は、FALSE が返されます。

例: RegSetVariable 関数

以下の例を開始する前に、RegOpenKey の例を実行してください。

Dim value as string
Dim hkey1 as integer
Dim name, str, dummy as string
Dim i, i1, rtr, int as integer
Dim bBuf[100] as Byte
Dim cBuf[100] as char

ClrScr()

hkey1 = RegOpenKey(HKEY_LOCAL_MACHINE, "SOFTWARE¥CA¥4 test only")
if hkey1 = 0 then
	Print("RegOpenKey failed.")
	exit
endif

rtr = RegQueryVariable(hkey1, "var_2", str, int)
Print(Str(rtr) + ": var_2 = " + str)
int = 100
str = ""
rtr = RegQueryVariable(hkey1, "var_2", dummy, int, str)
Print(Str(rtr) + ": var_2(" + Str(int) + ") = " + str)
int = 100
str = ""
rtr = RegQueryVariable(hkey1, "var_2", dummy, int, cBuf)
for i1 = 0 to int - 1
	str = str + cBuf[i1]
next i1
Print(Str(rtr) + ": var_2(" + Str(int) + ") = " + str)
int = 100
str = "| "
rtr = RegQueryVariable(hkey1, "var_2", dummy, int, bBuf)
for i1 = 0 to int - 1
	str = str + Str(bBuf[i1]) + " | "
next i1
Print(Str(rtr) + ": var_2(" + Str(int) + ") = " + str)

RegCloseKey(hkey1)

SetMode64 - Windows 64 ビット レジストリおよびファイル システムへのアクセス

DMScript 関数は、Windows レジストリにアクセスしてプログラムを起動できます。 DMScript は 32 ビット アプリケーションであるため、DMScript が 64 ビット Windows OS 上で実行される場合、OS は特定のルールを課します。 特定のキーに関するレジストリ アクセスは、並列の 32 ビット レジストリ領域に自動的にリダイレクトされます。 たとえば、HKLM¥SOFTWARE¥xxx へのアクセスは HKLM¥SOFTWARE¥Wow6432Node¥xxx にリダイレクトされます。 リダイレクトされるキーの完全なリストについては、http://msdn.microsoft.com/en-us/library/aa384253(v=vs.85).aspx を参照してください。

同様に、システム ディレクトリを参照する特定の環境変数を使用して、ファイル システムにアクセスすると、32 ビット バイナリが含まれるディレクトリに自動的にリダイレクトされます。 たとえば、%windir%¥System32 ディレクトリは、64 ビット アプリケーション用に予約されています。 DMScript は、このディレクトリへのアクセスを試行すると、%windir%¥SysWOW64 に自動的にリダイレクトされます。 詳細については、http://msdn.microsoft.com/en-us/library/aa384187(v=vs.85).aspx を参照してください。

スクリプトは、正しい 64 ビット レジストリ キーおよびファイル システムにアクセスすることにより、64 ビット アプリケーションを検出する必要があるため、この動作は Intellisig スクリプトにとって重要です。 たとえば、Intellisig が HKLM¥SOFTWARE¥7-zip 内で 64 ビット バージョンの 7-Zip に関してレジストリ キーの読み取りを試行する場合、実際には HKLM¥SOFTWARE¥Wow6432Node¥7-zip を検索しますが、それは存在しないため、スクリプトが失敗します。 同様に、64 ビット バージョンの Notepad に関して %windir%¥System32 の検索を行うと、32 ビット バージョンが検索されます。

この動作を処理するために、DMScript は、64 ビット Windows OS への自動的なリダイレクトをオフにする以下の機能を提供しています。

setmode64(mode)
mode

リダイレクトをオフまたはオンにする必要があるかどうかを指定します。 値 1 はリダイレクトをオフにし、値 0 はオンにします。
例: setmode64(1)

注: 64 ビット モードの場合、HKLM¥SOFTWARE¥Wow6432Node¥xxx などの物理名を使用して 32 ビット レジストリにアクセスします。 ただし、Windows の今後のバージョンでリダイレクト方法が変化する可能性があるため、Microsoft はこの方法を推奨していません。 代わりに、スクリプトを 32 ビット モードに戻す必要があります。

重要: より長い期間ファイル システム リダイレクトを無効にすると、dmscript がシステム DLL をロードできなくなり、失敗する場合があります。