corz.org uses cookies to remember that you've seen this notice explaining that corz.org uses cookies, okay!
miscelleneous registry comands
@extended values..
0 = directory (key)
1 = REG_SZ
2 = REG_EXPAND_SZ
3 = REG_BINARY
4 = REG_DWORD
7 = REG_MULTI_SZ
function list..
MakeLongRegPaths()
GetConceptCommands()
KeyIsEmpty()
ReturnAllSubkeys()
ReturnAllValueNames()
ReturnAllPairs()
SetExplorerContextMenu()
func MakeLongRegPaths($reg_key)
$reg_key = StringReplace($reg_key, "HKCR", "HKEY_CLASSES_ROOT")
$reg_key = StringReplace($reg_key, "HKCU", "HKEY_CURRENT_USER")
$reg_key = StringReplace($reg_key, "HKU", "HKEY_USERS")
$reg_key = StringReplace($reg_key, "HKLM", "HKEY_LOCAL_MACHINE")
$reg_key = StringReplace($reg_key, "HKCC", "HKEY_CURRENT_CONFIG")
return $reg_key
endfunc
func GetConceptCommands($file_type)
$file_type = "HKEY_CLASSES_ROOT\" & $file_type & "\Shell"
$dirs = ""
$y = 1
while $y
$var = RegEnumKey($file_type, $y)
if @error <> 0 then exitloop
if @extended = 0 then
$dirs &= $var & "|"
endif
$y += 1
wend
if $dirs <> "" then
$dirs = StringTrimRight($dirs, 1)
return StringSplit($dirs, "|")
endif
endfunc
func KeyIsEmpty($key)
$reg_test_array_k = ReturnAllSubkeys($key)
$reg_test_array_v = ReturnAllValueNames($key)
if $reg_test_array_k[1] = "" and $reg_test_array_v[1] = "" then
return 1
endif
endfunc
func ReturnAllSubkeys($key)
$key = MakeLongRegPaths($key)
$keys = ""
$x = 1
while $x
$var = RegEnumKey($key, $x)
if @error <> 0 then exitloop
if $var <> "" then $keys &= $var & "|"
$x += 1
wend
$keys = StringTrimRight($keys, 1)
return StringSplit($keys, "|")
endfunc
func ReturnAllValueNames($key)
$key = MakeLongRegPaths($key)
$names = ""
$x = 1
while $x
$var = RegEnumVal($key, $x)
if @error <> 0 then exitloop
if $var <> "" then $names &= $var & "|"
$x += 1
wend
$names = StringTrimRight($names, 1)
return StringSplit($names, "|")
endfunc
ReturnAllPairs example:
$str = ""
$foo = ReturnAllPairs("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run")
for $i = 1 to $foo[0][0]
$str &= "key: " & $foo[$i][0] & " value: " & $foo[$i][1] & " " & @LF
next
MsgBox (0, "These programs run at startup..", $str)
exit
dim $startup_places[4] = _
[ "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", _
"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", _
"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce", _
"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx" ]
for $place in $startup_places
$foo = ReturnAllPairs($place)
for $i = 1 to $foo[0][0]
$str &= $foo[$i][0] & " : " & $foo[$i][1] & " " & @LF
next
next
MsgBox (0, "These programs run at startup..", $str)
func ReturnAllPairs($key, $skip_empties=false)
$x = 1
$y = 1
local $pairs[1][2]
while $x
$var = RegEnumVal($key, $x)
if @error <> 0 then exitloop
$this_value = RegRead($key, $var)
if (not $skip_empties) or ($skip_empties and $this_value <> "") then
redim $pairs[$y+1][2]
$pairs[$y][0] = $var
$pairs[$y][1] = $this_value
$y += 1
endif
$x += 1
wend
$pairs[0][0] = $y - 1
return $pairs
endfunc
func SetExplorerContextMenu($ext, $switch=4, $default=false, $menu_item="", $fallback="my-unique-key", $switches="")
if not $ext then return false
local $key = $my_name
if $default then $key = "open"
if not $menu_item then $menu_item = $my_name
local $reg1, $reg2, $reg3
local $file_type = RegRead("HKEY_CLASSES_ROOT\." & $ext, "")
if not $file_type then $file_type = $fallback
local $shell = "HKEY_CLASSES_ROOT\" & $file_type & "\shell"
local $shellkey = $shell & "\" & $key
local $BAX_key = "HKEY_CLASSES_ROOT\" & $file_type & "\" & $my_name & "_Backup\" & $key
if @compiled then
$me_app = @ScriptFullPath
else
$me_app = ".\" & $my_name & ".exe"
endif
if $switch = 1 then
$regexist = RegRead($shellkey & "\command", "")
if StringInStr($regexist, RemoveExtension(BaseName(@ScriptName))) then return true
local $bax1, $bax2, $bax3, $old_val, $old_key
if $default then
$old_key = RegRead($shell, "")
$bax1 = RegWrite($BAX_key, "", "REG_SZ", $old_key)
$old_val = RegRead($shell & "\" & $old_key, "")
$bax2 = RegWrite($BAX_key, "menu", "REG_SZ", $old_val)
$old_val = RegRead($shell & "\" & $old_key & "\command", "")
$bax3 = RegWrite($BAX_key, "cmd", "REG_SZ", $old_val)
if not $bax1 and $bax2 and $bax3 then return false
endif
$reg1 = RegWrite($shellkey, "", "REG_SZ", $menu_item)
$reg2 = RegWrite($shellkey & "\command", "", "REG_SZ", '"' & $me_app & '" ' & $switches & ' "%1"')
if $default then RegWrite($shell, "", "REG_SZ", "open")
if $reg1 and $reg2 then return true
else
$regexist = RegRead($shellkey & "\command", "")
if not StringInstr($regexist, $me_app) then return true
local $old_key1, $old_key2, $old_key3
if $default then
$old_key1 = RegRead($BAX_key, "")
$old_key2 = RegRead($BAX_key, "menu")
$old_key3 = RegRead($BAX_key, "cmd")
if $old_key1 and $old_key2 and $old_key3 then
$reg1 = RegWrite($shell, "", "REG_SZ", $old_key1)
$reg2 = RegWrite($shell & "\" & $old_key1, "", "REG_SZ", $old_key2)
$reg3 = RegWrite($shell & "\" & $old_key1 & "\command", "", "REG_SZ", $old_key3)
if $reg1 and $reg2 and $reg3 then
RegDelete($BAX_key)
if KeyIsEmpty("HKEY_CLASSES_ROOT\" & $file_type & "\" & $my_name & "_Backup") then
RegDelete("HKEY_CLASSES_ROOT\" & $file_type & "\" & $my_name & "_Backup")
endif
if $old_key1 <> "open" then RegDelete($shellkey)
return true
endif
endif
else
$restored = RegDelete($shellkey)
if $restored then return true
endif
endif
return false
endfunc
Changes:
0.2
Added..
SetExplorerContextMenu()
which I cooked up for LoopDropZ & MangleeZee. All yours!
0.1
A small selection of useful registry functions..
MakeLongRegPaths()
GetConceptCommands()
KeyIsEmpty()
ReturnAllSubkeys()
ReturnAllValueNames()
ReturnAllPairs()