Version 11 of registry

Updated 2002-09-06 07:39:53

Purpose: collect tips, techniques, and suggestions for making careful use of the Windows registry extension

http://www.purl.org/tcl/home/man/tcl8.4/TclCmd/registry.htm


Windows Registry Browser is an example of use of the registry extension.


There's more at Microsoft Windows and Tk. Among the most interesting:


Chin Huang offers an example: "this Tcl script lists the programmatic identifier (ProgID) of all COM classes that have a ProgID.

      package require registry

      set classesRootKey "HKEY_CLASSES_ROOT\\CLSID"
      foreach clsid [registry keys $classesRootKey] {
          set clsidKey "$classesRootKey\\$clsid"
          set progIdSubKey [registry keys $clsidKey "VersionIndependentProgID"]
          if {[llength $progIdSubKey] > 0} {
              set progId [registry get "$clsidKey\\$progIdSubKey" ""]
              puts $progId
          }
      }

"


Tom Wilkason wrote in the comp.lang.tcl newsgroup:

Below is what I do to set system env variables on Win2K (need admin priv for system variables). Note, you generally have to logout for them to take effect.

 ;##
 ;# Set a user Env variable, may have to logout first
 ;#
 proc setUserEnv {key value} {
   package require registry
   global env
   if {[catch {
      registry set "HKEY_CURRENT_USER\\Environment" $key $value
   } result]} {
     puts stderr "$result"
   }
   set env($key) $value
 }
 ;##
 ;# Set a system wide Env variable, if fails set the user env variable  instead
 ;#
 proc setSysEnv {key value} {
   package require registry
   global env
   if {[catch {
      registry set "HKEY_LOCAL_MACHINE\\SYSTEM\\ControlSet001\\Control\\Session Manager\\Environment" $key $value
      registry set "HKEY_LOCAL_MACHINE\\SYSTEM\\ControlSet002\\Control\\Session Manager\\Environment" $key $value
      registry set "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment" $key $value
   } result]} {
     registry set "HKEY_CURRENT_USER\\Environment" $key
     puts stderr "$result"
   } else {
     catch {registry delete "HKEY_CURRENT_USER\\Environment" $key}
   }
   set env($key) $value
 }

Earl Johnson A while back I wrote a wrapper around many of the common uses of the registry. You can find it at

http://users.erols.com/earl-johnson/ms_shell_setup.html

---

Mick O'Donnell [L1 ]: The location of the Desktop Folder can be recovered using the following code. As the exact registry key which stores this information seems to vary from OS to OS, and between single and multiple user machines, the code tries various locations until it finds the key:

proc desktop-location {} {

    # Load the registry package
    package require registry

    # Define likely registry locations
    set keys [list {HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders}\
            {HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion\\ProfileList}\
            {HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders}]

    # Try each location till we find a result
    foreach key $keys {
        if ![catch "registry get \"$key\" Desktop" result] {
            return $result
        }
    }

}


Back to Tcl core extension syntax. Tcl syntax help - Category Command