_winreg REG-Typen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
droptix
User
Beiträge: 521
Registriert: Donnerstag 13. Oktober 2005, 21:27

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?
droptix
User
Beiträge: 521
Registriert: Donnerstag 13. Oktober 2005, 21:27

Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

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
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
droptix
User
Beiträge: 521
Registriert: Donnerstag 13. Oktober 2005, 21:27

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...
Antworten