Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Работа с реестром С++ (http://forum.oszone.net/showthread.php?t=152041)

ShadowMas 01-10-2009 20:29 1232237

Работа с реестром С++
 
Привет всем!
Тут начал разбираться с C++ и столкнулся с такой проблемкой, не как не определюсь с порядком построения команд в "Borland C++ v.5.02".
До этого в основном работал с скриптовыми языками там всё гораздо понятнее :)

Подскажите как будет выглядеть такая запись:

Добавить параметр типа DWORD

Код:

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System]
"DisableTaskMgr"=dword:00000001

Удалить

Код:

[-HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System]
"DisableTaskMgr"=dword:00000001

На скриптовом языке "AutoIt" это будет выглядеть примерно так

Добавить параметр типа DWORD

Код:

RegWrite('HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System','DisableTaskMgr','REG_DWORD','1')
Удалить

Код:

RegDelete('HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System','DisableTaskMgr')

Drongo 01-10-2009 20:47 1232253

ShadowMas, примерно так.

Код:

#include <registry.hpp>
...
  TRegistry* reg1 = new TRegistry;

  reg1->RootKey = HKEY_CURRENT_USER;        //присваивание объекту 'reg' пути HKLM
  reg1->OpenKey("Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System", true);
  reg1->WriteInteger("Имя_Параметра", значение);
...

Код:

reg1->DeleteValue();  // Удаляет параметр
reg1->DeleteKey();  // Удаляет ключ

Шаг 13 - TRegistry.
Шаг 14 - Извлечение иконки по расширению файла и ее загрузка из DLL или EXE.

Код:

[-HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System]
"DisableTaskMgr"=dword:00000001

Достаточно просто
Код:

[-HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System]

ShadowMas 02-10-2009 00:22 1232430

Спасиб щас опробую!

pva 02-10-2009 07:41 1232521

Цитата:

Цитата ShadowMas
Borland C++ v.5.02 »

в нём фокус, предложенный Drongo не прокатит. Надо или из библиотеки OWL класс искать, или Win32 API.
Win32 API:
Код:

// 1. получить мнимый указатель на ветку реестра HKEY функцией RegOpenKey
// 2. получить значение функцией RegQueryValue
// 3. освободить указатель RegCloseKey

unsigned char binary_data_buffer[100];
long binary_data_buffer_size;
HKEY hkey; // RegOpenKey инициализирует нулём, если не получится

if (0==RegOpenKey(HKEY_CURRENT_USER, "Software\\Path", &hkey) &&
  0==RegQueryValue(hkey, "var_name", binary_data_buffer, &binary_data_buffer_size))
{
    clog << hex << setfill('0');

    for(unsigned b=0; n<binary_data_buffer_size; ++n)
  {
      clog << hex << setw(2) << unsigned(binary_data_buffer[n]) << "  ";
  }
}

if (hkey) RegCloseKey(hkey);


ShadowMas 02-10-2009 20:43 1233015

Да я смотрю С++ не сильно дружит с реестром Windows ) А 1 пример я так понимаю к Borland C++ Builder 6.0 да?!

Drongo 02-10-2009 21:11 1233037

Цитата:

Цитата ShadowMas
А 1 пример я так понимаю к Borland C++ Builder 6.0 да?! »

Да. Я в своей конфигурации компьютера в раздел Прочее, написал свою среду разработки, чтобы знали. :)
Цитата:

Borland C++ Builder 6.0 Enterprise Suite

pva 03-10-2009 12:01 1233350


ShadowMas, С++ и реестр windows - это язык программирования и программный объект.
Цитата:

Цитата ShadowMas
Да я смотрю С++ не сильно дружит с реестром Windows »

Всё равно что сказать, что русский язык со стихами не дружит.

Пример Drongo подходит к любому компилятору C/C++, который сможет использовать библиотеку VCL.
А с чем связано использование такого устаревшего компилятора как BC++ 5.0.2? Он ведь даже со стандартную библиотеку С++ неуверенно собирает...

ShadowMas 04-10-2009 01:35 1234031

Цитата:

Цитата pva
А с чем связано использование такого устаревшего компилятора как BC++ 5.0.2? Он ведь даже со стандартную библиотеку С++ неуверенно собирает... »

Просто оказался под рукой, и быстро устанавливается, а вообще я с "Borland C++ Builder 6.0" буду работать к нему я так понял этот пример приминим!

CyberStyLe 30-03-2010 16:28 1380734

Работа с реестром
 
Необходимо написать программку твикер. В дальнейшем планируется сделать GUI.

Все что она будет делать, - это запускаться и добавлять/изменять/удалять в реестр некоторые ключи и параметры, после этого завершать свою работу.

Имеется опыт в написании подобных программок на AutoIt.
Пишу(пытаюсь писать) в C++ Builder 2009.

Кто подкинет хотя бы небольшой примерчик кода, чтобы было отчего отталкиваться. Ну или ссылку по моей теме.

zonderz 30-03-2010 17:05 1380765

CyberStyLe

Вам нужно использовать класс TRegistry
в справке подробно описано +
ссылок в инете море...
http://sources.ru/builder/faq/index.html

Drongo 30-03-2010 18:03 1380809

CyberStyLe, Темы объединю, почитайте с самого начала.

CyberStyLe 30-03-2010 18:31 1380841

Цитата:

CyberStyLe, Темы объединю, почитайте с самого начала
Я не понял, приведите кто-нибудь пожалуйста часть кода с самого начала начиная с директив для CodeGear™ C++Builder® 2009 Version 12.0.3420.21218

Drongo 30-03-2010 21:22 1380988

CyberStyLe, Вот упрощённый пример. Хотя по этой ссылке Шаг 13 - TRegistry. и Шаг 14 - Извлечение иконки по расширению файла и ее загрузка из DLL или EXE.. Очень понятно написано. Я не по верю, что вы бы не поняли, если бы прочли. Написано более чем доходчиво.

Код:

// Работа с реестром C++ Builder 2009-----------------------------------------
#include <vcl.h>
#pragma hdrstop
#include <registry.hpp>

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
// Записать в реестр---------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  TRegistry* reg = new TRegistry;

  reg->RootKey = HKEY_CURRENT_USER;        //присваивание объекту 'reg' пути HKCU
  reg->OpenKey("Software\\Test", true);
  reg->WriteString("TestKey", "TestValue");
}
// Удалить из реетра---------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
  TRegistry* reg = new TRegistry;

  reg->RootKey = HKEY_CURRENT_USER;       
  reg->OpenKey("Software\\Test", true);
  reg->DeleteValue("TestKey");
}
//---------------------------------------------------------------------------


-Marshall- 09-04-2010 20:16 1389008

Реестр и WriteBinaryData
 
Пишу твикер и столкнулся с таким твиком, чтоб не проверять диски при загрузке системы. Так там идёт в hex формате... Раньше такого не знал, но тут столкнулся и не пойму как это реализовать на своём C++ Builder'e..
Помогите пожалуйста.
Вот сам твик (1 и 3 я реализовал, а 2 и 4 не понимаю...):

Код:

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager]
"AutoChkTimeOut"=dword:0000000

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager]
"BootExecute"=hex(7):61,00,75,00,74,00,6f,00,63,00,68,00,65,00,63,00,6b,00,20,\
00,61,00,75,00,74,00,6f,00,63,00,68,00,6b,00,20,00,2a,00,00,00,00,00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon]
"SFCScan"=dword:00000000

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\cleanuppath]
@=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,74,00,25,\
00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,63,00,6c,00,\
65,00,61,00,6e,00,6d,00,67,00,72,00,2e,00,65,00,78,00,65,00,20,00,2f,00,44,\
00,20,00,25,00,63,00,00,00


-Marshall- 20-04-2010 08:36 1396656

Ну что, никто не знает? :(

Admiral 20-04-2010 11:40 1396750

-Marshall- если не смущает что без использования встроенных возможностей Билдера то, то по второму есть пример
Цитата:

Цитата Родные приложения => Самое главное - запуск
Для того чтобы native-приложение запускалось до загрузки винды (собственно, никак иначе его и не запустить… стандартными средствами) нужно залезть в реестр, в HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager, открыть там ключ BootExecute
...
Другой вариант – это написать небольшой код специально для регистрации нашего приложения.
BOOL RegistryAdd(PSTR szAppName)

{
... >>

Для четвёртого привожу пример чтения значения по умолчанию для ветки реестра
Код:

#include <windows.h>

int wmain(int argc, wchar_t *argv[])
{
        HKEY hKey;
        if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,        L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\MyComputer\\cleanuppath",
                                        NULL, KEY_QUERY_VALUE, &hKey))
                                        return -1;
        wchar_t sValue[MAX_PATH];
        DWORD dwDummy = MAX_PATH;
        RegQueryValueEx(hKey, NULL, NULL, NULL, (LPBYTE)sValue, &dwDummy);
        RegCloseKey(hKey);
        return 0;
}

В переменную (sValue)попадёт именно в строковом виде, в отличии от того что обнаружит блокнот после экспорта из реестра.


Время: 06:21.

Время: 06:21.
© OSzone.net 2001-