Иллюстрированный самоучитель по Visual Studio.Net


Поиск в реестре


Алгоритм поиска в реестре основан на предварительном анализе тех записей, которые внесла в него Studio.Net 7.0. Если параметры вашей установки отличаются от тех, которые использованы здесь, то вам надо провести анализ записей реестра по Ключу: HKEY_LOCAL_MACHINE\ SOFTWARE\ Microsoft\VisualStudio\7.0 И найти в них такое поле Value, которое содержит путь к папке со Studio.Net. Введите в класс еще одну функцию, которая пытается найти путь к файлу winError.h, используя записи в реестре Windows.

string CLookDlg: string CLockDlg::GetPathFromRegistry(void)

{

HKEY hkey; // Описатель ключа реестра

TCHAR path[MAX_PATH] ; // Временный буфер

TCHAR vs[] =

// Строка для поиска ключа

//"SOFTWARE\\Microsoft\\VisualStudio\\7.0\\Setup\\VC";

DWORD dw, d;

//====== Пытаемся найти ключ и открыть его,

//====== затем пробуем открыть второй ключ (subkey)

//====== и прочесть его запись (value)

bool ok = ::RegOpenKeyEx (HKEY_LOCAL_MACHINE, vs, 0,

KEY_READ, Shkey)== ERROR_SUCCESS && ::RegQueryValueEx (hkey,"ProductDir", 0, Sdw, (LPBYTE)path, &d) == ERROR_SUCCESS;

string sPath = "";

//====== Дополняем путь именем папки и файла

if (ok)

sPath = CString(path) + "\\Include\\Winerror.h";

return sPath; }

Поиск в реестре производится с помощью API-функций RegOpenKeyEx и RegQueryValueEx, первая из которых ищет и открывает ключ, заданный текстовой строкой, а вторая — ищет значение (value), связанное с открытым ключом. Результатом первой операции является Windows-описатель открытого ключа, который помещается по адресу hkey. Вторая операция требует задать hkey и имя искомого значения (в нашем случае — это ProductDir), а ее результатом является собственно значение (в нашем случае — полный путь к папке, где расположена Studio.Net). Если имя пусто, то функция возвращает значение по умолчанию (default).

Файл WinError.h расположен в папке Include, вложенной в папку Studio.Net. Поэтому мы дополняем найденный путь именем папки и файла.


Начало  Назад  Вперед