Russian Qt Forum

Qt => Дополнительные компоненты => Тема начата: IGHOR от Март 26, 2010, 04:17



Название: JulyRegApi v1.2 - класс на Qt для удобной работы с реестром Windows
Отправлено: IGHOR от Март 26, 2010, 04:17
JulyRegApi v1.2 - класс на Qt для удобной работы с реестром Windows

Примечания:
Все функции являются статическими и можно использовать их не создавая переменных класса.
В функцию regWrite можно передавать значения в типах: QByteArray, QString, Int.
Код:
Тип HKEY_LIST может принимать такие значения в соответствии с веткой реестра:
HK_CLASSES_ROOT
HK_CURRENT_USER
HK_LOCAL_MACHINE
HK_USERS
HK_CURRENT_CONFIG

Функции для получения и записи значений реестра:
Код:
static QString regReadString(HKEY_LIST,QString path, QString val); //Фукнция для чтения REG_SZ текстовой строки возвращающая QString
static QByteArray regReadArray(HKEY_LIST,QString path, QString val); //Фукнция для чтения REG_BINARY массивов возвращающая QByteArray
static int regReadInt(HKEY_LIST,QString path, QString val); //Фукнция для чтения REG_DWORD возвращающая Int

static bool regWrite(HKEY_LIST,QString path, QString val, QString data, bool createSubKeys=true); //Функция для записи значения из QString в REG_SZ, при флаге createSubKeys=true создаются все ветки если конечного ключа не существует
static bool regWrite(HKEY_LIST,QString path, QString val, QByteArray data, bool createSubKeys=true); //Функция для записи значения из QByteArray в REG_BINARY, флаг createSubKeys делает то что уже написано выше
static bool regWrite(HKEY_LIST,QString path, QString val, int data, bool createSubKeys=true); //Функция для записи значения из int в REG_DWORD, флаг createSubKeys делает то что уже написано выше

static bool regRemove(HKEY_LIST,QString path); //Удаление ключа path со всеми значениями. Удаление не произойдет если существуют подветки
static bool regRemove(HKEY_LIST,QString path, QString val); //Удаление значения val из ветки path
если удалось удалить ветку то обе функции возвратят true если нет то false

Системные функции:
Код:
static QString shellUserName(); //Возвращает Имя текущего пользователя
static QString shellComputerName(); //Возвращает Имя компьютера
static QString shellUserTemp(); //Возвращает путь временной папки пользователя
static QString shellSystemTemp(); //Возвращает системный путь временной папки
static QString shellWindowsDir(); //Возвращает путь к папке Windows

static void shellSetTempDir(QString); //Изменяет путь временной папки пользователя и системы на указанную
 
Пример записи в реестр:
Код:
JulyRegApi::regWrite(JulyRegApi::HK_LOCAL_MACHINE,"SOFTWARE\\GigaSOFT\\SomeSoft","SomeKeyName",QString("Text writed there"));
в результате будет записано текст "Text writed there" в ключ "SomeKeyName" который находиться в ветке "HKEY_LOCAL_MACHINE\SOFTWARE\GigaSOFT\SomeSoft"
такой же формат записи в реестр для этой функции типов QByteArray и Int
 
Пример чтения из реестра:
Код:
QString myValue;
myValue=JulyRegApi::regReadString(JulyRegApi::HK_LOCAL_MACHINE,"SOFTWARE\\GigaSOFT\\SomeSoft", "SomeKeyName");
 
в результате myValue примет значение ключа "SomeKeyName" из ветки "SOFTWARE\\GigaSOFT\\SomeSoft"
если перед этим выполнить запись из примера выше то myValue=="Text writed there";
Формат параметров для функций regReadArray и regReadInt такой же как и в этом примере regReadString но возвращают они другой тип QByteArray и Int соответственно.

