Registry Problem

Hallasas

Erfahrenes Mitglied
Hallo, ich will mein Programm in die Registry (autostart) eintragen, funktioniert aber nicht richtig...
Hier mein Code:
C++:
#include <windows.h>

int main()
{
    char file_path[MAX_PATH];
    GetModuleFileName(NULL, file_path, sizeof(file_path));
    
    BYTE pfad[] = file_path; 
    HKEY hkey; 
    RegCreateKeyEx(HKEY_CURRENT_USER,"Software\\Microsoft\\Windows\\CurrentVersion\\Run", 0, 0, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hkey, 0);    
    RegSetValueEx(hkey, "key", 0, REG_SZ, pfad, sizeof(pfad)); 
    RegCloseKey(hkey);
    
    return 0;
}
Das Problem liegt hier:
C++:
    BYTE pfad[] = file_path;

Ich freue mich über eure Hilfe
Gruß Hallasas
 
Zuletzt bearbeitet von einem Moderator:
Wenn Du jetzt noch das Problem selber beschreiben könntest wären wir fast in der Lage Dir sogar zu helfen.
 
Nur für dich, jsendrow:
Code:
main.cpp:8: error: initializer fails to determine size of `pfad'
main.cpp:8: error: invalid initializer

Mfg
 
Die Fehlermeldung sagt doch ganz genau was Du falsch machst, wo ist also das Problem?
 
@jesendrow
Die Fehlermeldung sagt doch ganz genau was Du falsch machst, wo ist also das Problem?
Warum antwortest Du nicht ordentlich auf die Frage?
Hallasas hat die Frage gestellt weil er offensichtlich nicht weiter weiß. Manchmal hat man sich in was verrannt, wo man nicht wieder raus kommt. Ich gehe mal davon aus, daß Du den Fehler erkannt hast, dann wäre es nett wenn Du ihm helfen würdest, auch wenns vielleicht trivial für Dich ist.

@Hallasas
Warum weist Du file_path nochmals einer neuen Variablen zu. Dazu besteht doch eigentlich keine Notwendigkeit oder habe ich hier was übersehen.
Ich habe mal Deinen Quelltext ausprobiert und nur diese Zeile
Code:
RegSetValueEx(hkey, "key", 0, REG_SZ, pfad, sizeof(pfad));
durch diese ersetzt
Code:
RegSetValueEx(hkey, "key", 0, REG_SZ, file_path, sizeof(file_path));
In BDS2006 compilierts fehlerfrei.
 
jsendrow, ich finde es ja schön, dass du uns allen mitteilst, das du sofort eine Lösung für mein Problem gefunden hast. Es würde mich sichtlich freuen, wenn du mir die Lösung meines Problems "erläutern" könntest - natürlich nur, wenn es euch beliebt, (herr) jsendrow

Twinsetter, danke für die rasche antwort...
Aber gcc meldet:
Code:
error: invalid conversion from `char*' to `const BYTE*'
error: initializing argument 5 of `LONG RegSetValueExA(HKEY__*, const CHAR*, DWORD, DWORD, const BYTE*, DWORD)'

Ich hoffe, du kannst mir weiterhelfen...

Gruß Hallasas
 
Schade, daß ich Dir bisher nicht weiterhelfen konnte. Mit gcc kenne ich mich leider nicht so aus, obwohl ich doch ab und an auch unter Linux unterwegs bin, wo gcc Standard ist.
Ich habe letztes Jahr einige Euronen gelöhnt und mir Borland Developer Studio zu gelegt. Und dort ist auch eine C++ IDE integriert. Ich habe aus verschieden Gründen mit einem C++ Projekt begonnen, bin hier aber noch nicht so fit, da ich normalerweise mit Delphi (Objektpascal) programmiere.
Ich habe es grad noch mal probiert mit Deinem Quelltext. Da erhalte ich unter BDS folgene Fehlermeldung:
[C++ Fehler] Unit1.cpp(14): E2034 Konvertierung von 'char *' nach 'unsigned char[]' nicht möglich
Habe irgendwie den Eindruck, daß die Konvertierung von Char nach Byte nicht funktioniert. Warum? Bin ich momentan überfragt. Ich werde noch mal im schlauen Buch nachschauen.
Habe schnell noch mal gegoogelt und folgendes gefunden:
Code:
RegSetValueEx(hkey, "key", 0, REG_SZ, (CONST BYTE*)file_path, sizeof(file_path));
Die Zeile
Code:
BYTE pfad[] = file_path;
kannst Du Dir dann sparen.
Bei mir hat so funktioniert (BDS2006)

C ist schon sehr cryptisch und teilweise schwierig nachvollziebar. Pascal respektive Delphi ist da einfacher.
 
Zurück