Key aus Registry auslesen und ändern?



  • Würde gerne Keys aus der Registry auslesen und ggf ändern.
    Ganz einfach mit Checkboxen.
    Das Problem ist nun ich habe es probiert mit GetProfileInt /Write. Funktioniert einwandfrei -- ausser wenn ich weiter runter muss im Verzeichn isbaum.
    Ich möchte zu HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer
    Um dort einige Einstellungen zu kontrollieren / machen.
    Nur wie gesagt mit GetprofileInt kommt man dort wohl nicht hin.

    Was kann ich noch machen oder gibt es was anderes?

    Danke



  • Steht ein super beitrag in der FAQ !!
    - daher keine antwort -



  • void Registry::Lesen(void)
    {
    	CString		ErrorText;
    	char		strIP[120];
    	DWORD		dwPort;
    	char		strIsServer[120];
    	char		*SupKey = "SOFTWARE\\ONKEL_WILLYS_SOFTWARE";
    
    	//default values
    		dwPort = 2205;
    		sprintf(strIsServer, "JA");
    		sprintf(strIP, "0.0.0.0");
    
    	//________________________________________________*/
    
    	DWORD dwDisposition;
    	DWORD dwErrorCode = RegCreateKeyEx(HKEY_LOCAL_MACHINE,
    							SupKey,
    							0,
    							"",
    							REG_OPTION_NON_VOLATILE,
    							KEY_ALL_ACCESS,
    							NULL,
    							&m_hKey, //m_hKey ist Membervariable vom Typ HKEY
    							&dwDisposition );
    	if (dwErrorCode != ERROR_SUCCESS)
    	{
    		HWND hWnd = AfxGetApp()->GetMainWnd()->m_hWnd; 
    		ErrorText.Format("Registry konnte nicht angelegt werden. ErrorCode: %d",  dwErrorCode);
    		MessageBox(hWnd, ErrorText, NULL, MB_OK | MB_ICONSTOP);
    		return;
    	}
    	else
    	{
    		if (dwDisposition == REG_CREATED_NEW_KEY) //Registry gibt es nicht, wird neu angelegt -> default-Werte setzen
    		{
    			RegSetValueEx(m_hKey, _T("Port"), 0, REG_DWORD,
    							(unsigned char *) &dwPort, sizeof(dwPort));
    			RegSetValueEx(m_hKey, _T("IP"), 0, REG_SZ,
    							(const unsigned char *) strIP, (DWORD)strlen(strIP));
    			RegSetValueEx(m_hKey, _T("IsServer"), 0, REG_SZ,
    							(const unsigned char *) strIsServer, (DWORD)strlen(strIsServer));
    		}
    		if (dwDisposition == REG_OPENED_EXISTING_KEY) //Registry existiert bereits -> Werte auslesen
    		{
    			DWORD dwTypeString;
    			DWORD dwTypeDWORD;
    
    			DWORD dwDataSize1 = sizeof(dwPort);
    			DWORD dwDataSize2 = sizeof(strIP);
    			DWORD dwDataSize3 = sizeof(strIsServer);
    
    			RegQueryValueEx(m_hKey, _T("Port"), 0, &dwTypeDWORD,
    							(unsigned char *)&dwPort, &dwDataSize1);
    			RegQueryValueEx(m_hKey, _T("IP"), 0, &dwTypeString,
    							(unsigned char *)strIP, &dwDataSize2);
    			RegQueryValueEx(m_hKey, _T("IsServer"), 0, &dwTypeString,
    							(unsigned char *)strIsServer, &dwDataSize3);
    		}
    
    	}
    
    	//tue was auch immer mit den Werten, hier mit dwPort, strIP und strIsServer
    }
    
    void Registry::Schreiben(RegValues Values)//RegValues ist eine Datenstruktur
    {
    	char		*SupKey = "SOFTWARE\\ONKEL_WILLYS_SOFTWARE";
    	CString		ErrorText;
    	char		strIP[120];
    	DWORD		dwPort;
    	char		strIsServer[120];
    
    	RegDeleteKey(HKEY_LOCAL_MACHINE, SupKey);//mit Sicherheit nicht der beste Weg die Registry zu überschreiben, aber es funktioniert...
    	DWORD dwDisposition;
    	DWORD dwErrorCode = RegCreateKeyEx(HKEY_LOCAL_MACHINE,
    									SupKey,
    									0,
    									"",
    									REG_OPTION_NON_VOLATILE,
    									KEY_ALL_ACCESS,	NULL,
    									&m_hKey,
    									&dwDisposition );
    	if (dwErrorCode != ERROR_SUCCESS)
    	{
    		HWND hWnd = AfxGetApp()->GetMainWnd()->m_hWnd; 
    		ErrorText.Format("Registry konnte nicht geändert werden. ErrorCode: %d",  dwErrorCode);
    		MessageBox(hWnd, ErrorText, NULL, MB_OK | MB_ICONSTOP);
    		//todo errorhandling
    	}
    	if (dwDisposition == REG_CREATED_NEW_KEY)
    	{
    		dwPort = Values.dwPort;
    		strcpy(strIP, Values.strIP);
    		strcpy(strIsServer, Values.strIsServer);
    
    		RegSetValueEx(m_hKey, _T("Port"), 0, REG_DWORD,
    						(unsigned char *) &dwPort, sizeof(dwPort));
    		RegSetValueEx(m_hKey, _T("IP"), 0, REG_SZ,
    						(const unsigned char *) strIP, (DWORD)strlen(strIP));
    		RegSetValueEx(m_hKey, _T("IsServer"), 0, REG_SZ,
    						(const unsigned char *) strIsServer, (DWORD)strlen(strIsServer));
    
    	}
    }
    

    Kann auf Richtigkeit keine Garantie übernehmen, da ich es aus meinem Projekt auf die Schnelle zusammengeschustert habe. Bei Problemen einfach nochmal melden



  • sorry vergessen die FAQ zu durchsuchen!
    Danke



  • Such in der WinApi-FAQ, da wirst du fündig !

    Gruß
    :: NoName ::



  • OK habe nun http://www.c-plusplus.net/forum/viewtopic.php?t=39053&highlight=registry gefunden.
    Dazu habe ich aber nun noch eine Frage.
    Wie überprüft man nun genau ob ein Key vorhanden ist? Bekomme diese Fehlermeldung nicht.
    Und es gibt ja einige Punkte die in de Registry nicht drinnenstehen.
    Wenn ich nun überprüfen würde ob der Key vorhanden ist und ich als Antwort bekomme das er nicht vorhanden ist kann ich ihn ja nicht einfach erstellen oder?
    zB Systemsteuerung ist ja eigentlich mit 1 also aktiv steht aber nicht in der Registry.
    Wie kann man sowas kontrollieren? Oder ist alles was nicht drinsteht mit 1 als standart?

    Danke



  • Und nochwas hinten nach.
    Wenn ich etwas deaktivieren möchte setze ich es ja auf 0 nur bekomme ich da die Fehlermedlung --> error C2668: 'SetValue' : Mehrdeutiger Aufruf einer ueberladenen Funktion

    bei dem Befehl: -->

    keynofind.SetValue( 0, "NoFind");
    

    Wie kann ich den sonst auf 0 setzen?

    Danke



  • Weiß niemand wie ich wieder einen Wert auf 0 setze?
    Kann den Wert auf alles mögliche setzen nur nicht auf 0.

    Oder muss ich den Key dazu einfach wieder rauslöschen?
    Wenn ja wie löscht man eigentlich einen Key?

    Danke



  • keynofind.SetValue( (DWORD)0, "NoFind");

    Sowas kann man aber auch selber rausfinden ....



  • aso, ich hab das am einfachsten mit CRegKey hingekriegt!!!
    für irgendwas müssen die mfc doch gut sein!!!

    bis dann man, ich


Anmelden zum Antworten