Hi everyone,
I have now managed to include the command RegDeleteValue (which deletes a specified registry value) into the Registry.inc file - please enjoy.
Registry.inc as follows:
DECLARE IMPORT,RegOpenKeyExA(hkey as Uint,subkey as string,options as int,security as int,result as pointer),INT
DECLARE IMPORT,RegQueryValueExA(hkey as Uint,valuename as string,reserved as pointer,typ as pointer,keyvalue as pointer,size as pointer),INT
DECLARE IMPORT,RegCloseKey(hkey as Uint),INT
DECLARE IMPORT,RegCreateKeyExA(hKey AS INT,lpSubKey AS STRING,Reserved AS INT,lpClass AS STRING,dwOptions AS INT,samDesired AS INT,lpSecurityAttributes AS int,phkResult AS INT BYREF,lpdwDisposition AS INT BYREF),INT
DECLARE IMPORT,RegDeleteKeyA(hKey AS Uint,SubKey AS STRING),INT
DECLARE IMPORT,RegSetValueExA(hKey AS INT,lpValueName AS STRING,Reserved AS INT,dwType AS INT,lpData AS POINTER,cbData AS INT),INT
DECLARE IMPORT,RegDeleteValueA(hKey:INT, lpValueName:STRING),INT
SETID "HKEY_CLASSES_ROOT", 0x80000000
SETID "HKEY_CURRENT_USER", 0x80000001
SETID "HKEY_LOCAL_MACHINE", 0x80000002
SETID "HKEY_USERS", 0x80000003
SETID "HKEY_PERFORMANCE_DATA",0x80000004
SETID "HKEY_CURRENT_CONFIG", 0x80000005
SETID "HKEY_DYN_DATA", 0x80000006
SETID "KEY_ALL_ACCESS", 63
SETID "REG_SZ",1
SETID "REG_BINARY", 3
SETID "REG_DWORD", 4
Sub GetRoot(Key as string),UInt
string rf
UInt retval
retval=0
rf=left$(Key,instr(Key,"\\")-1)
select rf
case "HKEY_CLASSES_ROOT"
retval= @HKEY_CLASSES_ROOT
case "HKEY_CURRENT_USER"
retval=@HKEY_CURRENT_USER
case "HKEY_LOCAL_MACHINE"
retval=@HKEY_LOCAL_MACHINE
case "HKEY_USERS"
retval=@HKEY_USERS
case "HKEY_PERFORMANCE_DATA"
retval=@HKEY_PERFORMANCE_DATA
case "HKEY_CURRENT_CONFIG"
retval=@HKEY_CURRENT_CONFIG
case "HKEY_DYN_DATA"
retval=@HKEY_DYN_DATA
endselect
return retval
EndSub
Sub RegGetValue(Key as string,opt ValueName as string),string
string retval,rf,ky
UInt root,ret,ln,typ
int getdw
retval=""
ln=255
rf=left$(Key,instr(Key,"\\")-1)
ky=right$(Key,len(Key)-1-len(rf))
if RegOpenKeyExA(GetRoot(Key),ky,0,@KEY_ALL_ACCESS,ret) = 0
RegQueryValueExA(Ret,ValueName,NULL,typ,retval,ln)
if typ=4:'Dword
ln=4
RegQueryValueExA(Ret,ValueName,NULL,typ,getdw,ln)
retval=str$(getdw)
endif
endif
RegCloseKey(ret)
return retval
EndSub
Sub RegDeleteValue(Key as string,opt ValueName as string),string
string retval,rf,ky
UInt root,ret,ln,typ
int getdw
retval=""
ln=255
rf=left$(Key,instr(Key,"\\")-1)
ky=right$(Key,len(Key)-1-len(rf))
if RegOpenKeyExA(GetRoot(Key),ky,0,@KEY_ALL_ACCESS,ret) = 0
IF RegDeleteValueA(ret,valuename) = 0
retval = "0"
ELSE
retval = "1"
ENDIF
endif
RegCloseKey(ret)
return retval
EndSub
Sub RegSetValue(Key as string,Value as string,opt ValueName as string),int
string rf,ky
UInt root,ret,ln,typ
int retval,tmp
retval=0
tmp=0
ln=255
rf=left$(Key,instr(Key,"\\")-1)
ky=right$(Key,len(Key)-1-len(rf))
RegCreateKeyExA(GetRoot(Key),ky,0,"",0,@KEY_ALL_ACCESS,0,ret,tmp)
tmp=0
ln=len(value)+1
retval=RegSetValueExA(ret,ValueName,tmp,@REG_SZ,Value,ln)
RegCloseKey(ret)
return retval
EndSub
Sub RegSetDWValue(Key as string,Value as int,opt ValueName as string),int
string rf,ky
UInt root,ret,ln,typ
int retval,tmp
retval=0
tmp=0
ln=255
rf=left$(Key,instr(Key,"\\")-1)
ky=right$(Key,len(Key)-1-len(rf))
RegCreateKeyExA(GetRoot(Key),ky,0,"",0,@KEY_ALL_ACCESS,0,ret,tmp)
tmp=0
ln=4
retval=RegSetValueExA(ret,ValueName,tmp,@REG_DWORD,Value,ln)
RegCloseKey(ret)
return retval
EndSub
Sub RegCreateKey(Key as string),int
string rf,ky
UInt root,ret
int retval,tmp,ln
tmp=0
ln=255
rf=left$(Key,instr(Key,"\\")-1)
ky=right$(Key,len(Key)-1-len(rf))
retval=RegCreateKeyExA(GetRoot(Key),ky,0,"",0,@KEY_ALL_ACCESS,0,ret,tmp)
RegCloseKey(ret)
return retval
EndSub
Sub RegDeleteKey(Key as string),int
string rf,ky
int retval
rf=left$(Key,instr(Key,"\\")-1)
ky=right$(Key,len(Key)-1-len(rf))
retval=RegDeleteKeyA(GetRoot(Key),ky)
return retval
EndSub
---------------------------------
Example of how to use:
--------------------------------
$INCLUDE "Registry.inc"
DEF resultin:string
resultin = RegDeleteValue("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" , "a")
'Returns a string value = "0" Deleted, "1" Not Deleted.
OPENCONSOLE
IF resultin = "0"
PRINT "Registry Value Deleted"
ELSE
PRINT "Registry Value NOT Deleted"
ENDIF
DO:UNTIL INKEY$ <> ""
END
Regards
Andy.