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. { HKEY klucz; 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; DWORD typ_danych = REG_DWORD; 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 ); RegCloseKey( klucz ); } Program się kompiluję wyskakuje błąd z drugiej funkcji if. Coś pomyliłem w wartości dword. Może ktoś dopatrzył się błędu?? |
|
xevuel |
» 2013-01-17 13:31:17 Jaką wartość dokładnie zwraca RegSetValueEx()? |
|
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) INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR lStart, INT nShow ) { HKEY klucz; 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 :>"; DWORD typ_danych = REG_SZ; 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 ); RegCloseKey( klucz ); return 0; } chodzi mi o to zeby nie zapisywal tak jak w kodzie "cos zapisujemy" tylko wartosc DWORD 00000001 |
|
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). |
|
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 HKEY klucz;
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 :>"; DWORD typ_danych = REG_DWORD;
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 );
RegCloseKey( klucz );
wszystko dziala tworzy mi wpis, tylko pisze niewlasciwa liczba 32-bitowa w rejestrze, jak zmienic 5 linijke zeby wszystko bylo ok??? dokladnie to ta CHAR wartosc[] = "Coś co zapisujemy :>";
|
|
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 & . |
|
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 #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: 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; 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 :>"; DWORD typ_danych = REG_DWORD; 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 ); RegCloseKey( klucz ); 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. |
|
krzyk |
» 2013-01-17 14:58:50 Jeśli typ_danych to REG_DWORD to wartosc ma być DWORD |
|
« 1 » 2 3 4 |