Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[WinAPI] Wartość nie jest zapisywana w rejestrze

Ostatnio zmodyfikowano 2013-01-17 16:04
Autor Wiadomość
totally_begin
Temat założony przez niniejszego użytkownika
[WinAPI] Wartość nie jest zapisywana w rejestrze
» 2013-01-17 13:13:59
Witam!

Mam taki mały programik, którym chcę utworzyć w rejestrze wpis DWORD 00000001.
C/C++
{
    HKEY klucz; //uchwyt do otwieranego klucza
    //otwarcie klucza funkcją RegOpenKeyEx
    if( RegOpenKeyEx( HKEY_CURRENT_USER, "software\\aaaaklucz", 0, KEY_WRITE, & klucz ) != ERROR_SUCCESS )
         MessageBox( 0, "Nie można otworzyć klucza", "Błąd", MB_OK );
   
    int wartosc = 00000001; //łańcuch znaków z zapisywana wartością
    DWORD typ_danych = REG_DWORD; //typ wartości
    //zapisywanie wartości do klucza
    if( RegSetValueEx( klucz, "dupa", 0, typ_danych,( lPBYTE ) wartosc, sizeof( wartosc ) ) != ERROR_SUCCESS )
         MessageBox( 0, "Nie można zapisać wartości", "Błąd", MB_OK );
    //jeśli sie nie uda
    RegCloseKey( klucz ); //zamknięcie klucza
}

Program się kompiluję wyskakuje błąd z drugiej funkcji if. Coś pomyliłem w wartości dword. Może ktoś dopatrzył się błędu??
P-74188
xevuel
» 2013-01-17 13:31:17
Jaką wartość dokładnie zwraca RegSetValueEx()?
P-74189
totally_begin
Temat założony przez niniejszego użytkownika
» 2013-01-17 13:48:52
zwraca 0

to jest oryginalny kod ktory dziala ( ten moj w sumie tez)

C/C++
INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR lStart, INT nShow )
{
    HKEY klucz; //uchwyt do otwieranego klucza
    //otwarcie klucza funkcją RegOpenKeyEx
    if( RegOpenKeyEx( HKEY_CURRENT_USER, "Software", 0, KEY_WRITE, & klucz ) != ERROR_SUCCESS )
         MessageBox( 0, "Nie można otworzyć klucza", "Błąd", MB_OK );
   
    CHAR wartosc[] = "Coś co zapisujemy :>"; //łańcuch znaków z zapisywana wartością
    DWORD typ_danych = REG_SZ; //typ wartości
    //zapisywanie wartości do klucza
    if( RegSetValueEx( klucz, "Moja wartość", 0, typ_danych,( LPBYTE ) wartosc, sizeof( wartosc ) ) != ERROR_SUCCESS )
         MessageBox( 0, "Nie można zapisać wartości", "Błąd", MB_OK );
    //jeśli sie nie uda
    RegCloseKey( klucz ); //zamknięcie klucza
    return 0;
}

chodzi mi o to zeby nie zapisywal tak jak w kodzie "cos zapisujemy" tylko wartosc DWORD 00000001
P-74192
xevuel
» 2013-01-17 14:02:27
Nieprawda, jeśli by tak było, nie pokazywałby Ci się komunikat. Minąłeś się również z prawdą w pierwszym poście - tamten kod nie ma prawa się skompilować (LPBYTE a nie lPBYTE).
P-74194
totally_begin
Temat założony przez niniejszego użytkownika
» 2013-01-17 14:05:22
tak masz racje pomylilem sie skopiowalem nie to co trzeba

teraz mam taki kod

C/C++
HKEY klucz; //uchwyt do otwieranego klucza
//otwarcie klucza funkcją RegOpenKeyEx
if( RegOpenKeyEx( HKEY_LOCAL_MACHINE, "SOFTWARE", 0, KEY_WRITE, & klucz ) != ERROR_SUCCESS )
     MessageBox( 0, "Nie można otworzyć klucza", "Błąd", MB_OK );

CHAR wartosc[] = "Coś co zapisujemy :>"; //łańcuch znaków z zapisywana wartością
DWORD typ_danych = REG_DWORD; //typ wartości
//zapisywanie wartości do klucza
if( RegSetValueEx( klucz, "wpis", 0, typ_danych,( LPBYTE ) wartosc, sizeof( wartosc ) ) != ERROR_SUCCESS )
     MessageBox( 0, "Nie można zapisać wartości", "Błąd", MB_OK );
//jeśli sie nie uda
RegCloseKey( klucz ); //zamknięcie klucza

wszystko dziala tworzy mi wpis, tylko pisze niewlasciwa liczba 32-bitowa w rejestrze, jak zmienic 5 linijke zeby wszystko bylo ok???

dokladnie to ta

C/C++
CHAR wartosc[] = "Coś co zapisujemy :>"; //łańcuch znaków z zapisywana wartością
P-74195
xevuel
» 2013-01-17 14:43:57
RegSetValueEx( klucz, "wpis", 0, typ_danych,( LPBYTE ) wartosc, sizeof( wartosc )

Rzutujesz wartość na wskaźnik? W ten sposób się nie da, użyj
&
.
P-74199
totally_begin
Temat założony przez niniejszego użytkownika
» 2013-01-17 14:53:36
da sie wszystko dziala tutaj caly gotowy kod mozna skompilowac w CODE BLOCKS np

C/C++
#include <windows.h>
#include <commctrl.h>

HWND hButton, hWnd;
CHAR szClassName[] = "OknoRodzica";
HINSTANCE * hInst;

LRESULT CALLBACK WndProc( HWND, UINT, WPARAM, LPARAM );

INT WINAPI WinMain( HINSTANCE hInstance, HINSTANCE, LPSTR lStart, INT nShow )
{
    hInst =& hInstance;
    WNDCLASSEX wc;
    wc.hInstance =* hInst;
    wc.lpszClassName = szClassName;
    wc.lpfnWndProc = WndProc;
    wc.style = 0;
    wc.cbSize = sizeof( WNDCLASSEX );
    wc.hIcon = LoadIcon( 0, IDI_APPLICATION );
    wc.hIconSm = LoadIcon( 0, IDI_APPLICATION );
    wc.hCursor = LoadCursor( 0, IDC_ARROW );
    wc.lpszMenuName = 0;
    wc.cbClsExtra = 0;
    wc.cbWndExtra = 0;
    wc.hbrBackground =( HBRUSH ) COLOR_BACKGROUND;
    if( !RegisterClassEx( & wc ) ) return 0;
   
    hWnd = CreateWindowEx( 0, szClassName, "Tworzenie buttona", WS_OVERLAPPEDWINDOW, 20, 20, 600, 300, 0, 0, * hInst, 0 );
    ShowWindow( hWnd, nShow );
    MSG msgs;
    while( GetMessage( & msgs, 0, 0, 0 ) )
    {
        TranslateMessage( & msgs );
        DispatchMessage( & msgs );
    }
    return msgs.wParam;
}

LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wPar, LPARAM lPar )
{
    switch( msg )
    {
    case WM_CREATE:
        //funkcja tworząca kontrolkę
        hButton = CreateWindowEx( 0, WC_BUTTON, "Przycisk", WS_CHILD | WS_VISIBLE, 20, 20, 200, 70, hwnd,( HMENU ) 1, * hInst, 0 );
        break;
    case WM_COMMAND:
        if( wPar == 1 )
       
       
        {
            HKEY klucz; //uchwyt do otwieranego klucza
            //otwarcie klucza funkcją RegOpenKeyEx
            if( RegOpenKeyEx( HKEY_CURRENT_USER, "Software", 0, KEY_WRITE, & klucz ) != ERROR_SUCCESS )
                 MessageBox( 0, "Nie można otworzyć klucza", "Błąd", MB_OK );
           
            CHAR wartosc[] = "Coś co zapisujemy :>"; //łańcuch znaków z zapisywana wartością
            DWORD typ_danych = REG_DWORD; //typ wartości
            //zapisywanie wartości do klucza
            if( RegSetValueEx( klucz, "Moja wartość", 0, typ_danych,( LPBYTE ) wartosc, sizeof( wartosc ) ) != ERROR_SUCCESS )
                 MessageBox( 0, "Nie można zapisać wartości", "Błąd", MB_OK );
            //jeśli sie nie uda
            RegCloseKey( klucz ); //zamknięcie klucza
            return 0;
        }
       
       
       
        break;
    case WM_DESTROY:
        DestroyWindow( hButton );
        PostQuitMessage( 0 );
        break;
        default:
        return DefWindowProc( hwnd, msg, wPar, lPar );
    }
    return 0;
}

Po kliknieciu przycisku program tworzy wartosc DWORD Moja Wartość w HKEY_CURRENT_USER \\ software .

Moje pytanie jest tylko takie co musze zmienic zeby, albo gdzie wpisac wartosc 32 bitowa.
P-74201
krzyk
» 2013-01-17 14:58:50
Jeśli typ_danych to REG_DWORD to wartosc ma być DWORD
P-74202
« 1 » 2 3 4
  Strona 1 z 4 Następna strona