Winreg
Jump to navigation
Jump to search
Overview
Also see _winreg.py
See:
- http://tgolden.sc.sabren.com/python/wmi.html for WMI interface...
- http://tgolden.sc.sabren.com/python/win32_how_do_i.html
- http://tgolden.sc.sabren.com/python/win32_how_do_i/check-a-users-credentials.html
- http://www.thescripts.com/forum/thread598226-_winreg.html
I use _winreg to find out the path of the exe:
Code: ( text )
try:
### Read registry for InstaCal path
instacalKey = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE,
"SOFTWARE\Universal Library")
self.pmdPath = str(_winreg.QueryValueEx(instacalKey, 'RootDirs')[0])
instacalKey.Close()
except WindowsError:
self.InstaCalBtn.Disable()
self.pmdPath = ""
then:
Code: ( text )
def OnInstaCalButton(self, event):
os.spawnl(os.P_DETACH, self.pmdPath + "inscal32.exe")
Need more info on the time between numbers, but you might want to check out the time module.
http://www.thescripts.com/forum/thread575308-_winreg.html
For those of you who have never used the *listofargs and **dictofargs syntax, here is a look at the latter. By using **kwargs, a dictionary of any size is sent into the fuction as dict(a=1, b=2). Inside the function, it's just a dictionary named kwargs (or whaterver, but this is conventional). The truly amazing thing to me is that I am able to write to the Windows registry with so little interface!
Code: ( text )
"""Encapuslate a Default Values Object and Config File"""
from inspect import getmembers
import wx
class DefaultValueHolder(object):
"""Intended for use with wxConfig (or maybe _winreg) to set up and/or get
registry key names and values. Name attrs as default*. "default"
will be stripped of when reading and writing to the config file"""
## defaultTestStr = "this is a test"
## defaultTestInt = 1
def __init__(self, appName, grpName):
"""The name of the config file that will be created"""
self.appName = appName # if the key doesn't exit, it will be created
self.grpName = grpName # same goes for groups.
self.config = wx.Config(appName) # Open the file (HKCU in windows registry)
def GetVariables(self):
return [{"name":var[0][7:], "value":var[1], "type":type(var[1])}
for var in getmembers(self) if var[0].startswith('default')]
def SetVariables(self, **kwargs):
for name, value in kwargs.items():
setattr(self, "default" + name, value)
def InitFromConfig(self):
self.config.SetPath(self.grpName)
for var in self.GetVariables():
if var['type'] == str:
self.config.Write(var['name'], var['value'])
elif var['type'] == int:
self.config.WriteInt(var['name'], var['value'])
elif var['type'] == float:
self.config.WriteFloat(var['name'], var['value'])
if __name__ == "__main__":
test = DefaultValueHolder("MyAppName", "Database")
test.SetVariables(UserName = "joe", Password = "", ServerName = "MyServer")
#### this also works:
## test.defaultUserName = "joe"
test.InitFromConfig()
Registry Lookup
#!/usr/bin/echo THIS_IS_ONLY_FOR_WINDOWS_PYTHON
from _winreg import *
from os import environ
class User:
def __init__(self,masterkey,sid):
self.sid = sid
userkey = OpenKey(masterkey,sid)
self.data = {}
for valueno in range(QueryInfoKey(userkey)[1]):
(name,data,type) = EnumValue(userkey,valueno)
self.data[name] = data
userkey.Close()
profilePath = self.data['ProfileImagePath'].split("%")
for i in range(1,len(profilePath),2):
profilePath[i] = environ[profilePath[i]]
self.profilePath = "".join(profilePath)
users = []
masterkey = OpenKey(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\ProfileList")
for userno in range(QueryInfoKey(masterkey)[0]):
users.append(User(masterkey,EnumKey(masterkey,userno)))
masterkey.Close()
profilePath = environ["USERPROFILE"]
userName = environ["USERNAME"]
userDomain = environ["USERDOMAIN"]
for user in users:
if user.profilePath == profilePath:
# Not clear what to use for group ID. Is 513 universally OK?
# This assumes you want your home directory in /home/userName
print ":".join([userName, \
"unused_by_nt/2000/xp", \
user.sid.split("-")[-1],
"513", \
"U-" + userDomain + "\\" + userName + "," + user.sid, \
"/home/" + userName, \
"/bin/bash"])