コンソール AP でレジストリ読み取り

コンソール AP で,レジストリを読み取るために以下の様な関数を用意した.


  int Reg_GetInt (HKEY hKey,LPCTSTR subKey,LPCTSTR ent,const int defValue=0)
  {
     DWORD value = defValue ;
  #ifdef _ATL_VER
     {
       CRegKey reg ;
       reg.Open(hKey,subKey) ;
     #if (_ATL_VER >= 0x700)
       reg.QueryDWORDValue(ent,value) ;
     #else
       reg.QueryValue(value,ent) ;
     #endif
       }
  #else
     {
       HKEY hSecKey = NULL ;
       LONG openStatus = ::RegOpenKeyEx(hKey,subKey,0,KEY_READ,&hSecKey) ;
       if (hSecKey == NULL) { return value ; }
       DWORD type = REG_NONE ;
       DWORD count = sizeof(DWORD) ;
       LONG queryStatus = ::RegQueryValueEx(hSecKey,ent,NULL,&type,(LPBYTE)&value,&count) ;
       ::RegCloseKey(hSecKey) ;
       }
  #endif
     return int(value) ;
     }
*::Reg~ などのエラーチェックは省いている.
呼出すのはこんな感じ.
  int value = ::Reg_GetInt(HKEY_CURRENT_USER,_T(“Software\\Iwao\\Test\\RegAcc”),_T(“T_RegKey_DW”)) ;


CWinApp::GetProfileInt などが使えないかとやってみたが,…
1. AfxGetApp() を呼びだしても,NULL で戻ってくる.
  次の様に領域を確保.
    CWinApp theApp;
2. SetRegistryKey(key) が直接呼びたせないので,
  class C_SRK_WinApp : public CWinApp {
  public:
       void SetRegKey (LPCTSTR key) { SetRegistryKey(key) ; }
     } ;
  変数の確保は次の様に変更.
    C_SRK_WinApp theApp ;
3. SetRegistryKey の中で ASSERT(m_pszAppName != NULL)
  以下を追加して,CWinApp を初期化.
     AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0) ;
4. これで CWinApp::GetProfileInt は利用できるようになるが,CWinApp::m_pszProfileName が邪魔.
   C_SRK_WinApp* app = (C_SRK_WinApp*)AfxGetApp() ;
   int val = app->GetProfileInt(_T(“Test\\RegAcc”),_T(“T_RegKey_DW”),0) ;
  HKCU\Software\Iwao\(m_pszProfileName)\Test\RegAcc となってしまう.
5. m_pszProfileName を _T(“”) とすることにより,意図した値を取得できる様にはなった.
   C_SRK_WinApp* app = (C_SRK_WinApp*)AfxGetApp() ;
   if (app != NULL) {
     AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0) ;
     app->SetRegKey(_T(“Iwao”)) ;
     free((void*)app->m_pszProfileName) ;
     app->m_pszProfileName = _tcsdup(_T(“”)) ;
     int val = app->GetProfileInt(_T(“Test\\RegAcc”),_T(“T_RegKey_DW”),0) ;
     }


コンソール AP で CWinApp::GetProfileInt などを使うことは,やめ.

この投稿は役に立ちましたか? 役に立った 役に立たなかった 0 人中 0 人がこの 投稿 は役に立ったと言っています。

  にほんブログ村 IT技術ブログへ



コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください