Forum: PC-Programmierung [C++] Werte in Registry schreiben


von Johannes (Gast)


Lesenswert?

Hallo Leute,

ich weiß, das Thema wurde schon oft behandelt aber ich komme einfach auf 
keine Lösung.
Ich  habe folgende Funktion, geschrieben die einen Programm ins 
Autostart verzeichniss schreiben soll. Das Programm lässt sich zwar 
kompilieren aber in die Registry werden keine Werte geschrieben.
1
void install::regautostart()
2
{
3
4
5
  HKEY hkey;
6
  HKEY KEY = HKEY_CURRENT_USER;
7
  char place[100]= {"Software\\Microsoft\\Windows\\CurrentVersion\\Run"};
8
  char name[100]= {"Autostart"};
9
  char value[100]= {"C:\\programm.exe"};
10
11
  RegOpenKeyEx(KEY,(LPCTSTR)place,0, KEY_ALL_ACCESS,&hkey); 
12
  RegSetValueEx(hkey, (LPCTSTR)name, 0, REG_SZ, (BYTE *)value, strlen(value));
13
  RegCloseKey(hkey); 
14
15
}

Kann mir jemand sagen was ich da übersehe? Vielen Dank

von Rolf Magnus (Gast)


Lesenswert?

Hat es einen Grund, daß du hkey uninitialisiert benutzt und dafür KEY 
initialisierst, aber nie verwendest?
Übrigens: Ich kenne mich mit Windows zwar nicht so aus, aber ich wette, 
daß die API-Funktionen auch dort zurückmelden, ob es geklappt hat oder 
nicht und ggf. warum.

von Rolf Magnus (Gast)


Lesenswert?

Ok, hätte genauer hinsehen sollen. Vergiß den esten Teil. Aber das 
Abfragen nach Fehlern wäre trotzdem eine gute Idee.

von Peter II (Gast)


Lesenswert?

kann es sein das du keine Rechte hast? Welches Windows nutzt du?

Und auch von mir der hinweis - Fehlerbehandlung!

von ... (Gast)


Lesenswert?

Also prinzipiell funktioniert der Code, grad unter XP getestet. Hab hier 
allerdings Adminrechte. Wobei, unter HKEY_CURRENT_USER sollten 
eigentlich auch normale User Schreibrechte haben. Also wie schon gesagt 
- Fehlerbehandlung!

PS: Als Namen "Autostart" zu verwenden ist allerdings keine so gute 
Idee. Besser den eigenen Programmnamen dafür nutzen.

von Johannes (Gast)


Lesenswert?

Hallo Leute,

Danke für eure hilfe. Habe es jetzt auch noch mal in einem neuen Projekt 
auf einer XP maschiene versucht und dort funktionierte es auch.

Habe dann mal die Projekt-einstellungen gesehen und gemerkt das das 
Projekt auf "UNICODE" hatte.. klar dass es dann nicht ging ;)

Vielen Dank

von Jean P. (fubu1000)


Lesenswert?

Johannes schrieb:
> Habe dann mal die Projekt-einstellungen gesehen und gemerkt das das
> Projekt auf "UNICODE" hatte.. klar dass es dann nicht ging ;)

Das häTTE auch unter UNICODE funktioniert, wenn du statt:
1
  HKEY hkey;
2
  HKEY KEY = HKEY_CURRENT_USER;
3
  char place[100]= {"Software\\Microsoft\\Windows\\CurrentVersion\\Run"};
4
  char name[100]= {"Autostart"};
5
  char value[100]= {"C:\\programm.exe"};
6
7
  RegOpenKeyEx(KEY,(LPCTSTR)place,0, KEY_ALL_ACCESS,&hkey);

dieses benutzt hättest(beachte das TCHAR und das "L" vorm string:
1
   TCHAR path[] = L"Software\\Microsoft\\Windows\\CurrentVersion\\Run";
2
   HKEY hKey = NULL;
3
   if (RegOpenKeyEx(HKEY_CURRENT_USER, 
4
                     path,
5
                     0,
6
                     KEY_ALL_ACCESS,
7
                     &hKey) == ERROR_SUCCESS)
8
   {
9
     ...
10
   }

GRUß

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.