REG_MULTI_SZ schreiben



  • Hi,

    ich schreibe gerade ein Programm, welches automatisch PostScript Fonts aus einem Ordner installieren soll. Diese Schriftarten müssen in der Registry eingetragen werden. Der Registryinhalt muss so aussehen:

    Name der Schriftart

    T
    fontname.pfb
    fontname.pfm
    
    void writeReg(string fontname, string filename)
    {
    
    string regeintrag = filename;
    
    // String2unsigned char
    const unsigned char * constStr = reinterpret_cast<const unsigned char *(regeintrag.c_str());
    
    HKEY hKey;
    RegCreateKey(HKEY_LOCAL_MACHINE,"Software\\Microsoft\\Windows NT\\CurrentVersion\\Type 1 Installer\\Type 1 Fonts",&hKey); 
    
    unsigned char testVAR[50] = "T\0Test\0Test2\0";
    
    // statt testVAR den constStr benutzen um den Dateinamen zu übergeben
    RegSetValueEx(hKey,fontname.c_str(),0,REG_MULTI_SZ,testVAR,filename.size());
    RegCloseKey(hKey); 
    }
    

    Wie bekomme ich denn einen Registry-Eintrag hin wie oben beschrieben? Ich bekomme das leider nicht hin.



  • Hi

    #include <shlwapi.h>
    #include <tchar.h>
    #pragma comment(lib,"shlwapi")
    
    	TCHAR testVAR[] = TEXT("T\0Test\0Test2\0");
    
    	SHSetValue(HKEY_LOCAL_MACHINE, TEXT("Software\\...\\Type 1 Fonts"),
    		fontname.c_str(), REG_MULTI_SZ, (BYTE*)testVAR, sizeof(testVAR)); // ja! sizeof()
    


  • Hi,

    wenn ich die <shlwapi.h> einbinde, erhalte ich folgenden Compiler-Fehler (DevC++)

    [Linker error] undefined reference to `_imp__SHSetValueA@24'
    

    Liegt das am Compiler?



  • Ja, #pragma wird nich unterstützt. Kannst devcpp/lib/libshlwapi.a zur Projektoptionen hinzufügen (project options->parameters->add library), oder mit RegOpen/Set/Close weiter arbeiten.



  • sapero schrieb:

    Ja, #pragma wird nich unterstützt. Kannst devcpp/lib/libshlwapi.a zur Projektoptionen hinzufügen (project options->parameters->add library), oder mit RegOpen/Set/Close weiter arbeiten.

    Jetzt funktioniert es schonmal mit der TestVAR. Aber wie bekomme ich folgenden Eintrag in die Registry?

    [code]
    T
    filename // <-- Die Variable "filename"
    [/code}



  • MSDN schrieb:

    REG_MULTI_SZ
    Array of null-terminated strings that are terminated by two null characters

    if (!RegQueryValueEx oder !SHGetValue ..., buffer, &size)
    {
    	TCHAR *pos = buffer;
    	while (*pos)
    	{
    		StringAnzeigen(pos);
    		pos = &pos[_tcslen(pos)+1]; // tchar.h
    	}
    }
    


  • Danke für deine Antwort. Irgendwie versteh ich den Code nicht richtig. Abwann wird da denn der Dateiname (bzw Buffer) übergeben?


Anmelden zum Antworten