2007年6月10日日曜日

レジストリの処理

iniファイルは使えるAPIがわからないので、レジストリを使うことにした

レジストリの操作に用意されたAPI
  • RegOpenKeyEx
  • RegCreateKeyEx
  • RegCloseKey
  • RegQueryValueEx
  • RegSetValueEx
が使えそう
他には

  • RegistryGetString
  • RegistrySetString

なんてのもあるけど、状態および通知ブローカー API のネイティブ関数って書いてある。
レジストリ操作には使えないのだろうか?

とりあえず RegQueryValueEx を使う
今のところフォルダの指定だけを保存するのでこんな感じにした


#define SZ_REG_ROOT TEXT("Software\\umalab\\nasuvi")
#define SZ_REG_FOLDER TEXT("FOLDER")

//***************************
// レジストリの読込
//***************************
{
HKEY HKey;
long lErr;
DWORD dwSize=0;

lErr = RegOpenKeyEx(HKEY_CURRENT_USER, SZ_REG_ROOT,0,KEY_READ,&HKey);
if(ERROR_SUCCESS==lErr)
{
dwSize=(MAX_PATH+1)*sizeof(TCHAR);
lErr=RegQueryValueEx(HKey, SZ_REG_FOLDER, 0, 0, (LPBYTE)&gFolderName, &dwSize);
RegCloseKey(HKey);
}
if((dwSize>=0) || (ERROR_SUCCESS!=lErr))
{
wcscpy(gFolderName,TEXT("\\My Documents\\マイ ピクチャ\\"));
}
}

//***************************
// レジストリへの書き込み
//***************************
{
HKEY HKey;
DWORD dw;
long lErr;
lErr = RegOpenKeyEx(HKEY_CURRENT_USER, SZ_REG_ROOT,0,KEY_READ,&HKey);
if(lErr!=ERROR_SUCCESS)
lErr = RegCreateKeyEx (HKEY_CURRENT_USER, SZ_REG_ROOT,0,0,REG_OPTION_NON_VOLATILE,KEY_WRITE,0,&HKey,&dw);

if(lErr==ERROR_SUCCESS)
{
DWORD dwSize = (wcslen(gFolderName)+1) * sizeof(TCHAR);
RegSetValueEx(HKey, SZ_REG_FOLDER, 0, REG_SZ, (LPBYTE)&gFolderName, dwSize);
RegCloseKey(HKey);
}
}

0 件のコメント: