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

реестр - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.63
Skip
3 / 3 / 0
Регистрация: 11.11.2010
Сообщений: 38
02.02.2011, 21:11     реестр #1
не могу найти исходники программы на visual c++
которые бы добавляли программу в авто запуск реестров и какую библиотек для этого надо подключить
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.02.2011, 21:11     реестр
Посмотрите здесь:

C++ Реестр
C++ Реестр!
C++ Реестр
C++ Реестр, кнопка и c++
Запись в реестр C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
bobrovskii
57 / 57 / 3
Регистрация: 22.01.2011
Сообщений: 187
02.02.2011, 21:24     реестр #2
Skip, ветка эта "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run"
Цитата Сообщение от Skip Посмотреть сообщение
какую библиотек для этого надо подключить
если знаком с WinAPI ничего подключать не надо.
функции RegCreateKey, RegSetValue, Reg.....
Skip
3 / 3 / 0
Регистрация: 11.11.2010
Сообщений: 38
02.02.2011, 22:22  [ТС]     реестр #3
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
#include "stdafx.h"
#include <iostream>
using namespace std;
#include <windows.h>
#include <conio.h>
#include <tchar.h>
 
 
int main()
{
    HKEY hKey;
    unsigned char szStr[2];
    szStr[0]='1'; szStr[1]='\0'; 
 
    if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, TEXT("\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"), 0, KEY_ALL_ACCESS, &hKey)!=ERROR_SUCCESS)
        cout<<"oshibka.\n";
    else
    {
        if (RegSetValueEx(hKey, TEXT("my_program","C:\program.exe"), NULL, REG_SZ, szStr, sizeof(szStr))==ERROR_SUCCESS)
            cout<<"razdel otkrit uspeshno.\n";
        else
            cout<<"oshibka#2.\n";
    }
    RegCloseKey(hKey);
 
    getch();
}
он у меня в первом же цикле выдает ошибку , тоесть он не может открыть раздел
напишите как правильно добавить программу в авто запуск

Добавлено через 23 минуты
help , а то в реестрах не разбираюсь
bobrovskii
57 / 57 / 3
Регистрация: 22.01.2011
Сообщений: 187
02.02.2011, 22:29     реестр #4
C
1
RegOpenKeyEx(HKEY_LOCAL_MACHINE, TEXT("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"), 0, KEY_ALL_ACCESS, &hKey)
char *val = TEXT("C:\\program.exe");
C
1
RegSetValueEx(hKey, TEXT("my_program"), NULL, REG_SZ, val, lstrle(val))
Skip
3 / 3 / 0
Регистрация: 11.11.2010
Сообщений: 38
03.02.2011, 03:45  [ТС]     реестр #5
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
#include "stdafx.h"
#include <iostream>
using namespace std;
#include <windows.h>
#include <conio.h>
#include <tchar.h>
 
int main()
{
    char *val = TEXT("D:\Visual Studio 2008\Projects\6\Release\6++.exe");
 
    HKEY hKey;
 
    if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, TEXT("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"), 0, KEY_ALL_ACCESS, &hKey)!=ERROR_SUCCESS)
        cout<<"oshibka.\n";
    else
    {
    RegSetValueEx(hKey, TEXT("Mydream"), NULL, REG_SZ, val, lstrle(val));
    }
   
    RegCloseKey(hKey);
 
    getch();
}
он у меня почему то ее не компилирует
bobrovskii
57 / 57 / 3
Регистрация: 22.01.2011
Сообщений: 187
03.02.2011, 03:50     реестр #6
Skip, компилятор поди ругается))), слеш \ он же так пишется "\\".
C
1
char *val = TEXT("D:\\Visual Studio 2008\\Projects\\6\\Release\\6++.exe");
Skip
3 / 3 / 0
Регистрация: 11.11.2010
Сообщений: 38
03.02.2011, 03:59  [ТС]     реестр #7
он ругается на
C++
1
char *val = TEXT("D:\\Visual Studio 2008\\Projects\\6\\Release\\6++.exe");
и говорит вот это :
1>.\перезагрузка компа.cpp(10) : error C2440: инициализация: невозможно преобразовать 'const wchar_t [49]' в 'char *'

и на
C++
1
RegSetValueEx(hKey, TEXT("Mydream"), NULL, REG_SZ, val, lstrle(val));
, выдает 1>.\перезагрузка компа.cpp(18) : error C3861: lstrle: идентификатор не найден
bobrovskii
57 / 57 / 3
Регистрация: 22.01.2011
Сообщений: 187
03.02.2011, 04:12     реестр #8
Цитата Сообщение от Skip Посмотреть сообщение
1>.\перезагрузка компа.cpp(10) : error C2440: инициализация: невозможно преобразовать 'const wchar_t [49]' в 'char *'
Ну это потому что проект у тебя UNICODE.
ришение:
C
1
TCHAR val = TEXT(....) или wchar_t *val = L"...."
Цитата Сообщение от Skip Посмотреть сообщение
выдает 1>.\перезагрузка компа.cpp(18) : error C3861: lstrle: идентификатор не найден
похоже я ошибся
C
1
lstrlen
не обессуть, не внимателен.

