Programmeinstellungen wie am besten speichern?



  • Genau das war ja mein erster Lösungsansatz(hier im Forum gelesen)

    bekomme dann aber folgenden Fehler

    cannot convert parameter 1 from 'char [48]' to 'LPTSTR'
    


  • sirchillalot schrieb:

    Genau das war ja mein erster Lösungsansatz(hier im Forum gelesen)

    bekomme dann aber folgenden Fehler

    cannot convert parameter 1 from 'char [48]' to 'LPTSTR'
    

    Poste diesen Versuch bitte mal.



  • Ich hab vor ewigkeiten mal eine Funktion dafür geschrieben

    //key= "SYSTEM\\CurrentControlSet" (z.B.) 
    //value= "DeviceDesc" (z.B.)
    
    CString CRegSearchDlg::ReadRegKey(CString key, CString value) 
    {
    	DWORD dwData = 256;
    	BYTE cDaten[256];
    	HKEY hKey;
    	CString string;
    
    	RegOpenKey(HKEY_LOCAL_MACHINE, key, &hKey);			
    	RegQueryValueEx(hKey, value, 0, 0, cDaten, &dwData);
    	RegCloseKey(hKey);
    
    	string.Format(_T("%s"), cDaten);
    
    	return string;
    }
    


  • Ich nehme immer RegQueryValueEx() zum Lesen und RegSetValueEx() zum schreiben. Hier mal ein Beispiel aus einem Funktionsrumpf. Ich schreibe am Anfang immer das Änderungsdatum, die Uhrzeit und den Benutzer da rein.

    HKEY	hKey;
    
    	CString LastModificationDate;
    	CString LastModificationTime;
    
    	SYSTEMTIME SysTime; 
    	GetLocalTime(&SysTime);
    	LastModificationDate.Format("%02d.%02d.%4d",SysTime.wDay,SysTime.wMonth,SysTime.wYear);
    	LastModificationTime.Format("%02d:%02d:%02d Uhr",SysTime.wHour,SysTime.wMinute,SysTime.wSecond);
    
    	char* pIniModificationDate = new char[LastModificationDate.GetLength()+1];
    	sprintf(pIniModificationDate, _T("%s\0"), LastModificationDate);
    
    	char* pIniModificationTime = new char[LastModificationTime.GetLength()+1];
    	sprintf(pIniModificationTime, _T("%s\0"), LastModificationTime);
    
    	char* pIniPfad = new char[m_csFolder.GetLength()+1];
    	sprintf(pIniPfad, _T("%s\0"), m_csFolder); 
    
    	char* pIniDateiname = new char [m_csFilename.GetLength()+1];
    	sprintf(pIniDateiname, _T("%s\0"), m_csFilename);
    
    	char* pIniLastUser = new char [m_csBenutzername.GetLength()+1];
    	sprintf(pIniLastUser, _T("%s\0"), m_csBenutzername);
    
    	LONG	l_ErrCde=(LONG)NULL;
    ...
    
    	//Öffnen bzw. Erstellen eines Schlüssels
    	l_ErrCde=RegCreateKeyEx(HKEY_CURRENT_USER,"Software\\Mein Firmenname\\Meine Applikation\\Einstellungen",0,0,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&hKey,0);
    	if (l_ErrCde!=ERROR_SUCCESS) 
    	{
    		AfxMessageBox("Fehler",MB_OK |MB_ICONEXCLAMATION);
    	}
    	l_ErrCde=RegSetValueEx(hKey,"#Date_lastModification",0,REG_SZ,(BYTE*)pIniModificationDate,LastModificationDate.GetLength()+1);
    	if (l_ErrCde!=ERROR_SUCCESS) 
    	{
    		AfxMessageBox("Fehler beim Schreiben in die Registry!",MB_OK |MB_ICONEXCLAMATION);
    ...
    	}
    


  • _matze schrieb:

    sirchillalot schrieb:

    Genau das war ja mein erster Lösungsansatz(hier im Forum gelesen)

    bekomme dann aber folgenden Fehler

    cannot convert parameter 1 from 'char [48]' to 'LPTSTR'
    

    Poste diesen Versuch bitte mal.

    CRegKey key;
    	char buffer[48];
    	DWORD dwCount = 48; 
    	key.Open( HKEY_CURRENT_USER, L"SOFTWARE\\PFAD", KEY_READ);
    	key.QueryValue(buffer, L"SelfLead", &dwCount);
    


  • sirchillalot schrieb:

    CRegKey key;
    	char buffer[48];
    	DWORD dwCount = 48; 
    	key.Open( HKEY_CURRENT_USER, L"SOFTWARE\\PFAD", KEY_READ);
    	key.QueryValue(buffer, L"SelfLead", &dwCount);
    

    Da dein Projekt auf Unicode eingestellt ist, müsstest du hier auch wchar_t als Typ nehmen (oder gleich sowas wie TCHAR). Das ist vermutlich der Grund, warum es nicht geklappt hat.



  • Danke jetzt gehts



  • ah, die böse Unicode-Falle



  • Ich darf mal kurz dazwischenfragen:

    Wenn ich für ein Programm eine Art Loginsystem bastel, wie oder besser wo
    speichere ich das Adminpasswort dann am besten ab?
    Ich habe keine DB zur Verfügung, muss also entweder irgendwie das Passwort
    verschlüsselt in einer ini oderso speichern, oder halt in der Registry.

    Nehme ich dann Local_Machine und verschlüssel es zusätzlich?
    Aber der Login für einen Admin soll halt auch über einen eingeschränkten
    Useraccount in Windows möglich sein (und diese haben ja oft keine Rechte auf Locale_Machine).



  • Shoggy schrieb:

    Ich darf mal kurz dazwischenfragen:

    Wenn ich für ein Programm eine Art Loginsystem bastel, wie oder besser wo
    speichere ich das Adminpasswort dann am besten ab?
    Ich habe keine DB zur Verfügung, muss also entweder irgendwie das Passwort
    verschlüsselt in einer ini oderso speichern, oder halt in der Registry.

    Nehme ich dann Local_Machine und verschlüssel es zusätzlich?
    Aber der Login für einen Admin soll halt auch über einen eingeschränkten
    Useraccount in Windows möglich sein (und diese haben ja oft keine Rechte auf Locale_Machine).

    Klar darfst du. Ich hab das mit MD5 kodiert und leg das üblicherweise in ner Datenbank ab. Das Gehühner mit local maschine kenn ich, deshalb schreib ich das codierte Passwort in ne Binärdatei, die im Programmverzeichnis liegt. Somit fällts nicht so leicht auf. Du musst die ja nicht grad Passwort.* nennen. Was auch gehen könnte, das via Serialisierung rüber zu schieben.


Anmelden zum Antworten