April 24, 2024, 12:28:58 AM

News:

Own IWBasic 2.x ? -----> Get your free upgrade to 3.x now.........


New Registry.inc file and instructions

Started by Andy, March 09, 2010, 05:58:01 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Andy

March 09, 2010, 05:58:01 AM Last Edit: March 09, 2010, 06:00:06 AM by Larry McCaughn
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.

Day after day, day after day, we struck nor breath nor motion, as idle as a painted ship upon a painted ocean.