| [25] | 1 | '\" | 
|---|
 | 2 | '\" Copyright (c) 1997 Sun Microsystems, Inc. | 
|---|
 | 3 | '\" Copyright (c) 2002 ActiveState Corporation. | 
|---|
 | 4 | '\" | 
|---|
 | 5 | '\" See the file "license.terms" for information on usage and redistribution | 
|---|
 | 6 | '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. | 
|---|
 | 7 | '\" | 
|---|
 | 8 | '\" RCS: @(#) $Id: registry.n,v 1.22 2008/01/18 15:59:22 dkf Exp $ | 
|---|
 | 9 | '\"  | 
|---|
 | 10 | .so man.macros | 
|---|
 | 11 | .TH registry n 1.1 registry "Tcl Bundled Packages" | 
|---|
 | 12 | .BS | 
|---|
 | 13 | '\" Note:  do not modify the .SH NAME line immediately below! | 
|---|
 | 14 | .SH NAME | 
|---|
 | 15 | registry \- Manipulate the Windows registry | 
|---|
 | 16 | .SH SYNOPSIS | 
|---|
 | 17 | .sp | 
|---|
 | 18 | \fBpackage require registry 1.1\fR | 
|---|
 | 19 | .sp | 
|---|
 | 20 | \fBregistry \fIoption\fR \fIkeyName\fR ?\fIarg arg ...\fR? | 
|---|
 | 21 | .BE | 
|---|
 | 22 | .SH DESCRIPTION | 
|---|
 | 23 | .PP | 
|---|
 | 24 | The \fBregistry\fR package provides a general set of operations for | 
|---|
 | 25 | manipulating the Windows registry.  The package implements the | 
|---|
 | 26 | \fBregistry\fR Tcl command.  This command is only supported on the | 
|---|
 | 27 | Windows platform.  Warning: this command should be used with caution | 
|---|
 | 28 | as a corrupted registry can leave your system in an unusable state. | 
|---|
 | 29 | .PP | 
|---|
 | 30 | \fIKeyName\fR is the name of a registry key.  Registry keys must be | 
|---|
 | 31 | one of the following forms: | 
|---|
 | 32 | .RS | 
|---|
 | 33 | .PP | 
|---|
 | 34 | \fB\e\e\fIhostname\fB\e\fIrootname\fB\e\fIkeypath\fR | 
|---|
 | 35 | .PP | 
|---|
 | 36 | \fIrootname\fB\e\fIkeypath\fR | 
|---|
 | 37 | .PP | 
|---|
 | 38 | \fIrootname\fR | 
|---|
 | 39 | .RE | 
|---|
 | 40 | .PP | 
|---|
 | 41 | \fIHostname\fR specifies the name of any valid Windows | 
|---|
 | 42 | host that exports its registry.  The \fIrootname\fR component must be | 
|---|
 | 43 | one of \fBHKEY_LOCAL_MACHINE\fR, \fBHKEY_USERS\fR, | 
|---|
 | 44 | \fBHKEY_CLASSES_ROOT\fR, \fBHKEY_CURRENT_USER\fR, | 
|---|
 | 45 | \fBHKEY_CURRENT_CONFIG\fR, \fBHKEY_PERFORMANCE_DATA\fR, or | 
|---|
 | 46 | \fBHKEY_DYN_DATA\fR.  The \fIkeypath\fR can be one or more | 
|---|
 | 47 | registry key names separated by backslash (\fB\e\fR) characters. | 
|---|
 | 48 | .PP | 
|---|
 | 49 | \fIOption\fR indicates what to do with the registry key name.  Any | 
|---|
 | 50 | unique abbreviation for \fIoption\fR is acceptable.  The valid options | 
|---|
 | 51 | are: | 
|---|
 | 52 | .TP | 
|---|
 | 53 | \fBregistry broadcast \fIkeyName\fR ?\fB\-timeout \fImilliseconds\fR? | 
|---|
 | 54 | . | 
|---|
 | 55 | Sends a broadcast message to the system and running programs to notify them | 
|---|
 | 56 | of certain updates.  This is necessary to propagate changes to key registry | 
|---|
 | 57 | keys like Environment.  The timeout specifies the amount of time, in | 
|---|
 | 58 | milliseconds, to wait for applications to respond to the broadcast message. | 
|---|
 | 59 | It defaults to 3000.  The following example demonstrates how to add a path | 
|---|
 | 60 | to the global Environment and notify applications of the change without | 
|---|
 | 61 | requiring a logoff/logon step (assumes admin privileges): | 
|---|
 | 62 | .RS | 
|---|
 | 63 | .PP | 
|---|
 | 64 | .CS | 
