Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.63
Skip
3 / 3 / 0
Регистрация: 11.11.2010
Сообщений: 38
#1

реестр - C++

02.02.2011, 21:11. Просмотров 2074. Ответов 25
Метки нет (Все метки)

не могу найти исходники программы на visual c++
которые бы добавляли программу в авто запуск реестров и какую библиотек для этого надо подключить
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.02.2011, 21:11
Здравствуйте! Я подобрал для вас темы с ответами на вопрос реестр (C++):

Реестр - C++
Скажем есть ключ реестра HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\SessionManager\Environment в regedit нашел что переменная path...

Реестр! - C++
Нужно програмно изменить в реестре значение параметра...

Реестр - C++
Не могу открыть реестр пишет заблокировано администратором

Реестр - C++
Написать программу, определяющую значение параметра в открытом разделе и изменяющую это значение на другое. Подскажите пожалуйста, где-то...

Реестр С++ - C++
Здравствуйте. У меня такой вопрос: Есть два консольных приложения С ++ одно выводит элементы массива, другое выполняет действия над его...

Запись в реестр - C++
Создал CLR приложение...добавил файл Settings.h и засунул туда следующий код void SaveSet() { HKEY hKey=0; ...

25
bobrovskii
59 / 59 / 3
Регистрация: 22.01.2011
Сообщений: 187
03.02.2011, 16:39 #16
ну да, метод тод же, только в твоем случае
C
1
_tcscpy
Добавлено через 3 минуты
опс а val у тебя же вроде константный а не массив.
что тебе мешает RegSetValueEx отдать szPath? меньше переменых объявленых.
0
Skip
3 / 3 / 0
Регистрация: 11.11.2010
Сообщений: 38
03.02.2011, 17:00  [ТС] #17
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include "stdafx.h"
#include <iostream>
#include <windows.h>
#include <conio.h>
using namespace std;
 
int main()
{
    TCHAR szPath[MAX_PATH];
    DWORD size=_tcslen(szPath);
 
     if( !GetModuleFileName( NULL, szPath, MAX_PATH ) )
    {
        cout<< "Error\n";
    }
 
    HKEY hKey;
 
        if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, TEXT("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"), 0, KEY_ALL_ACCESS, &hKey)!=ERROR_SUCCESS)
                cout<<"Error #1\n";
        else
        {
        if (RegSetValueEx(hKey, TEXT("Mydream"), NULL , REG_SZ, (BYTE*)szPath,2*size)==ERROR_SUCCESS)
        {
            cout<<"dobavlena v reestr \n";
        }
        else
            cout<<"Error #2 \n";
        }
   
        RegCloseKey(hKey);
 
 
        getch();
        return 0;
}
почему то даже раздел в реестрах не создает , а так то значение присваивает
0
bobrovskii
59 / 59 / 3
Регистрация: 22.01.2011
Сообщений: 187
03.02.2011, 17:13 #18
если присваивает значит все ок! ты где смотриш в regedit?
если он открыт а пускаеш прогу, то после нажми F5 "обновить".
и оптемизируй так:
C
1
2
DWORD size;
if( !(size = GetModuleFileName( NULL, szPath, MAX_PATH )) )
GetModuleFileName возрашает кол. байт.
и
C
1
RegSetValueEx(hKey, TEXT("Mydream"), NULL , REG_SZ, (BYTE*)szPath,size)
зачем на 2 умнажаеш?
0
Skip
3 / 3 / 0
Регистрация: 11.11.2010
Сообщений: 38
03.02.2011, 17:31  [ТС] #19
ну он в реестр добавил d:\vs\res\ , а сам исполняемый файл он не добавляет
надо что то подобное strcat(szPath , "programm.exe")
0
bobrovskii
59 / 59 / 3
Регистрация: 22.01.2011
Сообщений: 187
03.02.2011, 17:39 #20
Это потому что:

Цитата Сообщение от Skip Посмотреть сообщение
TCHAR szPath[MAX_PATH];
DWORD size=_tcslen(szPath);
if( !GetModuleFileName( NULL, szPath, MAX_PATH ) )
{
cout<< "Error\n";
}
ты size как получаеш? у тебя там нет ничего "пусто" и размер в RegSetValueEx уходит неверный!
сделай как я писал выше а именно:


Цитата Сообщение от bobrovskii Посмотреть сообщение
1
2 DWORD size;
if( !(size = GetModuleFileName( NULL, szPath, MAX_PATH )) )
GetModuleFileName возрашает кол. байт.
и
Код C1 RegSetValueEx(hKey, TEXT("Mydream"), NULL , REG_SZ, (BYTE*)szPath,size)
0
Skip
3 / 3 / 0
Регистрация: 11.11.2010
Сообщений: 38
03.02.2011, 17:46  [ТС] #21
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include "stdafx.h"
#include <iostream>
#include <windows.h>
#include <conio.h>
 
