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

Sonntag 22. Juli 2012, 11:00

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: 4872
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Sonntag 22. Juli 2012, 11:17

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: 7477
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Sonntag 22. Juli 2012, 11:50

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

Sonntag 22. Juli 2012, 14:11

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

Sonntag 22. Juli 2012, 14:14

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: 7477
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Sonntag 22. Juli 2012, 14:28

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

Sonntag 22. Juli 2012, 14:59

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: 7477
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Sonntag 22. Juli 2012, 15:24

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

Sonntag 22. Juli 2012, 15:41

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: 7477
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Sonntag 22. Juli 2012, 16:59

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
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Sonntag 22. Juli 2012, 17:05

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

Sonntag 22. Juli 2012, 17:31

@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:

Montag 23. Juli 2012, 12:20

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: 4872
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Montag 23. Juli 2012, 13:11

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