Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
38 / 38 / 30
Регистрация: 07.04.2014
Сообщений: 219

Программа прописывает себя в реестре

12.11.2014, 19:07. Показов 754. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день ! Есть задача: Написать программу, которая показывает дату и время ее запуска и при этом
прописывает себя в раздел HKEY_CURRENT_USER\Software\Microsoft\Win dows\CurrentVersion\Run.

Я написал решение, подскажите, пожалуйста, правильно ли реализована часть с реестром,
и если нет, то как доделать ?

В хэдере просто записано имя диалога.

//.cpp
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include <windows.h>
#include <tchar.h>
#include "resource.h"
 
BOOL CALLBACK DlgProc(HWND, UINT, WPARAM, LPARAM);
 
int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpszCmdline, int nCmdShow)
{
    return DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG1), NULL, DlgProc);
}
 
BOOL CALLBACK DlgProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    UINT sysYears, sysMonths, sysDays;
    UINT sysHours, sysMinutes, sysSeconds;
    SYSTEMTIME st;
    TCHAR str[256];
 
    HKEY hKey;
 
    switch (message)
    {
    case WM_CLOSE:
        EndDialog(hWnd, 0);
 
        return TRUE;
    case WM_INITDIALOG:
        GetLocalTime(&st);
 
        sysYears = st.wYear;
        sysMonths = st.wMonth;
        sysDays = st.wDay;
        sysHours = st.wHour;
        sysMinutes = st.wMinute;
        sysSeconds = st.wSecond;
 
        wsprintf(str, TEXT("year: %d month: %d day: %d hours: %d minutes: %d seconds: %d"), sysYears, sysMonths, sysDays, sysHours, sysMinutes, sysSeconds);
        SetWindowText(hWnd, str);
 
        if (RegCreateKeyEx(HKEY_CURRENT_USER, TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Run"), 0, NULL,
            0, KEY_ALL_ACCESS, NULL, &hKey, NULL) != ERROR_SUCCESS)
        {
            MessageBox(0, TEXT("Cannot create a registry key"), 0, MB_OK | MB_ICONINFORMATION);
 
        }
 
        return TRUE;
    }
 
    return FALSE;
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.11.2014, 19:07
Ответы с готовыми решениями:

Программа, печатающая саму себя
Есть код прграммы, которая печатает посимвольно саму себя в текстовом редакторе. #include &quot;joke.h&quot; int main() { ...

Может ли программа удалить себя?
Всем привет! Собственно, сабж. Как-то пробовал перемещать программу по время выполнения, и это у меня получалось. А может ли программа...

Spools.exe прописывает себя в реестре
Доброго времени суток! Этот файл прописывает себя в реестре ( HKEY_CLASSES_ROOT\exefile\shell\open\command), пробует скопироваться в...

3
Brainsbreaker
 Аватар для Digit@ll
899 / 374 / 54
Регистрация: 01.02.2011
Сообщений: 1,608
12.11.2014, 19:23
Зачем тебе переменные для структуры? Просто выводи ее члены "as is".

Не по теме:

С реестром не работал, не подскажу.

0
Диванный эксперт
Эксперт С++
 Аватар для Max Dark
2550 / 2064 / 971
Регистрация: 09.10.2013
Сообщений: 4,793
Записей в блоге: 4
12.11.2014, 20:07
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
#define reg_run TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Run")
 
// получение флага автозапуска
bool AutoRun(const TCHAR* key) {
    HKEY keyAutorun = NULL;
    bool res = false;
    RegOpenKeyEx(HKEY_CURRENT_USER, reg_run, 0, KEY_READ, &keyAutorun);
    if (keyAutorun) {
        res = (RegQueryValueEx(keyAutorun, key,
                    0, NULL, NULL, NULL) == ERROR_SUCCESS);
        RegCloseKey(keyAutorun);
    }
    return res;
}
 
// установка автозапуска. возвращает успех операции
bool AutoRun(const TCHAR* key, bool set) {
    HKEY keyAutorun = NULL;
    bool res = false;
    RegOpenKeyEx(HKEY_CURRENT_USER, reg_run, 0, KEY_WRITE, &keyAutorun);
    if (keyAutorun) {
        if (set ) {
            TCHAR buff[MAX_PATH];
            DWORD len = GetModuleFileName(hApplication, buff, MAX_PATH);
            res = (RegSetValueEx(keyAutorun, title,
                    0, REG_SZ, (PBYTE)buff, len) == ERROR_SUCCESS);
        }
        else {
            res = (RegDeleteValue(keyAutorun, title) == ERROR_SUCCESS);
        }
        RegCloseKey(keyAutorun);
    }
    return res;
}
1
38 / 38 / 30
Регистрация: 07.04.2014
Сообщений: 219
12.11.2014, 20:08  [ТС]
Уже разобрался:
нужно было воспользоваться такой функцией:

C++
1
2
3
4
5
6
7
8
9
10
11
12
if (RegCreateKeyEx(HKEY_CURRENT_USER, TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Run"), 0, NULL,
            0, KEY_ALL_ACCESS, NULL, &hKey, NULL) != ERROR_SUCCESS)
        {
            MessageBox(0, TEXT("Cannot create a registry key"), 0, MB_OK | MB_ICONINFORMATION);
 
            return TRUE;
        }
 
        GetModuleFileName(NULL, str, 256);
        RegSetValueEx(hKey, _TEXT("First"), 0, REG_SZ, (PBYTE)str, sizeof(str));
 
        return TRUE;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.11.2014, 20:08
Помогаю со студенческими работами здесь

Вирус который прописывает себя в автозагрузки
Здравствуйте! Есть очень старый компьютер без доступа к интернету на нем засел такой вирус. Он прописывает себя в автозагрузку, а при...

Программа поиска в реестре
Ребят, вот делаю сейчас точную копию редактора реестра виндовс Многие решения уже сделал, но никак не могу понять даже сам принцип, по...

Проверить есть ли программа в реестре автозагрузки
Приветствую! Суть такая, нужно проверить по нажатию кнопки программу в автозагрузке. Если она добавлена туда, то всё ок. Если её там...

Сделать так,чтобы программа не прописывалась в реестре
Здравствуйте. Прошу прощения, если тема не совсем по адресу - не знал что выбрать. У меня стоит ОС Windows Se7eN Максимальная. Есть...

Программа запускается, но ключ в реестре не создаёт (Builder C++ 6)
Здравствуйте, уважаемые программисты. Делаю программу твикер для Winodws XP, которая будет работать с реестром. Есть CheckBox и Button. С...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере нетипового документа выдачи шин для спецтехники с табличной частью, разработанного в конфигурации КА2. Данные берутся из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru