Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Windows XP, работа с реестром. 
V
    Опции темы
neosapient
Дата 30.9.2006, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 672
Регистрация: 16.8.2006

Репутация: 3
Всего: 4



Помогите написать программу, которая счтитывает все содержимое из реестра по адресу [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\ThemeManager],
а затем записывает полученые данные туда же.

PM MAIL   Вверх
Antropoid
Дата 30.9.2006, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 786
Регистрация: 1.6.2006
Где: &Ukraine==Ode ssa

Репутация: нет
Всего: 16



Код

#define BUFF_MAX_LEN 4096
//---------------------------------------------
    HKEY hKey;
    char  Data[BUFF_MAX_LEN];
    DWORD cbData=sizeof(Data),
    type;

     (RegOpenKeyA(HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\ThemeManager", &hKey))

    memset(Data, 0, cbData);
    RegQueryValueExA(hKey, "ThemeActive", 0, &type, (LPBYTE)&Data[0], &cbData);


вот тебе код, считывающий ключ в этой ветке


--------------------
user posted image
Задыхаясь от восторга заниматься чепухой. 
PM MAIL   Вверх
sOckets
Дата 30.9.2006, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


ЖгуПоПонедельникам
**


Профиль
Группа: Участник
Сообщений: 298
Регистрация: 24.8.2006
Где: ws2.lib

Репутация: нет
Всего: 2



Код

// QueryKey - Enumerates the subkeys of key and its associated values.
//     hKey - Key whose subkeys and values are to be enumerated.

#include <windows.h>
#include <stdio.h>
#include <tchar.h>

#define MAX_KEY_LENGTH 255
#define MAX_VALUE_NAME 16383
 
void QueryKey(HKEY hKey) 
{ 
    TCHAR    achKey[MAX_KEY_LENGTH];   // buffer for subkey name
    DWORD    cbName;                   // size of name string 
    TCHAR    achClass[MAX_PATH] = TEXT("");  // buffer for class name 
    DWORD    cchClassName = MAX_PATH;  // size of class string 
    DWORD    cSubKeys=0;               // number of subkeys 
    DWORD    cbMaxSubKey;              // longest subkey size 
    DWORD    cchMaxClass;              // longest class string 
    DWORD    cValues;              // number of values for key 
    DWORD    cchMaxValue;          // longest value name 
    DWORD    cbMaxValueData;       // longest value data 
    DWORD    cbSecurityDescriptor; // size of security descriptor 
    FILETIME ftLastWriteTime;      // last write time 
 
    DWORD i, retCode; 
 
    TCHAR  achValue[MAX_VALUE_NAME]; 
    DWORD cchValue = MAX_VALUE_NAME; 
 
    // Get the class name and the value count. 
    retCode = RegQueryInfoKey(
        hKey,                    // key handle 
        achClass,                // buffer for class name 
        &cchClassName,           // size of class string 
        NULL,                    // reserved 
        &cSubKeys,               // number of subkeys 
        &cbMaxSubKey,            // longest subkey size 
        &cchMaxClass,            // longest class string 
        &cValues,                // number of values for this key 
        &cchMaxValue,            // longest value name 
        &cbMaxValueData,         // longest value data 
        &cbSecurityDescriptor,   // security descriptor 
        &ftLastWriteTime);       // last write time 
 
    // Enumerate the subkeys, until RegEnumKeyEx fails.
    
    if (cSubKeys)
    {
        printf( "\nNumber of subkeys: %d\n", cSubKeys);

        for (i=0; i<cSubKeys; i++) 
        { 
            cbName = MAX_KEY_LENGTH;
            retCode = RegEnumKeyEx(hKey, i,
                     achKey, 
                     &cbName, 
                     NULL, 
                     NULL, 
                     NULL, 
                     &ftLastWriteTime); 
            if (retCode == ERROR_SUCCESS) 
            {
                _tprintf(TEXT("(%d) %s\n"), i+1, achKey);
            }
        }
    } 
 
    // Enumerate the key values. 

    if (cValues) 
    {
        printf( "\nNumber of values: %d\n", cValues);

        for (i=0, retCode=ERROR_SUCCESS; i<cValues; i++) 
        { 
            cchValue = MAX_VALUE_NAME; 
            achValue[0] = '\0'; 
            retCode = RegEnumValue(hKey, i, 
                achValue, 
                &cchValue, 
                NULL, 
                NULL,
                NULL,
                NULL);
 
            if (retCode == ERROR_SUCCESS ) 
            { 
                _tprintf(TEXT("(%d) %s\n"), i+1, achValue); 
            } 
        }
    }
}

void _tmain(void)
{
   HKEY hTestKey;

   if( RegOpenKeyEx( HKEY_CURRENT_USER,
        TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\ThemeManager"),
        0,
        KEY_READ,
        &hTestKey) == ERROR_SUCCESS
      )
   {
      QueryKey(hTestKey);
   }
}



Добавлено @ 17:09 
Поясняю , сначало ты должен открыть ключ реестра функцией RegOpenKeyEx , потом получить информацию о ветке реестра функцией RegQueryInfoKey , которая скажет сколько есть содержимого в этом ключе реестра , затем ты просто делаешь цикл по этому значению , в котором испольщуешь функцию RegEnumKeyEx...всё предельно просто.


--------------------
Я Будущий сотрудник Google Inc. Юзаем Google Code Search для поиска исходников. Юзаем GMail как почту.
PM   Вверх
neosapient
Дата 2.10.2006, 08:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 672
Регистрация: 16.8.2006

Репутация: 3
Всего: 4



А как писать в переменные  smile  
smile 
PM MAIL   Вверх
sOckets
Дата 2.10.2006, 09:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


ЖгуПоПонедельникам
**


Профиль
Группа: Участник
Сообщений: 298
Регистрация: 24.8.2006
Где: ws2.lib

Репутация: нет
Всего: 2



В смысле писать в переменные ? Делай массив , и вместо :
Код

 _tprintf(TEXT("(%d) %s\n"), i+1, achValue); 


Вписывай в переменные , где achValue это название в переменной в которой храниться имя содержимого.


--------------------
Я Будущий сотрудник Google Inc. Юзаем Google Code Search для поиска исходников. Юзаем GMail как почту.
PM   Вверх
Romikgy
Дата 2.10.2006, 09:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 7
Всего: 146



имхо трудно что то объяснить человеку , который хочет чтоб за него все сделали! 
Сорри за оффтоп!


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
sOckets
Дата 2.10.2006, 09:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


ЖгуПоПонедельникам
**


Профиль
Группа: Участник
Сообщений: 298
Регистрация: 24.8.2006
Где: ws2.lib

Репутация: нет
Всего: 2



Цитата
А как писать в переменные  А как писать в переменные

Если ты умеешь перемещять данные с переменной в переменную , то ты сам сможешь , тем более я тебе уже показал в каком месте кода это надо делать , а если не умеешь , (всегда мечтал это сказать) учи мат часть ! smile


--------------------
Я Будущий сотрудник Google Inc. Юзаем Google Code Search для поиска исходников. Юзаем GMail как почту.
PM   Вверх
neosapient
Дата 2.10.2006, 10:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 672
Регистрация: 16.8.2006

Репутация: 3
Всего: 4



Цитата

имхо трудно что то объяснить человеку , который хочет чтоб за него все сделали

Да хочу  smile 

Ладно, то что хотел:
Код

#include <windows.h>
#include <tchar.h>

int _tmain(int argc, _TCHAR* argv[])
{
    HKEY hkOpisatel;

    LPTSTR strPath = _TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\ThemeManager");
    RegOpenKeyEx(HKEY_CURRENT_USER, strPath,  0, KEY_CREATE_SUB_KEY | KEY_SET_VALUE, &hkOpisatel);

    LPTSTR mas[] ={
        _TEXT("WCreatedUser"),
        _TEXT("ThemeActive"),
        _TEXT("LoadedBefore"),
        _TEXT("LastUserLangID"),
        _TEXT("ColorName"),
        _TEXT("SizeName")
    };
    LPTSTR masValue[] ={
        _TEXT("1"),
        _TEXT("1"),
        _TEXT("1"),
        _TEXT("1049"),
        _TEXT("NormalColor"),
        _TEXT("NormalSize")
    };
    for(int i=0; i<sizeof(mas)/sizeof(mas[0]); i++)
    RegSetValueEx (
        hkOpisatel, mas[i], 0, REG_SZ,
        reinterpret_cast<LPBYTE>(masValue[i]),
        static_cast<DWORD>(_tcslen(masValue[i]))*sizeof(TCHAR)+1);

    LPTSTR szHard = _TEXT("DllName");
    LPTSTR szHardValue = _TEXT("%SystemRoot%\\resources\\Themes\\luna\\luna.msstyles");
    RegSetValueEx (
        hkOpisatel, szHard, 0, REG_EXPAND_SZ,
        reinterpret_cast<LPBYTE>(szHardValue),
        static_cast<DWORD>(_tcslen(szHardValue))*sizeof(TCHAR)+1);
    RegCloseKey (hkOpisatel);
    return 0;
}

Сей код после перезагрузки долже направить винду на установление стиля ХР, я так думаю...
И еще его надо воткнуть в Gina интерфейс, в самый конец когда система уходит на перезагрузку/выключение и будет мне счастье.

Это сообщение отредактировал(а) neosapient - 2.10.2006, 10:32
PM MAIL   Вверх
neosapient
Дата 2.10.2006, 11:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 672
Регистрация: 16.8.2006

Репутация: 3
Всего: 4



Эх счастья похоже мне не будет.   smile 
Да смена стиля происходит, но после того как юзер вошел в профиль, а мне нужно чтобы стиль ХР включался до того как всплывет окно аунтефикации пользователя.  smile 
Ладно пожалуй эта ветка форума закрыта, поскольку на поставленый вопрос ответ получен.
Пошел создавать другую ветку.

Добавлено @ 11:01 
Закрываю
PM MAIL   Вверх
neosapient
Дата 2.10.2006, 12:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 672
Регистрация: 16.8.2006

Репутация: 3
Всего: 4



PM MAIL   Вверх
sOckets
Дата 2.10.2006, 12:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


ЖгуПоПонедельникам
**


Профиль
Группа: Участник
Сообщений: 298
Регистрация: 24.8.2006
Где: ws2.lib

Репутация: нет
Всего: 2



Молодец что закрываешь,  а то некоторые с постом ниже 30 просто уходят и всё.

Это сообщение отредактировал(а) sOckets - 2.10.2006, 15:53


--------------------
Я Будущий сотрудник Google Inc. Юзаем Google Code Search для поиска исходников. Юзаем GMail как почту.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.1022 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.