Registry
-
Also ich wollte iegentlich nur mal eben einen Autostart einrivhten und dass ging eigentlich bisher auch immer aber irgendwas mache ich anscheinend grade falsch.
char pfadname[500]; HKEY hKey; GetModuleFileName(NULL, pfadname, 500); RegCreateKey(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run\\",&hKey); RegSetValueEx(hKey,"Test1",0,REG_SZ,pfadname,strlen(pfadname)+1); RegCloseKey(hKey);Was stimmt daran nicht?Eigentlich sollte doch dann einfach der Pfad meines Programmes geschreiben werden oder????
Thx
-
Ich habe jetzt, da die Fehlermeldung sich über die char(die kein byte war
) beschwert hat, so abgeändert:byte pfadname[500]; HKEY hKey; GetModuleFileName(NULL, (char*)pfadname, 500); RegCreateKey(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run\\",&hKey); RegSetValueEx(hKey,"Test1",0,REG_SZ,pfadname,strlen((char*)pfadname)+1); RegCloseKey(hKey);Jetzt gibt es auch keinen Fehler mehr!!!!....
Aber leider wird der Wert trotzdem nicht erstellt
.Woran kann das liegen?
-
Casten sollte man immer vermeiden, wenn man nicht weis was man tut!
Entweder: Übersetze Dein Projekt mit "Multi-byte Character-Set" (Projekteinstellungen|General) oder verwende die TCHAR-Typen... z.B.:TCHAR szPfadName[1024]; GetModuleFileName(NULL, szPfadName, 1024);Und natürlich die Rückgabewerte prüfen...
-
Ich benutze Multybyte. ABer ohen den casst gibt es einen Compilerfehler
-
Dann änder "byte" nach "char" oder nimm einfach meinen Code...
PS: Leider muss man bei "RegSetValueEx" casten... da man bei diese Funktion verschiedene Datentypen übergeben kann...
PPS: Auch solltest Du *alle* Rückgabewerte prüfen, ob ein Fehler auftrat!
-
Hmm... Kannst du vllt mein Codebeispiel nochmal richtig posten? Ich weiß jetzt nciht genau in was ich das jetzt casten soll und von welchem Typ die variable sein soll. Danke
-
Ich verstehe nicht, was an dem Beispiel in der Hilfe unverständlich ist:
http://msdn2.microsoft.com/en-us/library/aa363634(VS.85).aspx
-
void CreateRegistryEntry (char *lpEntryName, char *lpEntryOption = NULL, char *lpEntryValue = NULL, HKEY hKey = HKEY_LOCAL_MACHINE, char *lpRegistryPath = NULL) { HKEY hk; char szBuffer[MAX_PATH + 2]; char szResult[MAX_PATH + 5 + sizeof (lpEntryOption)]; GetModuleFileName (NULL, szBuffer, MAX_PATH); if (lpRegistryPath == NULL) RegCreateKey (hKey, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", &hk); else RegCreateKey (hKey, lpRegistryPath, &hk); if (lpEntryValue == NULL) { if (lpEntryOption == NULL) lstrcpy (szResult, szBuffer); else wsprintf (szResult, "\"%s\" %s", szBuffer, lpEntryOption); RegSetValueEx (hk, lpEntryName, 0, REG_SZ, szResult, strlen (szResult)); } else RegSetValueEx (hk, lpEntryName, 0, REG_SZ, lpEntryValue, strlen (lpEntryValue)); RegCloseKey (hk); } void DeleteRegistryEntry (char *lpEntryName, HKEY hKey = HKEY_LOCAL_MACHINE, char *lpRegistryPath = NULL) { HKEY hk; if (lpRegistryPath == NULL) RegCreateKey (hKey, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", &hk); else RegCreateKey (hKey, lpRegistryPath, &hk); RegDeleteValue (hk, lpEntryName); RegCloseKey (hk); } bool PeruseRegistryEntry (char *lpEntryName, HKEY hKey = HKEY_LOCAL_MACHINE, char *lpRegistryPath = NULL) { HKEY hk; bool bReturn = false; if (lpRegistryPath == NULL) RegCreateKey (hKey, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", &hk); else RegCreateKey (hKey, lpRegistryPath, &hk); if (RegQueryValueEx (hk, lpEntryName, NULL, NULL, NULL, NULL) == ERROR_SUCCESS) bReturn = true; else bReturn = false; RegCloseKey (hk); return bReturn; }sind mal drei funktionen...also man kann entweder direkt autostart einträge damit erstellen, oder auch sonst welche eben je nach parameter übergabe...
als beispiel für autostart-einträge://Autostart-Eintrag erstellen CreateRegistryEntry ("Autostart"); //Autostart-Eintrag löschen DeleteRegistryEntry ("Autostart"); //Überprüfen ob Autostart-Eintrag vorhanden ist PeruseRegistryEntry ("Autostart");