Скачать свежую версию класса можно отсюда: www.gigasoftgroup.com/JulyRegApi (http://www.gigasoftgroup.com/JulyRegApi)


Название: Re: JulyRegApi v1.1 - класс на Qt для удобной работы с реестром Windows
Отправлено: kuzulis от Март 26, 2010, 08:24
А без регистрации то на сайт не попасть.... :(

Может сюда прикрепите исходники?


Название: Re: JulyRegApi v1.1 - класс на Qt для удобной работы с реестром Windows
Отправлено: IGHOR от Март 26, 2010, 17:00
kuzulis, прикрепил


Название: Re: JulyRegApi v1.1 - класс на Qt для удобной работы с реестром Windows
Отправлено: zenden от Март 26, 2010, 17:55
Не хватает функции, которая бы возвращался список ключей по указанному пути.

Кстати, если уж вы используете malloc для выделения памяти, то используйте free для её освобождения.


Название: Re: JulyRegApi v1.1 - класс на Qt для удобной работы с реестром Windows
Отправлено: IGHOR от Март 26, 2010, 20:31
Не хватает функции, которая бы возвращался список ключей по указанному пути.

Кстати, если уж вы используете malloc для выделения памяти, то используйте free для её освобождения.

Потом обновлю версию класса и будет поиск по реестру и листинг ключей.
А delete с освобождением не справляеться?


Название: Re: JulyRegApi v1.1 - класс на Qt для удобной работы с реестром Windows
Отправлено: Пантер от Март 27, 2010, 10:34
new - delete
malloc - free


Название: Re: JulyRegApi v1.1 - класс на Qt для удобной работы с реестром Windows
Отправлено: kuzulis от Март 27, 2010, 13:11
1. Еще, как вариант, добавить Qt-шные макросы Q_WA и т.п. см. исходники QSettings. Да и в принципе можно всё завернуть по аналогии так как сделано там. (т.е можно под чистую передрать оттуда)
2. Плюс ко всему комментарии "по нормальному" сделать, типа Doxygen.
3. Ну и выложить на qt-apps.org и т.п. Пусть люди заценят!
4. Ну и еще, класс назвать как-то так, чтобы было более понятно что он делать должен, а то  JulyRegApi v1.1 - непонятно по названию что это такое

ЗЫ: ИМХО :)


Название: Re: JulyRegApi v1.2 - класс на Qt для удобной работы с реестром Windows
Отправлено: IGHOR от Март 27, 2010, 17:59
Пантер, уже исправил.
kuzulis, я буду рад помощи, переименуем в удобное название класс, сделаем его удобным, пишите фиксы и предложения сюда.
Имена всех кто поможет дописать класс напишем в коментах и readme а тогда выложим на qt-apps.org


Название: Re: JulyRegApi v1.2 - класс на Qt для удобной работы с реестром Windows
Отправлено: ритт от Март 29, 2010, 22:37
собственно, а чем QSettings не угодил?


Название: Re: JulyRegApi v1.2 - класс на Qt для удобной работы с реестром Windows
Отправлено: IGHOR от Март 29, 2010, 23:29
Константин, да, теперь я уже знаю как писать с помощью QSettings например в HKEY_CLASSES_ROOT
так что класс останется лишь примером совмещения типов WinAPI с типами переменных Qt
оставаться ли теме в форуме решать админам


Название: Re: JulyRegApi v1.2 - класс на Qt для удобной работы с реестром Windows
Отправлено: ритт от Март 30, 2010, 11:59
да пусть остаётся - нам-то, админам, что? :)


Название: Re: JulyRegApi v1.2 - класс на Qt для удобной работы с реестром Windows
Отправлено: Пантер от Март 30, 2010, 16:32
Нам, Татарам, всё равно. :)


Название: Re: JulyRegApi v1.2 - класс на Qt для удобной работы с реестром Windows
Отправлено: IGHOR от Апрель 11, 2010, 19:43
Нашелся плюс в моем классе, в QSettings нельзя записывать в REG_BINARY
Или все-таки есть способ в QSettings записать и читать REG_BINARY?


Название: Re: JulyRegApi v1.2 - класс на Qt для удобной работы с реестром Windows
Отправлено: RZX от Август 24, 2010, 12:47
Нашелся плюс в моем классе, в QSettings нельзя записывать в REG_BINARY
Или все-таки есть способ в QSettings записать и читать REG_BINARY?
Нет, не нашел таки способа через QSettings...

Попробовал воспользоваться Вашим классом, Qt 4.6.2 выдал следующее:

/src/JulyRegApi/julyregapi.cpp:13: error: invalid conversion from 'const ushort*' to 'const WCHAR*'
/src/JulyRegApi/julyregapi.cpp:13: error:   initializing argument 2 of 'LONG RegOpenKeyExW(HKEY__*, const WCHAR*, DWORD, REGSAM, HKEY__**)'
/src/JulyRegApi/julyregapi.cpp:17: error: invalid conversion from 'const ushort*' to 'const WCHAR*'
/src/JulyRegApi/julyregapi.cpp:17: error:   initializing argument 2 of 'LONG RegQueryValueExW(HKEY__*, const WCHAR*, DWORD*, DWORD*, BYTE*, DWORD*)'

