サブキーの下のすべてのレジストリキーをトラバース

// C ++ 11Demo.cpp:エントリポイントのコンソールアプリケーションを定義します。

//

 

#include "stdafx.hを"

書式#include <iostreamの>

名前空間stdを使用。

 

 

// QueryKey - キーのサブキーおよびそれに関連する値を列挙します。

// HKEY - そのサブキーと値列挙されるキー。

 

書式#include <WINDOWS.H>

書式#include <stdio.hに>

書式#include <TCHAR.H>

 

#define MAX_KEY_LENGTH 255

#define MAX_VALUE_NAME 16383

 

 

 

TCHAR pszSubPath [MAX_VALUE_NAME] = _ T( "SOFTWARE \\ WOW6432NODE \\のMicrosoft \\ Windowsの\\ CurrentVersionの\\アンインストール")。

 

//レジストリ。同期情報

構造体tagRegOper

{

      tagRegOper()

      {

           // pszAutoAccreditMark = _T( "C:\\プログラムファイル(x86の)\\ Kingsoftの\\ \\ SecManageパス");

           // pszSubPath = _T( "SOFTWARE \\ WOW6432NODE \\のMicrosoft \\ Windowsの\\ CurrentVersionの\\アンインストール")。

           pszKeyName = _T( "表示名")。

           dwRegType = REG_SZ。

           hkeyRootPath = HKEY_LOCAL_MACHINE。

           RegAccess = KEY_READ。

      }

      // Tcのःahri * Psshautoachchreditnark。

      // Tcのःahri * Psshsubfth。

      Tcのःahri * Psshkeyhnme。

      DWORD dwRegType;

      HKEY hkeyRootPath;

      REGSAM RegAccess;

}。

 

 

 

//レジストリから対応するキーを見つけ、つまり、同期情報を取得します

BOOL GetSynchroInfo(TCHAR * pszSubPath)

{

      tagRegOper regOper;

      HKEY HKEY;

      TCHAR szLocation [MAX_PATH] = { '\ 0'}。

      DWORD dwSize =はsizeof(DWORD)。

      DWORD dwIndex = 0。

 

      LONG LRET =のRegOpenKeyEx(regOper.hkeyRootPath、pszSubPath、0、regOper.RegAccess、&HKEY)。

 

      もし(ERROR_SUCCESS!= LRET)

      {

           //アサート(0);

           FALSEを返します。

      }

 

 

      LRET = RegQueryValueExの(HKEY、regOper.pszKeyName、0、&(regOper.dwRegType)、NULL、&dwSize)。

 

      LRET = RegQueryValueExの(HKEY、regOper.pszKeyName、NULL、&(regOper.dwRegType)、(LPBYTE)&szLocation、&dwSize)。

 

      //見つけることができません

      もし(ERROR_SUCCESS!= LRET)

      {

           //

      }

      Tcのःahri * Psspth = Sshlaoction。

 

      もし(_tcsclen(szLocation))

      {

           printf( "%sのを\ n"、pszpath)。

           TRUEを返します。

      }

      falseを返します。

 

}

 

 

TCHAR szLocation [MAX_PATH] = { '\ 0'}。

空QueryKey(HKEY HKEY)

{

      TCHAR achKey [MAX_KEY_LENGTH]。//サブキー名のバッファ

      DWORD cbName; //名前の文字列のサイズ

      TCHAR achClass [MAX_PATH] = TEXT( "")。//クラス名のバッファ

      DWORD cchClassName = MAX_PATH。//クラス文字列のサイズ

      DWORD cSubKeys = 0。//サブキーの数

      DWORD cbMaxSubKey; //最長のサブキーサイズ

      DWORD cchMaxClass; //最長クラス文字列

      DWORD cValues; //キーの値の数

      DWORD cchMaxValue; //最長値の名前

      DWORD cbMaxValueData; //最長値データ

      DWORD cbSecurityDescriptor; //セキュリティ記述子のサイズ

      FILETIME ftLastWriteTimeフィールド; //最終書き込み時刻

 

      DWORD I、RETCODE。

      LONG LRET;

 

      TCHAR achValue [MAX_VALUE_NAME]。

      DWORD cchValue = MAX_VALUE_NAME。

      DWORD dwRegType = REG_SZ。

      DWORD dwSize =はsizeof(DWORD)。

 

      //クラス名と値の数を取得します。

      RETCODE = RegQueryInfoKey(

           HKEY、//キーのハンドル

           achClass、//クラス名のバッファ

           &cchClassName、//クラス文字列のサイズ

           NULL、//予約

           &cSubKeys、//サブキーの数

           &cbMaxSubKey、//最長のサブキーサイズ

           &cchMaxClass、//最長クラス文字列

           &cValues、//このキーの値の数

           &cchMaxValue、//最長値の名前

           &cbMaxValueData、//最長値データ

           &cbSecurityDescriptor、//セキュリティ記述

           &ftLastWriteTimeフィールド); //最終書き込み時刻

 

      RegEnumKeyExが失敗するまで//、サブキーを列挙します。

 

      もし(cSubKeys)

      {

           printf( "\サブキーのnNumber:%Dを\ n"、cSubKeys)。

 

           用(i = 0; iはcSubKeysを<; iは++)

           {

                 _tcscpy(pszSubPath、_T( "SOFTWARE \\ WOW6432NODE \\のMicrosoft \\ Windowsの\\ CurrentVersionの\\アンインストール\\"));

                 cbName = MAX_KEY_LENGTH。

                 RETCODE = RegEnumKeyEx(HKEY、I、

                      achKey、

                      &cbName、

                      ヌル、

                      ヌル、

                      ヌル、

                      &ftLastWriteTimeフィールド);

                 もし(RETCODE == ERROR_SUCCESS)

                 {

                      _tprintf(TEXT( "(%d)が%S \ n")、I + 1、achKey)。

                      _tcscat(pszSubPath、achKey)。

                      GetSynchroInfo(pszSubPath)。

                 }

           }

      }

}

 

空_tmain(無効)

{

      HKEY hTestKey;

 

      (のRegOpenKeyEx(HKEY_LOCAL_MACHINE場合、

           TEXT( "SOFTWARE \\のMicrosoft \\ Windowsの\\ CurrentVersionの\\アンインストール")、

           0、

           KEY_READ、

           &hTestKey)== ERROR_SUCCESS

           )

      {

           QueryKey(hTestKey)。

      }

}

 

おすすめ

転載: www.cnblogs.com/gd-luojialin/p/10962955.html