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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Призрак реестра 
:(
    Опции темы
devmstr
Дата 12.11.2005, 15:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Developer
**


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

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



Схватил сегодня интерстный глюк. Хранит моя программа настройки в реестре. Все хорошо, только при перезагрузке все вновь созданные ключи исчезают. Как это я так ухитрился? Причем глюк не только на моей машине! Что не так?
Код

#define _WIN32_WINNT 0x0500
#include <windows.h>
#include <stdio.h>
#include <commctrl.h>
#include "resource.h"

#pragma comment(lib, "comctl32.lib")
#pragma comment(lib, "gdi32.lib")

#define MAX_STRLEN 50
#define APPNAME    "NewApp"

bool    bIsSprtBlnkn;    

HWND        hMainWnd;
HINSTANCE    hInst;
INITCOMMONCONTROLSEX icex;
int            iL        = 10;    
int            iT        = 20;
int            iW        = 160;
int            iH        = 200;
int            iClH    = 115;
char        sMsg[MAX_STRLEN];        //An error messages
char        sMsg2[MAX_STRLEN];

LONG    WINAPI MainWndProc(HWND hWnd, UINT msg, WPARAM wPar, LPARAM lPar);

void SaveSettings(HWND hWnd);
void LoadSettings(HWND hWnd);

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst, LPSTR lpCmdLine, int nCmdShow)
{
    LoadSettings(NULL);
    WNDCLASS    wnd;
    
    hInst                = hInstance;
    memset(&wnd, 0, sizeof(wnd));
    wnd.hbrBackground    = CreateSolidBrush(RGB(255, 255, 255));
    wnd.hCursor            = LoadCursor(NULL, IDC_ARROW);
    wnd.hIcon            = LoadIcon(NULL, IDI_APPLICATION);
    wnd.hInstance        = hInst;
    wnd.lpfnWndProc        = MainWndProc;
    wnd.lpszClassName    = APPNAME;
    if (!RegisterClass(&wnd))
    {
        return 1;
    }

    hMainWnd = CreateWindow(APPNAME, "", WS_OVERLAPPEDWINDOW,  iL, iT, iW, iH, NULL, NULL, hInst, NULL);
    if (!hMainWnd)
    {
        return 1;
    }
    ShowWindow(hMainWnd, nCmdShow);
    UpdateWindow(hMainWnd);

    MSG msg;
    while (GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return msg.lParam;
}

LONG WINAPI MainWndProc(HWND hWnd, UINT msg, WPARAM wPar, LPARAM lPar)
{
    switch (msg)
    {
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hWnd, msg, wPar, lPar);
    }
    return 0;
}

VOID SetSettings()
{
    bIsSprtBlnkn        = true;
}

void SaveSettings(HWND hWnd)
{
    HKEY    hKey;
    DWORD    data;
    char    cName[1024];
    sprintf(cName,"%s%s", "Software\\", APPNAME);
    if (RegOpenKeyEx(HKEY_CURRENT_USER, cName, 0,0, &hKey)!=ERROR_SUCCESS)
        if (RegCreateKeyEx(HKEY_CURRENT_USER, cName, 0, NULL, REG_OPTION_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, NULL)!=ERROR_SUCCESS)
        {
            MessageBox(hMainWnd, "Error", "", MB_OK|MB_ICONERROR);
        }
        else
        {
            data = (DWORD)bIsSprtBlnkn;    
            RegSetValueEx(hKey, "bIsSprtBlnkn", 0, REG_DWORD, (BYTE*)&data, sizeof(DWORD));
        }
        RegCloseKey(hKey);
}

void LoadSettings(HWND hWnd)
{
    HKEY    hKey;
    DWORD    data;
    DWORD    dwType;
    DWORD    dwSize;
    char    cName[1024];
    sprintf(cName,"%s%s\\", "Software\\", APPNAME);
    if (RegOpenKeyEx(HKEY_CURRENT_USER, cName, 0, KEY_READ, &hKey)!=ERROR_SUCCESS)
        {
            MessageBox(hMainWnd, "Error", "", MB_OK|MB_ICONERROR);
            SetSettings();
            SaveSettings(NULL);
        }
        else
        {
            dwSize    = sizeof(data);
            RegQueryValueEx(hKey, "bIsSprtBlnkn", 0, &dwType, (BYTE*)&data, &dwSize);
            bIsSprtBlnkn        = (BOOL)data;
        }
        RegCloseKey(hKey);
}




--------------------
Think different ©Steve Jobs 
user posted image
PM MAIL WWW   Вверх
devmstr
Дата 12.11.2005, 18:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Developer
**


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

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



Затупил. Нужно вместо REG_OPTION_VOLATILE to use REG_OPTION_NON_VOLATILE так как первый
This key is volatile; the information is stored in memory and is not preserved when the system is restarted.
Честно говоря до этого даже не знал, что такое возможно, а когда писал не обратил внимание. Разобратся помогли добрые люди.


--------------------
Think different ©Steve Jobs 
user posted image
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0409 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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