June 17, 2024, 08:38:18 AM

News:

IonicWind Snippit Manager 2.xx Released!  Install it on a memory stick and take it with you!  With or without IWBasic!


RegDeleteValue

Started by Andy, March 08, 2010, 06:10:22 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Andy

Hi Everyone,

I hope someone can help me with this, as I have searched for this, puzzled over it and i'm sure that i am missing something silly as i am just not getting this at all.

I want to simply delete a registry value - for example a dword called "a"
The registry location is HKCU\software\microsoft\Windows\CurrentVersion\Explorer\Advanced

Now i'm trying bits of code but i need help from someone out with a greater mind than mine !

I Tried this but to be honest I really don't understand it as i'm new to using the declare function -

DEF Key:string
DEF ret:INT
DEF subkey,bk$:string
INT hKey
INT phkResult

bk$ = CHR$(92)

DECLARE "advapi32.dll",RegOpenKeyEx alias RegOpenKeyExA(hKey:INT, lpSubKey:STRING, ulOptions:INT, samDesired:INT, phkResult:POINTER),INT
DECLARE "advapi32.dll",RegDeleteValue alias RegDeleteValueA(hKey:INT, lpValueName:STRING),INT

CONST HKEY_CURRENT_USER = 0x80000001
CONST KEY_ALL_ACCESS = 63

subkey = "SOFTWARE"+bk$+"MICROSOFT"+bk$+"WINDOWS"+bk$+"CurrentVersion"+bk$+"Explorer"+bk$+"Advanced"
key = "HKEY_CURRENT_USER"+bk$+subkey

ret=RegOpenKeyEx(HKEY_CURRENT_USER, SubKey, 0, KEY_ALL_ACCESS, &phkResult)
result = RegDeleteValue(hKey, "a")

OPENCONSOLE
PRINT subkey
PRINT "ret    = ",ret
PRINT "result = ",result
DO:UNTIL INKEY$ <> ""
CLOSECONSOLE
END

ret returns a zero
result returns '6'

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

LarryMc

March 08, 2010, 06:51:57 AM #1 Last Edit: March 08, 2010, 06:59:54 AM by Larry McCaughn
This should be all you need


openconsole
const REG_KEY = "HKEY_CURRENT_USER\\Software\\microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced"

print "before ",RegGetDword(REG_KEY,"a",999)
DeleteRegKey(REG_KEY+"\\a")
print "after ",RegGetDword(REG_KEY,"a",999)
print
PRINT "Press any key to close"

waitcon
CLOSECONSOLE
END

LarryMc
LarryMc
Larry McCaughn :)
Author of IWB+, Custom Button Designer library, Custom Chart Designer library, Snippet Manager, IWGrid control library, LM_Image control library

Andy

Hi Larry,

Thanks very much for trying to help me so quickly as i can see you have a puzzle of your own.

The example you gave me won't work because i have been using the old registry.inc file, thats great but you cannot delete a value.

This is why i was trying to write something using a DECLARE function but i can't get my head round it as i'm new to these commands, I really wish i had an answer for your problem and i'll have a look at it later today.

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

LarryMc

What I gave you was the built in commands in EBasic.

Larry
LarryMc
Larry McCaughn :)
Author of IWB+, Custom Button Designer library, Custom Chart Designer library, Snippet Manager, IWGrid control library, LM_Image control library

LarryMc

I see what you mean.
The built in will delete a whole key but not the sub components.

LarryMc
LarryMc
Larry McCaughn :)
Author of IWB+, Custom Button Designer library, Custom Chart Designer library, Snippet Manager, IWGrid control library, LM_Image control library

Andy

Larry,

Thanks again but it doesn't even like the 'waitcon' command, but thanks for trying anyway.

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

ZeroDog

Quotekey = "HKEY_CURRENT_USER"+bk$+subkey
you are filling the variable 'key' here

Quoteresult = RegDeleteValue(hKey, "a")
but are passing the variable 'hKey' to the function.