Добавлено через 2 минуты
точно не внимателен)
Цитата Сообщение от bobrovskii Посмотреть сообщение
TCHAR val = TEXT(....) или wchar_t *val = L"...."
C
1
TCHAR *val = TEXT(....) или wchar_t *val = L"...."
Skip
3 / 3 / 0
Регистрация: 11.11.2010
Сообщений: 38
03.02.2011, 14:27  [ТС]     реестр #9
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
#include "stdafx.h"
#include <iostream>
#include <windows.h>
#include <conio.h>
using namespace std;
 
int main()
{
    TCHAR *val=_T("C:\\myprogramm.exe");
    DWORD size=_tcslen(val);
    
    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*)val,2*size)==ERROR_SUCCESS)
        {
            cout<<"dobavlena v reestr \n";
        }
        else
            cout<<"Error #2 \n";
        }
   
        RegCloseKey(hKey);
 
        getch();
}
в итоге , только такой код заработал
а как научить программу , что бы она себя находила в системе и добавляла в реестр
bobrovskii
57 / 57 / 3
Регистрация: 22.01.2011
Сообщений: 187
03.02.2011, 14:45     реестр #10
Skip, GetModuleFileName знаком с ней?

Добавлено через 11 минут
С ее помощью получиш полный путь к своему ексешнику, ну а далее в реестр загоняй.
Skip
3 / 3 / 0
Регистрация: 11.11.2010
Сообщений: 38
03.02.2011, 15:23  [ТС]     реестр #11
Цитата Сообщение от bobrovskii Посмотреть сообщение
Skip, GetModuleFileName знаком с ней?

Добавлено через 11 минут
С ее помощью получиш полный путь к своему ексешнику, ну а далее в реестр загоняй.
пока такая ересь
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include "stdafx.h"
#include <iostream>
#include <Windows.h>
#include <conio.h>
using namespace std;
 
 
  TCHAR szPath[MAX_PATH];
 
int main()
{
     if( !GetModuleFileName( NULL, szPath, MAX_PATH ) )
    {
        cout<< "Error\n";
    }
     else
     {
         cout << szPath;
     }
     getch();
     return 0;
}
и выдает он 00D58148
bobrovskii
57 / 57 / 3
Регистрация: 22.01.2011
Сообщений: 187
03.02.2011, 15:32     реестр #12
Skip, у тебя поди проект в UNICODе cout поддерживает UNICOD?
а GetModuleFileName( NULL, szPath, MAX_PATH ) - верный код.
попробуй szPath на MessageBox вывести для проверки, я не вкурсе cout держит юни.
Skip
3 / 3 / 0
Регистрация: 11.11.2010
Сообщений: 38
03.02.2011, 16:09  [ТС]     реестр #13
все равно выдает
я даже пробовал подключить библиотеку tchar.h
и присвоить
C++
1
val = TEXT(szPath);
, но толку тоже ноль
bobrovskii
57 / 57 / 3
Регистрация: 22.01.2011
Сообщений: 187
03.02.2011, 16:15     реестр #14
Что ты там присваиваеш val = szPath это что ли?
Это тебе не AnsiString, покажи код пожайлуста и что пишет компилятор?
Skip
3 / 3 / 0
Регистрация: 11.11.2010
Сообщений: 38
03.02.2011, 16:29  [ТС]     реестр #15
Цитата Сообщение от bobrovskii Посмотреть сообщение
Что ты там присваиваеш val = szPath это что ли?
Это тебе не AnsiString, покажи код пожайлуста и что пишет компилятор?
ну да так
а если попробовать
C++
1
strcpy(val , szPath);
bobrovskii
57 / 57 / 3
Регистрация: 22.01.2011
Сообщений: 187
03.02.2011, 16:39     реестр #16
ну да, метод тод же, только в твоем случае
C
1
_tcscpy
Добавлено через 3 минуты
опс а val у тебя же вроде константный а не массив.
что тебе мешает RegSetValueEx отдать szPath? меньше переменых объявленых.
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;
}
почему то даже раздел в реестрах не создает , а так то значение присваивает
bobrovskii
57 / 57 / 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 умнажаеш?
Skip
3 / 3 / 0
Регистрация: 11.11.2010
Сообщений: 38
03.02.2011, 17:31  [ТС]     реестр #19
ну он в реестр добавил d:\vs\res\ , а сам исполняемый файл он не добавляет
надо что то подобное strcat(szPath , "programm.exe")
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.02.2011, 17:39     реестр
Еще ссылки по теме:

Реестр С++ C++
C++ WMI и реестр C++
C++ Реестр

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

Или воспользуйтесь поиском по форуму:
bobrovskii
57 / 57 / 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)
Yandex
Объявления
03.02.2011, 17:39     реестр
Ответ Создать тему
Опции темы

Текущее время: 09:21. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru