Russian Qt Forum

Qt => Общие вопросы => Тема начата: Vega от Февраль 25, 2011, 08:56



Название: Посоветуйте как читать названия папок в реестре
Отправлено: Vega от Февраль 25, 2011, 08:56
В QT не особо разбираюсь, но срочно нужну реализовать такой код который будет читать имена папок и вложенных в них имена папок, по этому пути HKEY_LOCAL_MACHINE,"SYSTEM\\CurrentControlSet\\Enum\\USBSTOR

пробую переделать этот код, но пока результат нулевой...((

Код:
#include <QtCore>
#include <windows.h>
int main(int argc, char *argv[])
{
    QCoreApplication app(argc, argv);

LONG retVal=0;
DWORD Index=0;
DWORD dwTypeCode;
char KeyParam[256];
char KeyValue[256];
DWORD dwKeyParamLength = sizeof(KeyParam);
DWORD dwKeyValueLength = sizeof(KeyValue);
LONG lnResult;
HKEY hKey;
retVal=RegOpenKeyExA(HKEY_LOCAL_MACHINE,"Hardware\\Devicemap\\Serialcomm", 0, KEY_READ, &hKey);
qDebug() << "RegOpenKeyExA =" << retVal;
while (RegEnumValueA(hKey, Index, KeyParam, &dwKeyParamLength, NULL,
&dwTypeCode, (BYTE *)KeyValue, &dwKeyValueLength) == ERROR_SUCCESS) {
if(dwTypeCode == REG_SZ) {
qDebug() << "Index=" << Index;
qDebug() << "KeyParam=" << KeyParam;
qDebug() << "dwKeyParamLength=" << dwKeyParamLength;
qDebug() << "dwTypeCode=" << dwTypeCode;
qDebug() << "KeyValue=" << KeyValue;
qDebug() << "dwKeyValueLength=" << dwKeyValueLength;
        }
        ++Index;
        dwKeyParamLength = sizeof(KeyParam);
        dwKeyValueLength = sizeof(KeyValue);
}
retVal=RegCloseKey(hKey);
qDebug() << "RegCloseKey=" << retVal;

    return app.exec();
}


Название: Re: Посоветуйте как читать названия папок в реестре
Отправлено: Пантер от Февраль 25, 2011, 09:59
Кури QSettings.


Название: Re: Посоветуйте как читать названия папок в реестре
Отправлено: garryHotDog от Февраль 26, 2011, 20:53
Присоединяюсь к предыдущему посту....если не прокатит вот пример без использования QT...описанные ниже ф-ии читают значение ComputerName в SYSTEM\\ControlSet001\\Control\\ComputerName\\ComputerName :
Код
C++ (Qt)
BOOL GetComputerName_G1(LPTSTR lpBuffer,ULONG* lpnSize)
{
BOOL result = FALSE;
 
if( lpBuffer && lpnSize )
{
char kname[MAX_PATH]= "SYSTEM\\ControlSet001\\Control\\ComputerName\\ComputerName";
 
char cComputerName[MAX_PATH]="ComputerName";
 
CRegKey regKey;
 
if( regKey.Open(HKEY_LOCAL_MACHINE,kname) == ERROR_SUCCESS )
{
result = (regKey.QueryStringValue(cComputerName,lpBuffer,lpnSize) == ERROR_SUCCESS) ;
regKey.Close();
}
}
return(result);
}
 
//--------------------------------------------------------
using:
char cn[MAX_PATH]={'\0'};
ULONG sz = MAX_PATH;
 
BOOL b1 = GetComputerName_G1(cn,&sz);
//--------------------------------------------------------
BOOL GetComputerName_G2(LPTSTR lpBuffer,DWORD* lpnSize)
{
BOOL result = FALSE;
 
if( lpBuffer && lpnSize )
{
char kname[MAX_PATH]= "SYSTEM\\ControlSet001\\Control\\ComputerName\\ComputerName";
 
char cComputerName[MAX_PATH]="ComputerName";
 
HKEY hKey;
 
if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, kname, 0, KEY_READ, &hKey) == ERROR_SUCCESS)
{
result = (RegQueryValueEx( hKey, cComputerName, NULL, NULL, (LPBYTE)lpBuffer, lpnSize) == ERROR_SUCCESS)
 
RegCloseKey(hKey);
}
}
 
 
return(result);
}
//--------------------------------------------------------
using:
char cn[MAX_PATH]={'\0'};
DWORD sz = MAX_PATH;
BOOL b2 = GetComputerName_G2(cn,&sz);
//--------------------------------------------------------
 


Название: Re: Посоветуйте как читать названия папок в реестре
Отправлено: Vega от Февраль 28, 2011, 08:46
QSettings ключи читает, но  вот названия разделов никак не получается, может кто сталкивался с такой проблемой?


Название: Re: Посоветуйте как читать названия папок в реестре
Отправлено: kuzulis от Февраль 28, 2011, 09:17
Вот как вариант, еще: http://www.prog.org.ru/topic_12943_0.html


Название: Re: Посоветуйте как читать названия папок в реестре
Отправлено: Vega от Февраль 28, 2011, 10:01
так же папки не читает...(


Название: Re: Посоветуйте как читать названия папок в реестре
Отправлено: Пантер от Февраль 28, 2011, 10:03
QStringList QSettings::childGroups () const