LarryMc

Quote from: andy1966 on March 08, 2010, 07:29:47 AM
Larry,

Thanks again but it doesn't even like the 'waitcon' command, but thanks for trying anyway.

Andy.

What version of EBasic do you have?

LarryMc
LarryMc
Larry McCaughn :)
Author of IWB+, Custom Button Designer library, Custom Chart Designer library, Snippet Manager, IWGrid control library, LM_Image control library

ZeroDog

The phkresult from the RegOpenKeyEx function can be used for the hKey in the RegDeleteValue function.

Andy

March 09, 2010, 03:46:27 AM #9 Last Edit: March 09, 2010, 05:57:47 AM by Larry McCaughn
SOLVED !

Thanks for everyone's help, here it is tested and working.

DEF dwValue AS INT
DEF result:INT
DEF SubKey:string
DEF key:INT
DEF hKey:INT
DEF phkResult:INT
DEF res:INT
DEF res2:INT
DEF value:string

'Need To Use The advapi32.dll to Delete a Registry Value
DECLARE "advapi32.dll",RegDeleteValue alias RegDeleteValueA(hKey:INT, lpValueName:STRING),INT
DECLARE "advapi32.dll",RegOpenKeyEx alias RegOpenKeyExA(hKey:INT, lpSubKey:STRING, ulOptions:INT, samDesired:INT, phkResult:POINTER),INT
DECLARE "advapi32.dll",RegCloseKey(hKey:INT),INT 'Delete This Line if you want to use Registry.inc File as well.

'Define The Constants
CONST HKEY_CLASSES_ROOT = 0x80000000
CONST HKEY_CURRENT_USER = 0x80000001
CONST HKEY_LOCAL_MACHINE = 0x80000002
CONST HKEY_USERS = 0x80000003
CONST KEY_ALL_ACCESS = 63

'Set the Registry Key Location
key = HKEY_CURRENT_USER 'Integer Value 0x80000001
SubKey="SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" 'SubKey is a string

'Need To Open The Registry Key Location First otherwise we cannot delete a value in that key.
res = RegOpenKeyEx(key,SubKey,0,KEY_ALL_ACCESS,&phkResult)

'Console For Confirmation & Testing if the key location opened ok.
OPENCONSOLE

IF res = 0
PRINT "The Key Opened OK"  'res = 0
ELSE
PRINT "Could Not Open Key" 'res <> 0
DO:UNTIL INKEY$ <> ""
CLOSECONSOLE
END
ENDIF

DO:UNTIL INKEY$ <> ""

'Name The Registry Value we want to delete then Delete it
'========================================================
value = "a" 'Name of Value To Delete - Any Type e.g. Dword, String Etc
result = RegDeleteValue(phkResult,value)

PRINT
PRINT

IF result = 0
PRINT "The Registry Value Was Deleted OK"
ELSE
PRINT "Could Not Delete The Value"
ENDIF

DO:UNTIL INKEY$ <> ""
CLOSECONSOLE

'You can now delete more values in the same registry key location.
value = "b"
result = RegDeleteValue(phkResult,value)

value = "c"
result = RegDeleteValue(phkResult,value)

'Once Finished with Registry Location Close The Key.
res2 = RegCloseKey(key)

'result = 0 if the value is deleted ok
'res2   = 0 if the key was closed ok

'====================================================================
'NOTE
'====================================================================

'If you want to delete a value from another location
'don't forget to change the location values first
'and open the new Key.

'Set the Registry Key Location
'key = HKEY_CURRENT_USER 
'SubKey="SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer" 

'Open The Registry Key Location 
'res = RegOpenKeyEx(KEY,SubKey,0,KEY_ALL_ACCESS,&phkResult)

'Set the Value, Delete and Close The Key.

'value = "x"
'result = RegDeleteValue(phkResult,value)
'res2   = RegCloseKey(key)

'====================================================================
'Hope This Helps Everyone - Andy.
'====================================================================
END


Regards Andy.

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