RegEnumValue(A)

なでしこでWindowsAPIを使う時の書式を各API毎にソースを載せています。
返信する
choco
管理人
記事: 279
登録日時: 2011年5月30日(月) 10:44

RegEnumValue(A)

投稿記事 by choco »

# 2011/6/15修正2 平沼(99yen)

●RegOpenKeyEx(hKey,lpSubKey,ulOptions,samDesired,phkResult) =DLL("advapi32.dll",
"LONG RegOpenKeyExA(
HKEY hKey, // 開いている親キーのハンドル
LPCTSTR lpSubKey, // 開くべきサブキーの名前
DWORD ulOptions, // 予約済み
DWORD samDesired, // セキュリティアクセスマスク
PHKEY hKeyA // 開くことに成功したサブキーのハンドル
)")

●RegEnumValue(hKey,dwIndex,{参照渡し}pValueName,pcbValueName,pReserved,pType,{参照渡し}pData,pcbData) =DLL("advapi32.dll",
"LONG RegEnumValueA(
HKEY hKey, // キーのハンドル
DWORD dwIndex, // 値のインデックス
PTSTR pValueName, // 値の名前を格納するバッファ
PDWORD pcbValueName, // lpValueNameのサイズを入れた変数
PDWORD pReserved, // 予約(NULLを指定)
PTSTR pType, // 値のタイプを格納するバッファ
PBYTE pData, // 値のデータを格納するバッファ
PDWORD pcbData // lpDataのサイズを入れた変数
)")

●RegCloseKey(hKey) =DLL("advapi32.dll",
"LONG RegCloseKey(
HKEY hKey
)")

RegEnumHndとは整数
RegSubkeyHndとは整数
Mとは配列
Nとは整数=0
RETとは整数
PR_NAMEとは配列
NET_PRとは配列
LOCAL_PRとは配列

// バッファサイズ定義
!BUF_SIZE = 256
// レジストリ用定数
!ERROR_SUCCESS = 0
!KEY_ALL_ACCESS = $000F003F
!KEY_READ = $20019

!HKEY_CURRENT_USER = $80000001 // 追加
!HKEY_LOCAL_MACHINE = $80000002

!ERROR_NO_MORE_ITEMS = $103
!ERROR_MORE_DATA = $EA

// サブキー列挙用
VALUE_SIZEとは整数 = BUF_SIZE
VALUE_BUFとは文字列
VALUE_BUFにBUF_SIZEを確保
VALUEとは文字列
// サブキー用
KEY_SIZEとは整数 = BUF_SIZE
KEY_BUFとは文字列
KEY_BUFにBUF_SIZEを確保
KEYとは文字列

// キーを開く
RegOpenKeyEx(HKEY_CURRENT_USER,`Software\Microsoft\Windows NT\CurrentVersion\PrinterPorts`,0,KEY_READ,POINTER(RegEnumHnd))

オンの間
 KEY_SIZE = BUF_SIZE
 VALUE_SIZE = BUF_SIZE
 // 値を一つ取得
 RET = RegEnumValue(RegEnumHnd, N, KEY_BUF, POINTER(KEY_SIZE), 0, 0, VALUE_BUF, POINTER(VALUE_SIZE))
 // サブキーがこれ以上なければ終わる
 もし、RET != ERROR_SUCCESSならば
  抜ける
 N=N+1
 // 値を表示
 KEY=KEY_BUFから(KEY_SIZE)バイト左部分
 VALUE=VALUE_BUFから(VALUE_SIZE)バイト左部分
 PR_NAMEにKEYを配列追加
# KEYを表示
# VALUEを表示

RegCloseKey(RegEnumHnd)
#■プリンタを分離抽出する。■
PR_NAMEを反復
 ((対象の2バイト左部分)=『\\』)ならば
  NET_PRに対象を配列追加//ネットワークプリンタ
 違えば
  LOCAL_PRに対象を配列追加//ローカルプリンタ
終わる。
返信する