|---|
 | 65 | set regPath [join { | 
|---|
 | 66 |     HKEY_LOCAL_MACHINE | 
|---|
 | 67 |     SYSTEM | 
|---|
 | 68 |     CurrentControlSet | 
|---|
 | 69 |     Control | 
|---|
 | 70 |     {Session Manager} | 
|---|
 | 71 |     Environment | 
|---|
 | 72 | } "\e\e"] | 
|---|
 | 73 | set curPath [\fBregistry get\fR $regPath "Path"] | 
|---|
 | 74 | \fBregistry set\fR $regPath "Path" "$curPath;$addPath" | 
|---|
 | 75 | \fBregistry broadcast\fR "Environment" | 
|---|
 | 76 | .CE | 
|---|
 | 77 | .RE | 
|---|
 | 78 | .TP | 
|---|
 | 79 | \fBregistry delete \fIkeyName\fR ?\fIvalueName\fR? | 
|---|
 | 80 | . | 
|---|
 | 81 | If the optional \fIvalueName\fR argument is present, the specified | 
|---|
 | 82 | value under \fIkeyName\fR will be deleted from the registry.  If the | 
|---|
 | 83 | optional \fIvalueName\fR is omitted, the specified key and any subkeys | 
|---|
 | 84 | or values beneath it in the registry hierarchy will be deleted.  If | 
|---|
 | 85 | the key could not be deleted then an error is generated.  If the key | 
|---|
 | 86 | did not exist, the command has no effect. | 
|---|
 | 87 | .TP | 
|---|
 | 88 | \fBregistry get \fIkeyName valueName\fR | 
|---|
 | 89 | . | 
|---|
 | 90 | Returns the data associated with the value \fIvalueName\fR under the key | 
|---|
 | 91 | \fIkeyName\fR.  If either the key or the value does not exist, then an | 
|---|
 | 92 | error is generated.  For more details on the format of the returned | 
|---|
 | 93 | data, see \fBSUPPORTED TYPES\fR, below. | 
|---|
 | 94 | .TP | 
|---|
 | 95 | \fBregistry keys \fIkeyName\fR ?\fIpattern\fR? | 
|---|
 | 96 | . | 
|---|
 | 97 | If \fIpattern\fR is not specified, returns a list of names of all the | 
|---|
 | 98 | subkeys of \fIkeyName\fR.  If \fIpattern\fR is specified, only those | 
|---|
 | 99 | names matching \fIpattern\fR are returned.  Matching is determined | 
|---|
 | 100 | using the same rules as for \fBstring\fR \fBmatch\fR.  If the | 
|---|
 | 101 | specified \fIkeyName\fR does not exist, then an error is generated. | 
|---|
 | 102 | .TP | 
|---|
 | 103 | \fBregistry set \fIkeyName\fR ?\fIvalueName data \fR?\fItype\fR?? | 
|---|
 | 104 | . | 
|---|
 | 105 | If \fIvalueName\fR is not specified, creates the key \fIkeyName\fR if | 
|---|
 | 106 | it does not already exist.  If \fIvalueName\fR is specified, creates | 
|---|
 | 107 | the key \fIkeyName\fR and value \fIvalueName\fR if necessary.  The | 
|---|
 | 108 | contents of \fIvalueName\fR are set to \fIdata\fR with the type | 
|---|
 | 109 | indicated by \fItype\fR.  If \fItype\fR is not specified, the type | 
|---|
 | 110 | \fBsz\fR is assumed.  For more details on the data and type arguments, | 
|---|
 | 111 | see \fBSUPPORTED TYPES\fR below. | 
|---|
 | 112 | .TP | 
|---|
 | 113 | \fBregistry type \fIkeyName valueName\fR | 
|---|
 | 114 | . | 
|---|
 | 115 | Returns the type of the value \fIvalueName\fR in the key | 
|---|
 | 116 | \fIkeyName\fR.  For more information on the possible types, see | 
|---|
 | 117 | \fBSUPPORTED TYPES\fR, below. | 
|---|
 | 118 | .TP | 
|---|
 | 119 | \fBregistry values \fIkeyName\fR ?\fIpattern\fR? | 
|---|
 | 120 | . | 
|---|
 | 121 | If \fIpattern\fR is not specified, returns a list of names of all the | 
|---|
 | 122 | values of \fIkeyName\fR.  If \fIpattern\fR is specified, only those | 
|---|
 | 123 | names matching \fIpattern\fR are returned.  Matching is determined | 
|---|
 | 124 | using the same rules as for \fBstring\fR \fBmatch\fR. | 
|---|
 | 125 | .SH "SUPPORTED TYPES" | 
|---|
 | 126 | Each value under a key in the registry contains some data of a | 
|---|
 | 127 | particular type in a type-specific representation.  The \fBregistry\fR | 
|---|
 | 128 | command converts between this internal representation and one that can | 
|---|
 | 129 | be manipulated by Tcl scripts.  In most cases, the data is simply | 
|---|
 | 130 | returned as a Tcl string.  The type indicates the intended use for the | 
|---|
 | 131 | data, but does not actually change the representation.  For some | 
|---|
 | 132 | types, the \fBregistry\fR command returns the data in a different form to | 
|---|
 | 133 | make it easier to manipulate.  The following types are recognized by the | 
|---|
 | 134 | registry command: | 
|---|
 | 135 | .TP 17 | 
|---|
 | 136 | \fBbinary\fR | 
|---|
 | 137 | . | 
|---|
 | 138 | The registry value contains arbitrary binary data.  The data is represented | 
|---|
 | 139 | exactly in Tcl, including any embedded nulls. | 
|---|
 | 140 | .TP | 
|---|
 | 141 | \fBnone\fR | 
|---|
 | 142 | . | 
|---|
 | 143 | The registry value contains arbitrary binary data with no defined | 
|---|
 | 144 | type.  The data is represented exactly in Tcl, including any embedded | 
|---|
 | 145 | nulls. | 
|---|
 | 146 | .TP | 
|---|
 | 147 | \fBsz\fR | 
|---|
 | 148 | . | 
|---|
 | 149 | The registry value contains a null-terminated string.  The data is  | 
|---|
 | 150 | represented in Tcl as a string. | 
|---|
 | 151 | .TP | 
|---|
 | 152 | \fBexpand_sz\fR | 
|---|
 | 153 | . | 
|---|
 | 154 | The registry value contains a null-terminated string that contains | 
|---|
 | 155 | unexpanded references to environment variables in the normal Windows | 
|---|
 | 156 | style (for example, | 
|---|
 | 157 | .QW %PATH% ). | 
|---|
 | 158 | The data is represented in Tcl as a string. | 
|---|
 | 159 | .TP | 
|---|
 | 160 | \fBdword\fR | 
|---|
 | 161 | . | 
|---|
 | 162 | The registry value contains a little-endian 32-bit number.  The data is | 
|---|
 | 163 | represented in Tcl as a decimal string. | 
|---|
 | 164 | .TP | 
|---|
 | 165 | \fBdword_big_endian\fR | 
|---|
 | 166 | . | 
|---|
 | 167 | The registry value contains a big-endian 32-bit number.  The data is | 
|---|
 | 168 | represented in Tcl as a decimal string. | 
|---|
 | 169 | .TP | 
|---|
 | 170 | \fBlink\fR | 
|---|
 | 171 | . | 
|---|
 | 172 | The registry value contains a symbolic link.  The data is represented | 
|---|
 | 173 | exactly in Tcl, including any embedded nulls. | 
|---|
 | 174 | .TP | 
|---|
 | 175 | \fBmulti_sz\fR | 
|---|
 | 176 | . | 
|---|
 | 177 | The registry value contains an array of null-terminated strings.  The | 
|---|
 | 178 | data is represented in Tcl as a list of strings. | 
|---|
 | 179 | .TP | 
|---|
 | 180 | \fBresource_list\fR | 
|---|
 | 181 | . | 
|---|
 | 182 | The registry value contains a device-driver resource list.  The data | 
|---|
 | 183 | is represented exactly in Tcl, including any embedded nulls. | 
|---|
 | 184 | .PP | 
|---|
 | 185 | In addition to the symbolically named types listed above, unknown | 
|---|
 | 186 | types are identified using a 32-bit integer that corresponds to the | 
|---|
 | 187 | type code returned by the system interfaces.  In this case, the data | 
|---|
 | 188 | is represented exactly in Tcl, including any embedded nulls. | 
|---|
 | 189 | .SH "PORTABILITY ISSUES" | 
|---|
 | 190 | The registry command is only available on Windows. | 
|---|
 | 191 | .SH EXAMPLE | 
|---|
 | 192 | Print out how double-clicking on a Tcl script file will invoke a Tcl | 
|---|
 | 193 | interpreter: | 
|---|
 | 194 | .PP | 
|---|
 | 195 | .CS | 
|---|
 | 196 | package require registry | 
|---|
 | 197 | set ext .tcl | 
|---|
 | 198 |  | 
|---|
 | 199 | # Read the type name | 
|---|
 | 200 | set type [\fBregistry get\fR HKEY_CLASSES_ROOT\e\e$ext {}] | 
|---|
 | 201 | # Work out where to look for the command | 
|---|
 | 202 | set path HKEY_CLASSES_ROOT\e\e$type\e\eShell\e\eOpen\e\ecommand | 
|---|
 | 203 | # Read the command! | 
|---|
 | 204 | set command [\fBregistry get\fR $path {}] | 
|---|
 | 205 |  | 
|---|
 | 206 | puts "$ext opens with $command" | 
|---|
 | 207 | .CE | 
|---|
 | 208 | .SH KEYWORDS | 
|---|
 | 209 | registry | 
|---|