Seite 1 von 1

_winreg REG-Typen

Verfasst: Dienstag 2. Januar 2007, 17:13
von droptix
Spiele grad mit `_winreg` rum. Man kann mittels

Code: Alles auswählen

name, data, type = _winreg.EnumValue(handle, v)
Namen, Daten und den Typ eines Reg-Values bestimmen. Leider kommt bei `type` nur eine Ganzzahl raus. Ich hätte stattdessen aber lieber einen lesbaren String, so wie er z.B. auch in regedit.exe zu lesen ist. Man liest recht häufig Begriffe wie REG_SZ oder REG_BINARY. Das Modul `_winreg` hat aber haufenweise Attribute, die mit "REG_" beginnen:
_winreg.__dict__ hat geschrieben:REG_LEGAL_CHANGE_FILTER 15
REG_DWORD_BIG_ENDIAN 5
REG_SZ 1
REG_BINARY 3
REG_OPENED_EXISTING_KEY 2
REG_EXPAND_SZ 2
REG_OPTION_CREATE_LINK 2
REG_FULL_RESOURCE_DESCRIPTOR 9
REG_NOTIFY_CHANGE_SECURITY 8
REG_REFRESH_HIVE 2
REG_OPTION_BACKUP_RESTORE 4
REG_OPTION_NON_VOLATILE 0
REG_WHOLE_HIVE_VOLATILE 1
REG_NONE 0
REG_LINK 6
REG_MULTI_SZ 7
REG_DWORD 4
REG_LEGAL_OPTION 15
REG_NO_LAZY_FLUSH 4
REG_NOTIFY_CHANGE_NAME 1
REG_RESOURCE_LIST 8
REG_NOTIFY_CHANGE_ATTRIBUTES 2
REG_OPTION_VOLATILE 1
REG_DWORD_LITTLE_ENDIAN 4
REG_RESOURCE_REQUIREMENTS_LIST 10
REG_OPTION_OPEN_LINK 8
REG_CREATED_NEW_KEY 1
REG_OPTION_RESERVED 0
REG_NOTIFY_CHANGE_LAST_SET 4
Wenn diese alle einen unterschiedlichen Wert hätten, käme man sofort auf die lesbaren Worte heran, die es als Reg-Value-Typ gibt. Da sich aber Werte doppeln, kann ich leider nicht einfach den ganzzahligen Wert von `type` in den entsprechenden Begriff beginnend mit "REG_" umwandeln.

Problem: Welche Begriffe sind gültige Reg-Value-Typen, die `EnumValue()` ausspucken könnte?

Microsoft fragen

Verfasst: Dienstag 2. Januar 2007, 17:23
von droptix

Re: _winreg REG-Typen

Verfasst: Dienstag 2. Januar 2007, 17:24
von gerold
droptix hat geschrieben:Welche Begriffe sind gültige Reg-Value-Typen, die `EnumValue()` ausspucken könnte?
Hi droptix!

http://msdn2.microsoft.com/en-us/library/ms724884.aspx

mfg
Gerold
:-)

Vorschlag

Verfasst: Dienstag 2. Januar 2007, 17:37
von droptix
Hui, da fehlte noch `REG_QWORD_LITTLE_ENDIAN` in der Knowledge Base. Danke gerold!

Code: Alles auswählen

import _winreg

TYPES = {
	'UNKNOWN': "UNKNOWN"
}

types = (
	"REG_BINARY",
	"REG_DWORD",
	"REG_DWORD_LITTLE_ENDIAN",
	"REG_DWORD_BIG_ENDIAN",
	"REG_EXPAND_SZ",
	"REG_MULTI_SZ",
	"REG_SZ",
	"REG_RESOURCE_LIST",
	"REG_RESOURCE_REQUIREMENTS_LIST",
	"REG_FULL_RESOURCE_DESCRIPTOR",
	"REG_NONE",
	"REG_LINK",
	"REG_QWORD",
	"REG_QWORD_LITTLE_ENDIAN"
)
for t in types:
	if t in _winreg.__dict__:
		num = getattr(_winreg, t)
		TYPES[num] = t
		print t, num

"""
REG_BINARY 3
REG_DWORD 4
REG_DWORD_LITTLE_ENDIAN 4
REG_DWORD_BIG_ENDIAN 5
REG_EXPAND_SZ 2
REG_MULTI_SZ 7
REG_SZ 1
REG_RESOURCE_LIST 8
REG_RESOURCE_REQUIREMENTS_LIST 10
REG_FULL_RESOURCE_DESCRIPTOR 9
REG_NONE 0
REG_LINK 6
"""
Was wohl nichts nützt... denn Python kennt wohl nicht alle Typen? Die QWORD-Typen fehlen schonmal.

EDIT: Hmm, das sind 64-Bit Zahlen. Gibt's die vielleicht nur auf 64-Bit Windows-Systemen? Es gibt ja auch einen Python 2.5 Windows AMD64 installer...