#ifdef UNICODE
typedef wchar_t TCHAR;
#else
typedef char TCHAR;
Доступ к реестру
подскажите пожалуйста как вытащить из реестра путь до установленной программы?
Никак.
почему никак? если приложение известно и оно сохраняет в какой-то ветке информацию о каталоге, тогда можно.
Paint.Net: HKLM\Software\Paint.Net\TargetDir
Perl: HKLM\Software\Perl\@
VirtualBox Additions: HKLM\Software\Oracle\VirtualBox Guest Additions\InstallDir
Firefox 4: HKLM\Software\Mozilla\Mozilla Firefox\4.0 (ru)\Main\Install Directory
.NetFW: HKLM\Software\Microsoft\.NetFramework\InstallRoot
Dev-cpp: HKLM\Software\Dev-C++\Install_Dir
Вобщем кто где хочет тот так и хранит
как в программе вытащить этот путь? подскажите где можно про этот вопрос прочитать
на мсдн
aks, опередил))
Пример:
aks, опередил))
Пример:
Код:
#include <iostream>
#include <Windows.h>
#include <tchar.h>
using std::cout;
using std::wcout;
using std::endl;
#ifdef _UNICODE
# define _tcout wcout
#else
# define _tcout cout
#endif // _UNICODE
int _tmain(int argc, _TCHAR* argv[])
{
// Устанавливаем русскую кодовую страницу для вывода кириллицы
_tsetlocale(LC_ALL, _T("Russain"));
// Строка которую будем писать в реестр
_TCHAR szTestString[] = _T("This is the test");
// Ключ который будем создавать
_TCHAR szPath[] = _T("Software\\RegistrySample\\");
HKEY hKey;
// Создаем ключ в ветке HKEY_CURRENT_USER
if(RegCreateKeyEx(HKEY_CURRENT_USER, szPath, 0, NULL, REG_OPTION_VOLATILE, KEY_WRITE, NULL, &hKey, NULL) != ERROR_SUCCESS){
_tcout << _T("При создании ключа произошла ошибка") << endl;
return 1;
}
// Пишем тестовую строку в созданный ключ
if(RegSetValueEx(hKey, _T("Test string"), 0, REG_SZ, (BYTE*)szTestString, sizeof(szTestString)) != ERROR_SUCCESS){
_tcout << _T("При записи строки произошла ошибка") << endl;
return 2;
}
// Закрываем описатель ключа
if(RegCloseKey(hKey) != ERROR_SUCCESS){
_tcout << _T("При закрытии ключа произошла ошибка") << endl;
return 3;
};
_TCHAR szBuf[MAX_PATH];
DWORD dwBufLen = MAX_PATH;
//открываем для чтения
if(RegOpenKeyEx(HKEY_CURRENT_USER,szPath,0,KEY_ALL_ACCESS,&hKey) != ERROR_SUCCESS){
_tcout << _T("При открытии ключа произошла ошибка") << endl;
return 4;
}
//Запрашиваем значение ключа
if(RegQueryValueEx(hKey,_T("Test string"),NULL,NULL,(BYTE*) szBuf,&dwBufLen) != ERROR_SUCCESS){
_tcout << _T("При чтении строки произошла ошибка") << endl;
return 5;
}
//Закрываем
if(RegCloseKey(hKey) != ERROR_SUCCESS){
_tcout << _T("При закрытии ключа произошла ошибка") << endl;
return 6;
}
_tcout << szBuf << endl;
_tsystem(_T("pause"));
return 0;
}
#include <Windows.h>
#include <tchar.h>
using std::cout;
using std::wcout;
using std::endl;
#ifdef _UNICODE
# define _tcout wcout
#else
# define _tcout cout
#endif // _UNICODE
int _tmain(int argc, _TCHAR* argv[])
{
// Устанавливаем русскую кодовую страницу для вывода кириллицы
_tsetlocale(LC_ALL, _T("Russain"));
// Строка которую будем писать в реестр
_TCHAR szTestString[] = _T("This is the test");
// Ключ который будем создавать
_TCHAR szPath[] = _T("Software\\RegistrySample\\");
HKEY hKey;
// Создаем ключ в ветке HKEY_CURRENT_USER
if(RegCreateKeyEx(HKEY_CURRENT_USER, szPath, 0, NULL, REG_OPTION_VOLATILE, KEY_WRITE, NULL, &hKey, NULL) != ERROR_SUCCESS){
_tcout << _T("При создании ключа произошла ошибка") << endl;
return 1;
}
// Пишем тестовую строку в созданный ключ
if(RegSetValueEx(hKey, _T("Test string"), 0, REG_SZ, (BYTE*)szTestString, sizeof(szTestString)) != ERROR_SUCCESS){
_tcout << _T("При записи строки произошла ошибка") << endl;
return 2;
}
// Закрываем описатель ключа
if(RegCloseKey(hKey) != ERROR_SUCCESS){
_tcout << _T("При закрытии ключа произошла ошибка") << endl;
return 3;
};
_TCHAR szBuf[MAX_PATH];
DWORD dwBufLen = MAX_PATH;
//открываем для чтения
if(RegOpenKeyEx(HKEY_CURRENT_USER,szPath,0,KEY_ALL_ACCESS,&hKey) != ERROR_SUCCESS){
_tcout << _T("При открытии ключа произошла ошибка") << endl;
return 4;
}
//Запрашиваем значение ключа
if(RegQueryValueEx(hKey,_T("Test string"),NULL,NULL,(BYTE*) szBuf,&dwBufLen) != ERROR_SUCCESS){
_tcout << _T("При чтении строки произошла ошибка") << endl;
return 5;
}
//Закрываем
if(RegCloseKey(hKey) != ERROR_SUCCESS){
_tcout << _T("При закрытии ключа произошла ошибка") << endl;
return 6;
}
_tcout << szBuf << endl;
_tsystem(_T("pause"));
return 0;
}
спасибо, пойду разбираться :)
а подскажите еще где можно разобраться с типами данных. допустим чем отличается char от tchar и т.д
Код:
Цитата: Gazzy
а подскажите еще где можно разобраться с типами данных.
http://msdn.microsoft.com/en-us/library/aa383751(v=vs.85).aspx
если только для строк:
http://msdn.microsoft.com/en-us/library/dd374131(v=vs.85).aspx