15. november 2002 - 18:15
#5
Hvis du fumler bare en lille smule, så kan du lave mange
ulykker.
Det er ikke svært at skrive til registry:
RegOpenKeyEx
RegSetValueEx
RegCloseKey
Men at få de rigtige key opdateret på den rigtige
måde.
Måske kører dit program OK på en PC, men på en anden
virker det ikke.
MS er ikke særligt gode til at dokumentere, hvordan
tingene er skruet sammen.
15. november 2002 - 18:23
#6
Jeg skrev følgende for en del år siden:
char winreg_retbuf[256];
char *winreg_get_string(char *key,char *name,HKEY root)
{
HKEY h;
DWORD typ,len;
if(RegOpenKeyEx(root,key,0,KEY_QUERY_VALUE,&h)) return NULL;
len = sizeof(winreg_retbuf) - 1;
if(RegQueryValueEx(h,name,NULL,&typ,(BYTE *)winreg_retbuf,&len)) {
RegCloseKey(h);
return NULL;
}
if(typ!=REG_SZ) {
RegCloseKey(h);
return NULL;
}
winreg_retbuf[len] = '\0';
RegCloseKey(h);
return winreg_retbuf;
}
long int winreg_get_int(char *key,char *name,HKEY root)
{
HKEY h;
DWORD typ,len;
long int retval;
if(RegOpenKeyEx(root,key,0,KEY_QUERY_VALUE,&h)) return -1;
len = sizeof(long int);;
if(RegQueryValueEx(h,name,NULL,&typ,(BYTE *)&retval,&len)) {
RegCloseKey(h);
return -1;
}
if(typ!=REG_DWORD) {
RegCloseKey(h);
return -1;
}
RegCloseKey(h);
return retval;
}
BOOL winreg_set_string(char *key,char *name,char *value,HKEY root)
{
HKEY h;
if(RegOpenKeyEx(root,key,0,KEY_QUERY_VALUE,&h)) return FALSE;
if(RegSetValueEx(h,name,0,REG_SZ,(BYTE *)value,strlen(value))) {
RegCloseKey(h);
return FALSE;
}
RegCloseKey(h);
return TRUE;
}
BOOL winreg_set_int(char *key, char *name,long int value,HKEY root)
{
HKEY h;
if(RegOpenKeyEx(root,key,0,KEY_QUERY_VALUE,&h)) return FALSE;
if(RegSetValueEx(h,name,0,REG_DWORD,(BYTE *)&value,sizeof(long int))) {
RegCloseKey(h);
return FALSE;
}
RegCloseKey(h);
return TRUE;
}
BOOL winreg_delete_value(char *key,char *name,HKEY root)
{
HKEY h;
if(RegOpenKeyEx(root,key,0,KEY_QUERY_VALUE,&h)) return FALSE;
if(RegDeleteValue(h,name)) {
RegCloseKey(h);
return FALSE;
}
RegCloseKey(h);
return TRUE;
}