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.pfmvoid 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 charactersif (!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?