// 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)。
}
}