HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby
   
 
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 21.09.2016, 11:25
SR_team
Флудер
Регистрация: 26.10.2013
Сообщений: 4,924
С нами: 6603505

Репутация: 183


По умолчанию

Написал совсем не большой класс для работы с реестром. Это удобнее, чем использовать процедурные функции WinApi.

Класс позволяет писать, читать, удалять значения из ветки реестра.

Немного о параметрах
  • lpName- Имя ключа (аля индекс массива).
  • dwType- Тип записываемого в ключ значения (можно взять отсюда).
    • Чтение. Для значений, которые не являются строковыми и REG_NONE, размер определяется автоматически, если в maxSize указать 0.
    • Запись. Для значений, которые не являются REG_NONE, размер определяется автоматически, если в size указать 0.
  • outBuf- Указатель на переменную (массив) в которую будет записано значение.
  • inBuf- Указатель на переменную (массив) из которой будет взято значение.
  • maxSize- Максимально допустимый размер переменной (массива).
  • size- Размер переменной (массива).
  • hKey- Раздел реестра (можно взять отсюда).
  • lpSubKey- Путь к нужной ветке реестра, относительно раздела.

Цитата:
Сообщение от Спойлер  


C++:





Код:
#include 
#pragma comment (lib, "advapi32")
// Registry Value Types
// https://msdn.microsoft.com/ru-ru/library/windows/desktop/ms724884(v=vs.85).aspx
class
CLiteRegedit
{
public
:
CLiteRegedit
(
HKEY hKey
,
LPCSTR lpSubKey
)
{
_hKey
=
0
;
RegCreateKeyExA
(
hKey
,
lpSubKey
,
0
,
NULL
,
REG_OPTION_NON_VOLATILE
,
KEY_ALL_ACCESS
,
NULL
,
&
_hKey
,
NULL
)
;
}
~
CLiteRegedit
(
)
{
if
(
_hKey
!=
NULL
)
RegCloseKey
(
_hKey
)
;
}
bool
GetRegister
(
LPCSTR lpName
,
DWORD dwType
,
void
*
outBuf
,
DWORD maxSize
=
0
)
{
if
(
outBuf
==
nullptr
||
_hKey
==
NULL
)
return
false
;
if
(
!
strlen
(
lpName
)
)
return
false
;
if
(
!
AutoSizeRead
(
dwType
,
outBuf
,
maxSize
)
)
return
false
;
return
!
RegQueryValueExA
(
_hKey
,
lpName
,
NULL
,
&
dwType
,
(
byte
*
)
outBuf
,
&
maxSize
)
;
}
bool
SetRegister
(
LPCSTR lpName
,
DWORD dwType
,
void
*
inBuf
,
DWORD size
=
0
)
{
if
(
inBuf
==
nullptr
||
_hKey
==
NULL
)
return
false
;
if
(
!
strlen
(
lpName
)
)
return
false
;
if
(
!
AutoSizeWrite
(
dwType
,
inBuf
,
size
)
)
return
false
;
return
!
RegSetValueExA
(
_hKey
,
lpName
,
0
,
dwType
,
(
byte
*
)
inBuf
,
size
)
;
}
bool
GetRegisterDefault
(
LPSTR outBuf
,
LONG maxSize
)
{
if
(
outBuf
==
nullptr
||
_hKey
==
NULL
)
return
false
;
return
!
RegQueryValueA
(
_hKey
,
NULL
,
(
LPSTR
)
outBuf
,
&
maxSize
)
;
}
bool
SetRegisterDefault
(
LPCSTR inBuf
)
{
if
(
inBuf
==
nullptr
||
_hKey
==
NULL
)
return
false
;
return
!
RegSetValueA
(
_hKey
,
NULL
,
REG_SZ
,
inBuf
,
strlen
(
inBuf
)
)
;
}
bool
DeleteRegister
(
LPCSTR lpName
)
{
if
(
_hKey
==
NULL
)
return
false
;
if
(
!
strlen
(
lpName
)
)
return
false
;
return
!
RegDeleteKeyValueA
(
_hKey
,
NULL
,
lpName
)
;
}
private
:
HKEY _hKey
;
bool
AutoSizeWrite
(
DWORD dwType
,
void
*
inBuf
,
DWORD
&
size
)
{
if
(
!
size
)
{
switch
(
dwType
)
{
case
REG_BINARY
:
size
=
1
;
break
;
case
REG_DWORD
:
case
REG_DWORD_BIG_ENDIAN
:
size
=
4
;
break
;
case
REG_QWORD
:
size
=
8
;
break
;
case
REG_EXPAND_SZ
:
case
REG_LINK
:
case
REG_MULTI_SZ
:
case
REG_SZ
:
size
=
strlen
(
(
LPCSTR
)
inBuf
)
;
break
;
case
REG_NONE
:
default
:
return
false
;
}
}
return
true
;
}
bool
AutoSizeRead
(
DWORD dwType
,
void
*
outBuf
,
DWORD
&
size
)
{
if
(
!
size
)
{
switch
(
dwType
)
{
case
REG_BINARY
:
size
=
1
;
break
;
case
REG_DWORD
:
case
REG_DWORD_BIG_ENDIAN
:
size
=
4
;
break
;
case
REG_QWORD
:
size
=
8
;
break
;
case
REG_EXPAND_SZ
:
case
REG_LINK
:
case
REG_MULTI_SZ
:
case
REG_SZ
:
case
REG_NONE
:
default
:
return
false
;
}
}
return
true
;
}
}
;


Цитата:
Сообщение от Спойлер  


C++:





[CODE]
#include
#include "LiteRegedit.hpp"
int
main
(
)
{
CLiteRegedit
*
reg
=
new
CLiteRegedit
(
HKEY_CURRENT_USER
,
"Software\\Test"
)
;
if
(
reg
->
SetRegisterDefault
(
"Ahuenno!!!"
)
)
{
char
buf
[
256
]
;
if
(
reg
->
GetRegisterDefault
(
buf
,
256
)
)
{
std
::
cout

SetRegister
(
"Reg1"
,
REG_DWORD
,
&
dwValue
)
)
{
dwValue
=
0
;
if
(
reg
->
GetRegister
(
"Reg1"
,
REG_DWORD
,
&
dwValue
)
)
{
std
::
cout

SetRegister
(
"Nick"
,
REG_SZ
,
szNick
,
strlen
(
szNick
)
)
)
{
char
buf
[
256
]
;
if
(
reg
->
GetRegister
(
"Nick"
,
REG_SZ
,
buf
,
256
)
)
{
std
::
cout





 
Ответить с цитированием
 





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.