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

Hallo, da bin ich wieder :D

Wollte mal Fragen ob es möglich ist dass Python auf regedit zugreift und einen gegebenen Pfad abläuft um dann bei einem bestimmtem Key einen Wert zu verändern...geht das?


MfG

PS: hab schon gegoogelt!
-
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Pyanfänger hat geschrieben:PS: hab schon gegoogelt!
Prima! Da der erste Treffer bei der Suche nach "python registry" bereits das richtige Ergebnis liefert, hat sich das Problem ja schon von alleine gelöst.
Das Leben ist wie ein Tennisball.
Pyanfänger
User
Beiträge: 99
Registriert: Mittwoch 28. Dezember 2011, 12:50

Oh tschuldigung :oops: hatte aber nach was anderem gegoogelt ;D
-
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Pyanfänger hat geschrieben:Oh tschuldigung :oops: hatte aber nach was anderem gegoogelt ;D
Kein Wunder. Du wirfst nämlich Begriffe durcheinander. Zugreifen möchtest du auf die Windows-Registry, aber nicht auf regedit. regedit ist nur eins der Programme mit denen man Einträge in der Registry verändern kann.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Zumindest bei mir macht es kaum ein unterschied ob ich, in Kombination mit "python", nach "registry" oder "regedit" suche. Suche ich jedoch noch "funny cats", bekomme ich, zu meiner eigenen Überraschung, keinen einzigen Treffer, welcher bei diesem Problem auch nur ein wenig helfen würde.
Das Leben ist wie ein Tennisball.
BlackJack

@EyDu: Warte ein bisschen und versuch es dann noch einmal — dann findest Du vielleicht dieses Thema hier und damit einen Hinweis auf bessere Suchworte. ;-)
Pyanfänger
User
Beiträge: 99
Registriert: Mittwoch 28. Dezember 2011, 12:50

ok, ich weiß .. noch eine von meinen dummen fragen :

Code: Alles auswählen

key = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon\\SpecialAccounts\\UserList\\")
setValue(key, REG_DWORD, 1)
CloseKey(hkey)
er findet den pfad ncht da ich ja auch nichts "genaues" angegeben hab, aber nach verschiedenen tutorien ha bich iwie gedacht dass es so geht óO

wenn ich es genauer mache und das dword danach angebe will er es ja auch nicht anehmen :(

Was kann ich tun D: ?
-
webspider
User
Beiträge: 485
Registriert: Sonntag 19. Juni 2011, 13:41

Wie wäre es wenn du dir die Fehlermeldungen genauer durchliest und in kompletter Form postest anstatt sie als "will nicht annehmen" zu betiteln?
Pyanfänger
User
Beiträge: 99
Registriert: Mittwoch 28. Dezember 2011, 12:50

Code: Alles auswählen

Traceback (most recent call last):
  File "C:\Users\akempf\Desktop\test.py", line 3, in <module>
    key = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon\\SpecialAccounts\\UserList\\")
WindowsError: [Error 2] The system cannot find the file specified

Weil ich ja auch keine datei genau angeben hab aber wenn ich die "datei" also das dword wird ja im code nachher angegeben..
-
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

Existiert in deiner regestry den schon "SpecialAccounts", den Standard ist der Eintrag nicht. Du musst ihn erst erstellen.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

BlackJack hat geschrieben:@EyDu: Warte ein bisschen und versuch es dann noch einmal — dann findest Du vielleicht dieses Thema hier und damit einen Hinweis auf bessere Suchworte. ;-)
Na geht doch. Die Suche bei Google nach "python funny cats" verlinkt schon auf der vierten Seite auf diesen Thread. Wenn das Thema offensichtlich gerade so heiß ist, sollte ich vielleicht eine Umfrage zur Erstellung eines neuen Unterforums für lusitge Katzenbilder initiieren. Quasi als Gegenspieler zu der Rubrik "Äußerst schwierige Fragen".
Das Leben ist wie ein Tennisball.
Pyanfänger
User
Beiträge: 99
Registriert: Mittwoch 28. Dezember 2011, 12:50

Nope, dieses Verzeichnis existiert bei mir schon. Ich will nicht dass das Programm irgendwelche Dateien ertellt sonder neinfach bei einem bestimmten Key die vlaue von 1 auf 0 setzt und umgkekehrt ;(
-
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

Okay dann vermute ich mal das am Ende noch der Username fehlt, den das ist der Eintrag den du ja eigentlich ändern willst.

Code: Alles auswählen

SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon\\SpecialAccounts\\UserList\\USERNAME
PS: in deinem code machst du einen anderne Key wieder zu (key != hkey)
Pyanfänger
User
Beiträge: 99
Registriert: Mittwoch 28. Dezember 2011, 12:50

Nope, habs schon mit benutzername da probiert aber es wirft die gleiche meldung aus.
-
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

Also eigentlich ist es ganz einfach. Schau dir einfach mal mein Code an und denk darüber nach, die gleichen Keys gibt es auch in deiner registry. Mach parallel die regedit auf und schaus dir an.

Code: Alles auswählen

Python 2.7.3 (default, Apr 10 2012, 23:31:26) [MSC v.1500 32 bit (Intel)]

In [1]: import _winreg

In [2]: python = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, "SOFTWARE\\Python\\PythonCore")

In [3]: _winreg.EnumKey(python, 0)
Out[3]: '2.7'

In [4]: _winreg.EnumKey(python, 1)
Out[4]: '3.2'

In [5]: python_inst_path = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, "SOFTWARE\\Python\\PythonCore\\2.7\\InstallPath")

In [6]: _winreg.EnumValue(python_inst_path, 0)
Out[6]: ('', u'C:\\Dev\\python27\\', 1)

In [7]: _winreg.EnumKey(python_inst_path, 0)
Out[7]: 'InstallGroup'
Und hier nochmal ein bisschen Code bei dem es knallt:

Code: Alles auswählen

In [5]: python = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, "SOFTWARE\Python\PythonCore\2.7\InstallPath")
---------------------------------------------------------------------------
WindowsError                              Traceback (most recent call last)
<ipython-input-5-ab8f17a1ec18> in <module>()
----> 1 python = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, "SOFTWARE\Python\PythonCore\2.7\InstallPath")

WindowsError: [Error 2] Das System kann die angegebene Datei nicht finden
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
Antworten