ну и далее по списку.. Что где не так?


Название: Re: JulyRegApi v1.2 - класс на Qt для удобной работы с реестром Windows
Отправлено: kuzulis от Август 24, 2010, 15:45
Цитировать
ну и далее по списку.. Что где не так?

Да все не так. Посмотри в исходники QSettings (поищи в них функции RegOpenKeyEx и т.п где учавствует WCHAR и т.п.) и сравни как там и как тут.


Название: Re: JulyRegApi v1.2 - класс на Qt для удобной работы с реестром Windows
Отправлено: DmitryKSL от Сентябрь 13, 2010, 11:06
Объясните новичку, что делать то надо чтоб работало?
Вот код
Код:
#include "widget.h"
#include "ui_widget.h"
#include "QDebug"
#include "julyregapi.h"

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    JulyRegApi::regWrite(JulyRegApi::HK_LOCAL_MACHINE,"SOFTWARE\\GigaSOFT\\SomeSoft","SomeKeyName",QString("Text writed there"));

}
файлы julyregapi.h и julyregapi.cpp в проект добавил
Запускаю компиляцию чтоб проверить выдает кучу ошибок, теже что указано постом выше. Qt 4.6.2. Ругается только на строку JulyRegApi::regWrite ...


Название: Re: JulyRegApi v1.2 - класс на Qt для удобной работы с реестром Windows
Отправлено: DmitryKSL от Сентябрь 13, 2010, 11:21
Ругается при добавлении класса в проект - julyregapi.cpp, выше неточно указана причина.



Название: Re: JulyRegApi v1.2 - класс на Qt для удобной работы с реестром Windows
Отправлено: kuzulis от Сентябрь 13, 2010, 11:26
А ответ (№13)№14 выше по треду не судьба посмотреть?


Название: Re: JulyRegApi v1.2 - класс на Qt для удобной работы с реестром Windows
Отправлено: DmitryKSL от Сентябрь 13, 2010, 12:17
А ответ (№13)№14 выше по треду не судьба посмотреть?
Посмотрел, и чаво? Я так понял что класс не работает, пока исходники не поправишь? А где тогда он работает?


Название: Re: JulyRegApi v1.2 - класс на Qt для удобной работы с реестром Windows
Отправлено: kuzulis от Сентябрь 13, 2010, 12:30
Цитировать
Посмотрел, и чаво?
И таво.
Цитировать
Я так понял что класс не работает, пока исходники не поправишь?
Аха. Проблема поправить 4 строчки?
Цитировать
А где тогда он работает?
Хз


Название: Re: JulyRegApi v1.2 - класс на Qt для удобной работы с реестром Windows
Отправлено: DmitryKSL от Сентябрь 13, 2010, 12:33
Проблема поправить 4 строчки?
Проблема, иначе не писал бы. А вам жалко было написать что же там поправить надо.


Название: Re: JulyRegApi v1.2 - класс на Qt для удобной работы с реестром Windows
Отправлено: kuzulis от Сентябрь 13, 2010, 12:43
Цитировать
Проблема, иначе не писал бы. А вам жалко было написать что же там поправить надо.
А вам лень посмотреть исходники QSettings? Посмотрите наконец, или препираться будем? :)
http://qt.gitorious.org/qt/qt/blobs/4.6/src/corelib/io/qsettings_win.cpp

PS: Ищите по именам RegOpenKeyEx и т.п. и сравнивайте как оно сделано в JulyReg,
уделяя особое внимание этому:
Цитировать
reinterpret_cast<const wchar_t *>


Название: Re: JulyRegApi v1.2 - класс на Qt для удобной работы с реестром Windows
Отправлено: IGHOR от Октябрь 05, 2010, 00:28
RZX, класс работает только на VS 2008, а иначе надо типы подправить


Название: Re: JulyRegApi v1.2 - класс на Qt для удобной работы с реестром Windows
Отправлено: shmurva от Февраль 28, 2011, 21:54
Люди, выше текстом читал, что хотели поправить класс и оформить под другим именем.
Это уже сделано?


Название: Re: JulyRegApi v1.2 - класс на Qt для удобной работы с реестром Windows
Отправлено: IGHOR от Август 26, 2011, 21:10
Люди, выше текстом читал, что хотели поправить класс и оформить под другим именем.
Это уже сделано?
Это не будет сделано, почитайте детально о QSettings.
JulyRegApi остался как функциональный пример.