レジストリへのアクセス

  RegQueryInfoKey ( キーが持つ情報の取得 )



  
DWORD	Values;
DWORD	MaxValueNameLen;
DWORD	MaxValueLen;

nRet = RegQueryInfoKey(
			Handle,
			NULL,
			NULL,
			NULL,
			NULL,
			NULL,
			NULL,
			&Values,
			&MaxValueNameLen,
			&MaxValueLen,
			NULL,
			NULL
		);
if ( nRet != ERROR_SUCCESS ) {
	printf("%s\n", "INFO error" );
	return false;
}

printf( "レジストリエントリの数 = %d\n", Values );
printf( "最長の名前を持つレジストリエントリの名前の長さ = %d\n", MaxValueNameLen );
printf( "最長のデータを持つレジストリエントリのデータの長さ = %d\n", MaxValueLen );

  



  RegOpenKeyEx ( キーのハンドル取得 )



  
LONG	nRet;
HKEY	Handle = 0;
	
nRet = RegOpenKeyEx(
	HKEY_LOCAL_MACHINE,
	"キーのパス",
	0,
	KEY_ALL_ACCESS,
	&Handle
);

if ( nRet != ERROR_SUCCESS ) {
	printf("%s\n", "OPEN error" );
	return false;
}

  

  
"キーのパス" は例えば "SOFTWARE\Microsoft\Windows\CurrentVersion" と指定します
  



  RegEnumValue ( キーが持つ値の列挙 )

  
RegOpenKeyEx で取得した Handle を使用して、regedit の 右側のエリアに表示される一覧の取得ができます
  

  
DWORD		i;
char		*szValueName;
char		*szValue;
DWORD		type;
DWORD		memsize = 1024;
DWORD		size;
DWORD		size2;

szValueName	= new char[memsize];
szValue		= new char[memsize];

i = 0;
while( 1 ) {

	size	= 1024;
	size2	= 1024;

	nRet = RegEnumValue(
		Handle,
		i,
		szValueName,
		&size,
		NULL,
		&type,
		(LPBYTE)szValue,
		&size2
	);
	if ( nRet != ERROR_SUCCESS ) {
		if ( nRet == ERROR_NO_MORE_ITEMS ) {
			break;
		}
		else {
			break;
		}
	}

	szValueName[size] = 0x00;		
	printf( "%s\n", szValueName );

	i++;

}

delete [] szValue;
delete [] szValueName;

  

一般的なタイプは、以下のようになります
  • REG_BINARY
  • REG_DWORD
  • REG_EXPAND_SZ
  • REG_SZ

  • REG_EXPAND_SZ のタイプのデータを実際の値に展開するには、ExpandEnvironmentStrings を使用します



      RegCloseKey

      
    RegCloseKey( Handle );
    
      



      RegEnumKeyEx ( キーの列挙 )

    基本的に「RegEnumValue」と使用法は同じです。しかし、RegEnumKeyEx では、FILETIME 構造体を利用
    する場合がある為、ここでは その方法を示しています

      
    DWORD		i;
    char		*szKeyName;
    DWORD		memsize = 1024;
    DWORD		size;
    FILETIME		ft;
    SYSTEMTIME	st;
    
    szKeyName	= new char[memsize];
    
    i = 0;
    while( 1 ) {
    
    	size = 1024;
    
    	nRet = RegEnumKeyEx(
    		Handle,
    		i,
    		szKeyName,
    		&size,
    		NULL,
    		NULL,
    		NULL,
    		&ft
    	);
    	if ( nRet != ERROR_SUCCESS ) {
    		break;
    	}
    
    	FileTimeToSystemTime( &ft, &st );
    	printf(
    		"%02d-%02d-%02d %02d:%02d:%02d ",
    		st.wYear,
    		st.wMonth,
    		st.wDay,
    		st.wHour,
    		st.wMinute,
    		st.wSecond
    	);
    	printf("%s\n",szKeyName );
    
    	i++;
    
    }
    
    delete [] szKeyName;
    
    
      










      infoboard   管理者用   
    このエントリーをはてなブックマークに追加





    フリーフォントWEBサービス
    SQLの窓WEBサービス

    SQLの窓フリーソフト

    素材

    一般WEBツールリンク

    SQLの窓

    フリーソフト

    JSライブラリ