Python - Auf regedit zugreifen und etwas verändern?

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.
Pyanfänger
User
Beiträge: 99
Registriert: Mittwoch 28. Dezember 2011, 12:50

Naja

1. er findet den key nich, das is ja das problem =S

2. ich hab in meiner registry nix mt python :o
-
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Pyanfänger hat geschrieben:1. er findet den key nich, das is ja das problem =S
Deshalb sollst du es ja auch schrittweise mit Regedit kontrollieren.
Pyanfänger hat geschrieben:2. ich hab in meiner registry nix mt python :o
Das ist ein Beispiel. Du sollst das natürlich auf deinen Code adaptieren.
Das Leben ist wie ein Tennisball.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Der OP könnte ja auch mal einen Export aus RegEdit hier reinstellen - also nur von der besagten Stelle. Alleine daran ließen sich ja eventuelle Typos ablesen ;-)

Ich würde bei Pfadangaben auch auf RawStrings zurückgreifen:

Code: Alles auswählen

python = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, r"SOFTWARE\Python\PythonCore")
Damit spart man sich das Escapen von Pfadangaben.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Pyanfänger
User
Beiträge: 99
Registriert: Mittwoch 28. Dezember 2011, 12:50

-
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Bitte poste das doch in einem Pastebin, wie etwa gist.github.com oder dem in diesem Forum verlinkten. Rapidshare mag hier kaum jemand ;-)

Und exportiere bitte nicht Deine *gesamte* Registry, sondern nur den Zweig, der hier interessant ist. (Evtl. hast Du das schon richtig gemacht - ich habe mir die Datei nicht herunter geladen)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Und nun noch den Python-Code, mit dem Du darauf zugreifen willst und die exakte dazugehörige Fehlermeldung.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Pyanfänger
User
Beiträge: 99
Registriert: Mittwoch 28. Dezember 2011, 12:50

Code: Alles auswählen


import sys, _winreg

key = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon\\SpecialAccounts\\UserList\\Universum")
setValue(key, REG_DWORD, 1)
CloseKey(key)
Fehler :

Code: Alles auswählen

Traceback (most recent call last):
  File "C:\Users\-----\Desktop\test.py", line 3, in <module>
    key = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon\\SpecialAccounts\\UserList\\Universum")
WindowsError: [Error 2] The system cannot find the file specified
als odne pfad habe ich schon zig mal geändert - daran sollte es nicht liegen =S
Zuletzt geändert von Hyperion am Sonntag 22. Juli 2012, 15:11, insgesamt 1-mal geändert.
Grund: Code in Python-Code Tags gesetzt.
-
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Ich hoffe Dir ist klar, dass die beiden letzten Zeilen im Code nicht klappen werden, sofern der Fehler davor gelöst worden ist?

Hast Du denn mal einen anderen Key auslesen können? Hast Du es mal simpel in einer Python-Shell probiert, wie S4rl es Dir so schön demonstriert hatte?
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Pyanfänger
User
Beiträge: 99
Registriert: Mittwoch 28. Dezember 2011, 12:50

Ja mir is klar dass die letzten zeilen nciht funktionieren solang die ersten 2nicht funktionnieren ;)

Und ja in der shell habe ic hes auch shon probiert... Gleiches resultat wie s4rl, außer dass wenn ich es mit meinem pfad probiere es eben die datei nicht finden konnte.

PS: das komische ist dass ich in regedit nich den pfad von s4rl sehe... aber funktionnieren tut er dennoch
-
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Hast Du es denn schon mal Schritt für Schritt probiert? Ab welcher Stelle im Schlüsselpfad geht es denn nicht mehr?
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Pyanfänger hat geschrieben:Ja mir is klar dass die letzten zeilen nciht funktionieren solang die ersten 2nicht funktionnieren ;)
Na selbst wenn die ersten funktionieren, tun die anderen nicht weil völlig falsch.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Pyanfänger
User
Beiträge: 99
Registriert: Mittwoch 28. Dezember 2011, 12:50

@Hyperion

Ab SpecialAccounts. Also es geht bis WinLogon..(SpecialAccounts is das was ich selber angelegt habe.)

@Leonidas oh... habs grad gemerrkt :D :D
-
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

Wenn es bis Winlogon geht dann machst du:

Code: Alles auswählen

import _winreg
winlogon = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon")
try:
    i = 0
    while True:
        print repr(_winreg.EnumKey(winlogon, i))
        i += 1
except WindowsError:
    pass
Was kommt dabei raus?

In der regedit scheint als Name alles erlaubt zusein, war mir vorher auch nicht klar. Es ist sogar erlaubt einen Key mit einem Leerzeichen zu beginnen oder zu beenden.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

@Sr4l: Ich finde das händische Hochzählen des Zählers irgendwie ganz schön anstrengend:

Code: Alles auswählen

for i in itertools.count():
    print ...
Und noch so als Randbemerkung: "python funny cats" hat es tatsächlich schon auf den dritten Rang gebracht. Interssant ist, dass ein anderer Thread verlinkt ist.
Das Leben ist wie ein Tennisball.
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

EyDu hat geschrieben:@Sr4l: Ich finde das händische Hochzählen des Zählers irgendwie ganz schön anstrengend:

Code: Alles auswählen

for i in itertools.count():
    print ...
Danke, ich habe das mal zum Anlass genommen mir functools und itertools nochmal anzuschauen, zwei Bibliotheken die ich viel zu selten einsetze.
Pyanfänger
User
Beiträge: 99
Registriert: Mittwoch 28. Dezember 2011, 12:50

Thx, werde es ausprobieren :)


EDIT://

Code: Alles auswählen

'GPExtensions'
-
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

Verwirrend.

Im Endeffekt sagt die Ausgabe das dein Key Special Accounts nicht existiert. Da kann ich dir nicht helfen warum es ein Differenz zwischen der Ausgabe des Scripts und von regedit gibt.

Probier vll nochmal folgendes nur um alles zu sehen:

Code: Alles auswählen

import itertools
import _winreg
winlogon = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon")

print "Keys:"
try:
    for i in itertools.count():
        print repr(_winreg.EnumKey(winlogon, i))
except WindowsError:
    pass

print
print "Values:"
try:
    for i in itertools.count():
        print _winreg.EnumValue(winlogon, i)[0]
except WindowsError:
    pass
Beispiel Ausgabe Windows 7 aktuelles Patchlevel
Windows 7 hat geschrieben:Keys:
'GPExtensions'
'AutoLogonChecked'

Values:
ReportBootOk
Shell
PreCreateKnownFolders
Userinit
VMApplet
AutoRestartShell
Background
CachedLogonsCount
DebugServerCommand
ForceUnlockLogon
LegalNoticeCaption
LegalNoticeText
PasswordExpiryWarning
PowerdownAfterShutdown
ShutdownWithoutLogon
WinStationsDisabled
DisableCAD
scremoveoption
ShutdownFlags
AutoAdminLogon
DefaultUserName
DefaultDomainName
Pyanfänger
User
Beiträge: 99
Registriert: Mittwoch 28. Dezember 2011, 12:50

Thx :D !

Jetzt zeigt er dass an:

Code: Alles auswählen

Keys:
'GPExtensions'

Values:
ReportBootOk
Shell
PreCreateKnownFolders
DefaultDomainName
DefaultUserName
Userinit
VMApplet
-
Antworten