using namespace std;
 
int main()
{
    TCHAR szPath[MAX_PATH];
    DWORD size;
    
    if( !(size = GetModuleFileName( NULL, szPath, MAX_PATH )) )
    {
        cout<< "Error\n";
    }
    HKEY hKey;
    if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, TEXT("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"), 0, KEY_ALL_ACCESS, &hKey)!=ERROR_SUCCESS)
        cout<<"Error #1\n";
    else
        {
            if (RegSetValueEx(hKey, TEXT("Mydream"), NULL , REG_SZ, (BYTE*)szPath,size)==ERROR_SUCCESS)
        {
            cout<<"dobavlena v reestr \n";
        }
            else
            cout<<"Error #2 \n";
        }
    RegCloseKey(hKey);
    
    getch();
    return 0;
}
вот сделал все как ты сказал , но он путь указывает d:\vs\res\
а надо d:\vs\res\programm.exe
0
bobrovskii
59 / 59 / 3
Регистрация: 22.01.2011
Сообщений: 187
03.02.2011, 17:54 #22
Быть такого не может, код верный!
минутку... щас накидаю.
0
Skip
3 / 3 / 0
Регистрация: 11.11.2010
Сообщений: 38
03.02.2011, 18:00  [ТС] #23
Цитата Сообщение от bobrovskii Посмотреть сообщение
Быть такого не может, код верный!
минутку... щас накидаю.
ну да , компилируется и тд , но не добавляет путь к файлу
0
bobrovskii
59 / 59 / 3
Регистрация: 22.01.2011
Сообщений: 187
03.02.2011, 18:11 #24
Skip, не обессуть. моя ощибка.
size * 2 ты верно делал для проекта в UNICODE.
вот что я накидал
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <iostream>
#include <conio.h>
#include <windows.h>
 
using namespace std;
int _tmain()
{
    HKEY key = NULL;
    TCHAR path[MAX_PATH];
    DWORD length;
 
    if (!(length = GetModuleFileName(NULL, path, MAX_PATH))) {
        cout << "ERROR GetModuleFileName " << GetLastError() << endl;
        return 0;
    }
 
    cout << "length " << length << " TCHAR " << sizeof(TCHAR) << endl;
 
    MessageBox(NULL, path, TEXT("PROVERKA"), 0);
 
    if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, TEXT("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"), 0, KEY_ALL_ACCESS, &key) == ERROR_SUCCESS) {
        if (RegSetValueEx(key, TEXT("test_key"), 0 , REG_SZ, (BYTE*)path, length * sizeof(TCHAR)) == ERROR_SUCCESS) {
            cout << "Set Value OK!!!" << endl;
        }
 
        RegCloseKey(key);
    } else {
        cout << "ERROR RegOpenKeyEx " << GetLastError() << endl;
    }
 
    return 0;
}
length * sizeof(TCHAR) - в моем случае вернее будет т.к. компилел Unicode и Mult-Byte.
в обоих работает)))
1
Skip
3 / 3 / 0
Регистрация: 11.11.2010
Сообщений: 38
03.02.2011, 18:22  [ТС] #25
спасибо , только не могу понять , что с моим кодом не так
1
bobrovskii
59 / 59 / 3
Регистрация: 22.01.2011
Сообщений: 187
03.02.2011, 18:34 #26
С ним все ок! как выше писал в RegSetValueEx сделай так size * sizeof(TCHAR)
дело в том, что RegSetValueEx нужно передать количество байт.
а мы в size получили количество символов когда вызвали GetModuleFileName
т.е. если Unicod проект, один символ равен 2 байтам а для ANSI один к однаму.

Добавлено через 4 минуты
П.С. Skip, одним словом правильно все делаеш, сам ришение находиш.
не ждеш готовый код на блюдечке, ПЛЮС тебе+)))
0
03.02.2011, 18:34
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.02.2011, 18:34
Привет! Вот еще темы с ответами:

Реестр, кнопка и c++ - C++
Народ помгите пожалуйста! Мучаюсь уже несколько дней. Надо сделать чтобы обычной кнопкой на форме менялось значение ключа реестра. ...

Запись в реестр - C++
Здравствуйте, подскажите как мне сделать что бы программа прописала значение в реестре. Пишу для консоли.

C++ WMI и реестр - C++
Доброго времени суток! Требуется разъяснение по следующему вопросу: необходимо изменить значение одного ключа в реестре по средствам WMI...

Добавить данные в реестр - C++
Здорова! Есть я глянул у меня для определенных компонентов добавляется в реестр данные об интерфейсе, от например такие данные для...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
26
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru