Toon posts:

[PYTHON] schijven naar register

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik probeer om met python een registersleutel uit te lezen en vervolgens de waarde aan te passen.
Na een poos zoeken op het internet kwam ik bij eeen stuk code dat erg goed aansluit op mijn wensen. Zie code hieronder. (past de grote van de cache van de temp internet files aan...)

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
from _winreg import *
import sys

#get the current value of the PendingFileRenameOperations key
def getCurrentValue():
    aReg = ConnectRegistry(
        None,
        HKEY_CURRENT_USER)
    aKey = OpenKey(aReg, r"Software\Microsoft\Windows\CurrentVersion\Internet Settings\5.0\Cache\Content")
    value = QueryValueEx(aKey, "CacheLimit")
    CloseKey(aKey)
    return value
 
#set the value of a test REG_MULTI_SZ key (this key already exists")
def setNewValue(value):
    aReg = ConnectRegistry(
        None,
        HKEY_CURRENT_USER)
    aKey = OpenKey(aReg, r"Software\Microsoft\Windows\CurrentVersion\Internet Settings\5.0\Cache\Content", 0, KEY_WRITE)
    SetValueEx(
        aKey,
        "CacheLimit",
        0,
        REG_MULTI_SZ,
        value
    )
    CloseKey(aKey)

# print de huidige waarde
tuple = getCurrentValue()
print tuple

#Zet de nieuwe waarde.
newkey = (4000, 4)
setNewValue(newkey)


Alleen, zoals ook aangegeven op die pagina (http://mail.python.org/pi...2004-February/206237.html), komt python met een fout terug. En deze fout krijg ik niet opgelos:
code:
1
2
3
4
5
6
Traceback (most recent call last):
  File "C:\prive\DE KLUSHOEK\write_reg.py", line 35, in <module>
    setNewValue(newkey)
  File "C:\prive\DE KLUSHOEK\write_reg.py", line 25, in setNewValue
    value
ValueError: Could not convert the data to the specified type.

Ik heb wat pogingen gedaan die te slecht waren om hier te vermelden |:(
Of terwijl... Ik heb echt geen idee meer

[ Voor 22% gewijzigd door Verwijderd op 05-10-2006 10:18 ]


  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 10-02 17:10

Gerco

Professional Newbie

Misschien handig als je er even bijzet welke fout er dan komt en wat je al geprobeerd hebt om daar iets aan te doen? We hebben hier immers niet allemaal een glazen bol :)

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


Verwijderd

Topicstarter
Gerco schreef op donderdag 05 oktober 2006 @ 09:53:
Misschien handig als je er even bijzet welke fout er dan komt en wat je al geprobeerd hebt om daar iets aan te doen? We hebben hier immers niet allemaal een glazen bol :)
Je hebt gelijk. Ik heb de post aangepast.

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 10-02 17:10

Gerco

Professional Newbie

Zo te zien probeer je een tuple (4000, 4) in het register te saven. Het register heeft geen idee wat een tuple is en die zijn ook niet zinvol naar een string te converteren. Wat je nu probeert te doen is onzin.

Welke waarde wil je in die registerkey hebben? Ken die dan toe aan "newkey" ipv (4000, 4) wat je nu gebruikt.

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


Verwijderd

Topicstarter
Gerco schreef op donderdag 05 oktober 2006 @ 10:27:
Zo te zien probeer je een tuple (4000, 4) in het register te saven. Het register heeft geen idee wat een tuple is en die zijn ook niet zinvol naar een string te converteren. Wat je nu probeert te doen is onzin.

Welke waarde wil je in die registerkey hebben? Ken die dan toe aan "newkey" ipv (4000, 4) wat je nu gebruikt.
Ik had deze tuple gebruikt omdat getCurrentValue ook een tuple terug geeft.
Jij bedoeld dat ik gewoon de decimale waarde (1 integer) moet saven?
Zowel
newkey = int(5120)
setNewValue(newkey)
Als
newkey = '5120'
setNewValue(newkey)
geven de zelfde fout terug.

  • djc
  • Registratie: December 2001
  • Laatst online: 08-09-2025

djc

Ik neem aan dat je de documentatie al had gelezen?

Het probleem is dat je bij het opslaan een verkeerd type gebruikt. De waarde die je ophaalt heeft als type REG_DWORD (oftewel 4), terwijl jij hem probeert op te slaan als REG_MULTI_SZ. Dat werkt natuurlijk niet. Ik maak me sterk dat het wel werkt als je je nieuwe waarde als int() meegeeft en als type REG_DWORD gebruikt (ik zou ook zorgen dat je getCurrentValue() alleen maar de waarde teruggeeft, en niet het type).

Rustacean


Verwijderd

Topicstarter
Manuzhai schreef op donderdag 05 oktober 2006 @ 12:48:
Ik neem aan dat je de documentatie al had gelezen?

Het probleem is dat je bij het opslaan een verkeerd type gebruikt. De waarde die je ophaalt heeft als type REG_DWORD (oftewel 4), terwijl jij hem probeert op te slaan als REG_MULTI_SZ. Dat werkt natuurlijk niet. Ik maak me sterk dat het wel werkt als je je nieuwe waarde als int() meegeeft en als type REG_DWORD gebruikt (ik zou ook zorgen dat je getCurrentValue() alleen maar de waarde teruggeeft, en niet het type).
Ja geweldig! Daar ging het dus fout. Zoals altijd blijkt er weer een logische verklaring te zijn :) .
Bedankt Manuzhai! _/-\o_
Dan volgt hier nog even voor de volledigheid de werkende code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
from _winreg import *
import sys

# functie voor het ophalen van de huidige registersleutelwaarde
def getCurrentValue():
    aReg = ConnectRegistry(
        None,
        HKEY_CURRENT_USER)
    aKey = OpenKey(aReg, r"Software\Microsoft\Windows\CurrentVersion\Internet Settings\5.0\Cache\Content")
    value = QueryValueEx(aKey, "CacheLimit")
    CloseKey(aKey)
    return value[0]
 
# functie voor het zetten van de nieuwe registersleutelwaarde
def setNewValue(value):
    aReg = ConnectRegistry(
        None,
        HKEY_CURRENT_USER)
    aKey = OpenKey(aReg, r"Software\Microsoft\Windows\CurrentVersion\Internet Settings\5.0\Cache\Content", 0, KEY_WRITE)
    SetValueEx(
        aKey,
        "CacheLimit",
        0,
        REG_DWORD,
        value
    )
    CloseKey(aKey)

# print de huidige waarde
cur_value = getCurrentValue()
print cur_value

#Zet de nieuwe waarde.
newkey = int(5120)
setNewValue(newkey)
Pagina: 1