2008-05-21

レジストリの読み書き

Windows Mobileにはレジストリの読み書きを簡単に行えるAPIがあります。
 
DWORD型のデータを扱うのであれば、RegistryGetDWORD()RegistrySetDWORD()といった具合です。
とても簡単にレジストリにアクセスできるので毎回重宝しているのですが、実はこれWindowsMobile5.0からの機能で、本家の(?) Windowsでは使えないようです。
 
職場で「WindowsのドメインにログインしたときにIEのプロキシ設定を無効にしたい」という相談を受けたのですが、かなり古いマシンで新たにPowerShellを入れたりするような余裕は無いとの事でした。 (PowerShellがあればレジストリの変更は楽ですよね)
普段ZERO3で遊んでいる事が役に立つ時だと思ってツールの作成を引き受けました。
 
プロキシの設定は HKLM\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ProxyEnableにあるので、Windows Mobileならこんな感じでしょうか。
#define REG_ROOT    HKEY_CURRENT_USER
#define REG_PATH    _T("Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings")
#define REG_VALUE   _T("ProxyEnable")

DWORD dwData = 0L;

if (S_OK == RegistrySetDWORD(REG_ROOT, REG_PATH, REG_VALUE, dwData)) {
    SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, 0, 0);
}
 
ところが、前述の通り本家にはRegistrySetDWORD()はありませんでした。
RegOpenKeyEx()でレジストリを開いて、RegSetValueEx()で書き込み、RegCloseKey()で終了というステップを踏まなければならないようです。
HKEY    hSubkey = NULL;
DWORD   dwData  = 0L;

if (ERROR_SUCCESS == RegOpenKeyEx(HKEY_CURRENT_USER, REG_PATH, 0, KEY_ALL_ACCESS, &hSubkey)) {
    if (hSubkey) {
        if (ERROR_SUCCESS == RegSetValueEx(hSubkey, REG_VALUE, 0, REG_DWORD, (const PBYTE)&dwData, sizeof(dwData))) {
               SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, 0, 0);
           }
       }
       RegCloseKey(hSubkey);
   }
}
 
普段は 本家にあって Windows Mobileに無い機能ばかりが目につきますが、本家よりも気の利いたAPIもあるのだと思うとちょと嬉しくなりますね。
 

0 件のコメント: