掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
RegEnumKeyExについて (ID:56088)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
どもども。 RegEnumKeyExを使って、アンインストール情報からDisplayNameとDisplayVersionを片っ端から取得する関数を作っています。 とりあえずメッセージボックスに次々と表示させるように作っているんですが・・・。 RegEnumKeyEx関数のヘルプを見て気になっていることがあります。 サブキーはインデックス番号の順に配置されているわけではないので、新しいサブキーを作成した場合、任意のインデックス番号が割り当てられます(現在の最大のインデックス番号に 1 を足した値とは限りません)。言い換えると、この関数で指定したインデックス番号と、返されるサブキーの間に直接の関係はなく、実行してみるまでは、どのサブキーが返されるのかわかりません。 と書かれているんです。 つまり、0から初めて、インクリメントをしてRegEnumKeyEx関数を実行しても、途中でキーが割り当てられていないところがあって、そこで取得が終わってしまうのでは・・・?と思っているんです。 以下のような関数の内容なのですが、2つ取得した時点で終わってしまいました。 私のソースに問題があるのかもしれませんが・・・ どなたかご存じの方、知恵を貸してください!! こんな関数です・・・ BOOL GetInstalledApp(HWND hWnd, LPCSTR SaveFileName) { FILETIME ft; DWORD lpcName; int n = 0; HKEY hKey, hKeyCurrent; LONG Result; char AppName[256]; char AppVersion[32]; char CurrentSubKey[256]; if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall", 0, KEY_READ, &hKey) != ERROR_SUCCESS) { return FALSE; } while(1) { Result = RegEnumKeyEx(hKey, n, CurrentSubKey, &lpcName, NULL, NULL, NULL, &ft); if(Result == ERROR_NO_MORE_ITEMS) { MessageBox(hWnd, "終わり", "終わり", MB_OK); break; } else if(Result == ERROR_SUCCESS) { MessageBox(hWnd, CurrentSubKey, "どう?", MB_OK); Result = RegOpenKeyEx(hKey, CurrentSubKey, 0, KEY_READ, &hKeyCurrent); if(Result != ERROR_SUCCESS) { MessageBox(hWnd, "サブキーのオープンに失敗", CurrentSubKey, MB_OK); RegCloseKey(hKey); return FALSE; } else { MessageBox(hWnd, "サブキーのオープンに成功", CurrentSubKey, MB_OK); } if(EmxGetRegString("DisplayName", AppName, sizeof(AppName), hKeyCurrent) == TRUE) { // MessageBox(hWnd, AppName, AppName, MB_OK); if(EmxGetRegString("DisplayVersion", AppVersion, sizeof(AppVersion), hKeyCurrent) == TRUE) { MessageBox(hWnd, AppName, AppVersion, MB_OK); } else { sprintf(AppVersion, "バージョン情報無し"); MessageBox(hWnd, AppName, AppVersion, MB_OK); } } RegCloseKey(hKeyCurrent); } n++; } RegCloseKey(hKey); return TRUE; }
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.