diff options
Diffstat (limited to 'wineconfig/winewrite.py')
-rw-r--r-- | wineconfig/winewrite.py | 489 |
1 files changed, 0 insertions, 489 deletions
diff --git a/wineconfig/winewrite.py b/wineconfig/winewrite.py deleted file mode 100644 index 39f1ce3..0000000 --- a/wineconfig/winewrite.py +++ /dev/null @@ -1,489 +0,0 @@ -#!/usr/bin/python -# -*- coding: UTF-8 -*- -########################################################################### -# winewrite.py - description # -# ------------------------------ # -# begin : Fri Mar 26 2004 # -# copyright : (C) 2006 by Yuriy Kozlov # -# email : [email protected] # -# # -########################################################################### -# # -# This program is free software; you can redistribute it and/or modify # -# it under the terms of the GNU General Public License as published by # -# the Free Software Foundation; either version 2 of the License, or # -# (at your option) any later version. # -# # -########################################################################### - -import os -import wineread -import random - -""" Provides functions for changings settings in wine """ - -def SetDriveMappings(drives): - """ Sets wine's drive settings """ - driveletters = os.listdir(wineread.winepath + "/dosdevices") - set(driveletters) - - for drive in drives[:26]: - letter = drive[1].lower() - defineDrive = False - if letter in driveletters: # The drive exists - if drive[2]: # The drive is in use - # Compare for changes - changed = False - # Check if the mapping changed - if drive[2] != os.readlink(wineread.winepath + "/dosdevices/" + letter): - changed = True - - # If it's changed, it will be recreated - if changed: - os.unlink(wineread.winepath + "/dosdevices/" + letter) - defineDrive = True - else: - # Remove the drive - os.unlink(wineread.winepath + "/dosdevices/" + letter) - else: # The drive doesn't exist - if drive[2]: # The drive is in use - # Create it - defineDrive = True - else: - # Do nothing - continue - - if defineDrive: - os.symlink(drive[2], wineread.winepath + "/dosdevices/" + letter) - - SetDriveTypes(drives[:26]) - SetShellLinks(drives[26:]) - -def SetShellLinks(shelllinks): - existingshelllinks = os.listdir(wineread.winepath + "/dosdevices/c:/users/" + os.environ['USER']) - set(existingshelllinks) - shellregistry = wineread.GetShellRegistry() - - for link in shelllinks: - createLink = False - if link[1] in existingshelllinks: # The link exists - linkpath = wineread.winepath + "/dosdevices/c:/users/" + os.environ['USER'] + "/" + link[1] - if link[2]: # The folder is mapped - # Compare for changes - changed = False - # Check if the mapping changed - if os.path.islink(linkpath) and link[2] != os.readlink(linkpath): - changed = True - elif not os.path.islink(linkpath) and link[2] != linkpath: - changed = True - elif link[5] != shellregistry.get(link[1], wineread.defaultwinfolderspath + "\\" + link[1]): - changed = True - - # If it's changed, it will be recreated - if changed: - if os.path.islink(linkpath): - os.unlink(linkpath) - else: - os.rename(linkpath,linkpath + "-backup" + str(random.randint(1,1000000))) - createLink = True - else: - # Remove the link - os.unlink(linkpath) - else: # The link doesn't exist - if link[2]: # The folder is mapped - # Create it - createLink = True - else: - # Do nothing - continue - - if createLink: - os.symlink(link[2], wineread.winepath + "/dosdevices/c:/users/" + os.environ['USER'] + "/" + link[1]) - if link[1] in shellregistry: - SetShellRegistry(link) - - -def SetShellRegistry(link): - shellfile=open('.registryshellw.reg','w') - shellfile.write("REGEDIT4\n\n[HKEY_USERS\\.Default\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders]\n") - - link[5] = link[5].replace("\\","\\\\") - shellfile.write('"' + link[1] + '"="' + link[5] + '"\n') - - shellfile.write("\n[HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders]\n") - - link[5] = link[5].replace("\\","\\\\") - shellfile.write('"' + link[1] + '"="' + link[5] + '"\n') - - shellfile.write("\n[HKEY_USERS\\.Default\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders]\n") - - shellfile.write('"' + link[1] + '"="' + "%USERPROFILE%\\\\" + link[1] + '"') - - shellfile.write("\n[HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders]\n") - - shellfile.write('"' + link[1] + '"="' + "%USERPROFILE%\\\\" + link[1] + '"') - shellfile.close() - - os.system("wine regedit .registryshellw.reg") - os.remove(".registryshellw.reg") - -def SetKeyValues(key,settings): - """ Sets all the values in key to those from the dictionary settings """ - file=open('.registrykey.reg','w') - file.write("REGEDIT4\n\n[" + key + "]\n") - - for setting in settings: - # Casting to a python string is necessary for older versions of PyTQt - if str(settings[setting])[:4] == 'hex:': - file.write('"'+str(setting)+'"='+str(settings[setting])+'\n') - else: - file.write('"'+str(setting)+'"="'+str(settings[setting])+'"\n') - - file.close() - os.system("wine regedit .registrykey.reg") - os.remove(".registrykey.reg") - -def SetValue(key,value,data): - """ Sets the value in key to data """ - file=open('.registryvalue.reg','w') - file.write("REGEDIT4\n\n[" + key + "]\n") - file.write('"' + value + '"="' + data + '"') - file.close() - - os.system("wine regedit .registryvalue.reg") - os.remove(".registryvalue.reg") - -def SetDriveTypes(drives): - """ Sets the type for the drives in the registry """ - drivesfile=open('.registrydrives.reg','w') - drivesfile.write("REGEDIT4\n\n[HKEY_LOCAL_MACHINE\\Software\\Wine\\Drives]\n") - - for drive in drives: - mapping = drive[2] - if mapping: - drivesfile.write('"' + drive[1] + '"="' + drive[3] + '"\n') - - drivesfile.close() - - os.system("wine regedit .registrydrives.reg") - os.remove(".registrydrives.reg") - -def SetAudioDriver(driver): - """ Sets the audio driver in the registry """ - SetValue("HKEY_CURRENT_USER\\Software\\Wine\\Drivers","Audio",driver) - -def SetDSoundSettings(settings, app = None): - """ Sets the settings for Direct Sound in the registry """ - if not app: - SetKeyValues("HKEY_CURRENT_USER\\Software\\Wine\\DirectSound", settings) - else: - SetKeyValues("HKEY_CURRENT_USER\\Software\\Wine\\AppDefaults\\" +\ - app + "\\DirectSound", settings) - -def SetWindowSettings(settings, app = None): - """ Sets the window settings in the registry """ - windowsfile=open('.registrywindows.reg','w') - if not app: - windowsfile.write("REGEDIT4\n\n[HKEY_CURRENT_USER\\Software\\Wine\\X11 Driver]\n") - else: - windowsfile.write("REGEDIT4\n\n[HKEY_CURRENT_USER\\Software\\Wine\\AppDefaults\\" +\ - app + "\\X11 Driver]\n") - - # There is a bug in wine that doesn't allow removing of registry entries from - # a reg file, so unchecking emulate desktop can't be implemented this way yet. - - for setting in settings: - if settings[setting]: - windowsfile.write('"'+str(setting)+'"="'+str(settings[setting])+'"\n') - else: - # winecfg removes the value when the emulate desktop checkbox is unchecked - windowsfile.write('"'+str(setting)+'"=-\n') - - windowsfile.close() - os.system("wine regedit .registrywindows.reg") - os.remove(".registrywindows.reg") - -def SetD3DSettings(settings, app = None): - """ Sets the settings for Direct3D in the registry """ - if not app: - SetKeyValues("HKEY_CURRENT_USER\\Software\\Wine\\Direct3D", settings) - else: - SetKeyValues("HKEY_CURRENT_USER\\Software\\Wine\\AppDefaults\\" +\ - app + "\\Direct3D", settings) - -def SetDesktopSettings(settings): - """ Sets the control panel \ Desktop settings in the registry """ - SetKeyValues("HKEY_CURRENT_USER\\Control Panel\\Desktop", settings) - -def SetWinVersion(version, app = None): - """ - Sets the windows version in the registry - Sample format for version: - ( "winxp", "Windows XP", 5, 1, 0xA28, "VER_PLATFORM_WIN32_NT", "Service Pack 2", 2, 0, "WinNT") - """ - winverfile=open('.registrywinver.reg','w') - if not app: - winverfile.write("REGEDIT4\n\n[HKEY_CURRENT_USER\\Software\\Wine]\n") - winverfile.write('"Version"="' + version[0] + '"\n') - - Key9x = "\n[HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion]\n" - KeyNT = "\n[HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows NT\\CurrentVersion]\n" - KeyProdNT = "\n[HKEY_LOCAL_MACHINE\\System\\CurrentControlSet\\Control\\ProductOptions]\n" - KeyWindNT = "\n[HKEY_LOCAL_MACHINE\\System\\CurrentControlSet\\Control\\Windows\n" - KeyEnvNT = "\n[HKEY_LOCAL_MACHINE\\System\\CurrentControlSet\\Control\\Session Manager\\Environment]\n" - - versionnumber9x = str(version[2]) + '.' + str(version[3]) + '.' + str(version[4]) - versionnumberNT = str(version[2]) + '.' + str(version[3]) - - if version[5] == "VER_PLATFORM_WIN32_WINDOWS": - winverfile.write(Key9x + '"VersionNumber"="' + versionnumber9x + '"\n') - winverfile.write(Key9x + '"SubVersionNumber"="' + str(version[6]) + '"\n') - - winverfile.write(KeyNT + '"CSDVersion"=-\n') - winverfile.write(KeyNT + '"CurrentVersion"=-\n') - winverfile.write(KeyNT + '"CurrentBuildNumber"=-\n') - winverfile.write(KeyProdNT + '"ProductType"=-\n') - winverfile.write(KeyWindNT + '"CSDVersion"=-\n') - winverfile.write(KeyEnvNT + '"OS"=-\n') - elif version[5] == "VER_PLATFORM_WIN32_NT": - winverfile.write(KeyNT + '"CurrentVersion"="' + versionnumberNT + '"\n') - winverfile.write(KeyNT + '"CSDVersion"="' + str(version[6]) + '"\n') - winverfile.write(KeyNT + '"CurrentBuildNumber"="' + str(version[4]) + '"\n') - winverfile.write(KeyProdNT + '"ProductType"="' + str(version[9]) + '"\n') - winverfile.write(KeyWindNT + '"CSDVersion"=dword:00000' + str(version[7]) + '00\n') - winverfile.write(KeyEnvNT + '"OS"="Windows_NT"\n') - - winverfile.write(Key9x + '"VersionNumber"=-\n') - winverfile.write(Key9x + '"SubVersionNumber"=-\n') - elif version[5] == "VER_PLATFORM_WIN32s": - winverfile.write(Key9x + '"VersionNumber"=-\n') - winverfile.write(Key9x + '"SubVersionNumber"=-\n') - winverfile.write(KeyNT + '"CSDVersion"=-\n') - winverfile.write(KeyNT + '"CurrentVersion"=-\n') - winverfile.write(KeyNT + '"CurrentBuildNumber"=-\n') - winverfile.write(KeyProdNT + '"ProductType"=-\n') - winverfile.write(KeyWindNT + '"CSDVersion"=-\n') - winverfile.write(KeyEnvNT + '"OS"=-\n') - else: - winverfile.write("REGEDIT4\n\n[HKEY_CURRENT_USER\\Software\\Wine\\AppDefaults\\" +\ - app + "]\n") - if version[0] == "global": - winverfile.write('"Version"=-\n') - else: - winverfile.write('"Version"="' + version[0] + '"\n') - - winverfile.close() - - os.system("wine regedit .registrywinver.reg") - os.remove(".registrywinver.reg") - -def SetApps(apps): - """ Adds and removes keys for app specific settings for apps """ - oldapps = wineread.GetApps() - newapps = [] - - # Add new app keys - for app in apps: - if app not in oldapps: - newapps.append(app) - AddApps(newapps) - - # Remove removed app keys - for app in oldapps: - if app not in apps: - RemoveApp(app) - -def RemoveApp(app): - """ Removes the key for settings for app """ - os.system("wine regedit /D HKEY_USERS\\\\S-1-5-4\\\\Software\\\\Wine\\\\AppDefaults\\\\" +\ - app) - -def AddApps(apps): - """ Adds a key for app """ - appsfile=open('.registryapps.reg','w') - appsfile.write("REGEDIT4\n\n") - - for app in apps: - appsfile.write('[HKEY_CURRENT_USER\\Software\\Wine\\AppDefaults\\' +\ - app + ']\n') - - appsfile.close() - os.system("wine regedit .registryapps.reg") - os.remove(".registryapps.reg") - -def SetDllOverrides(overrides, app = None): - """ Sets the dll override settings in the registry """ - dllfile=open('.registrydll.reg','w') - if not app: - dllfile.write("REGEDIT4\n\n[HKEY_CURRENT_USER\\Software\\Wine\\DllOverrides]\n") - else: - dllfile.write("REGEDIT4\n\n[HKEY_CURRENT_USER\\Software\\Wine\\AppDefaults\\" +\ - app + "\\DllOverrides]\n") - - origoverrides = wineread.GetDllOverrides(app) - - for dll in list(overrides.keys()): - dllfile.write('"'+str(dll)+'"="'+str(overrides[dll])+'"\n') - - for dll in list(origoverrides.keys()): - if dll not in overrides: - dllfile.write('"'+str(dll)+'"=-\n') - - dllfile.close() - os.system("wine regedit .registrydll.reg") - os.remove(".registrydll.reg") - -def SetDefaultBrowser(browser): - """ - Sets the default browser to browser - Doesn't set windows browsers, leaves it for the program to do. - """ - file=open('.registrybrowser.reg','w') - file.write("REGEDIT4\n") - - if browser[1] == ':': - for format in wineread.default_browser_formats: - file.write("\n[HKEY_LOCAL_MACHINE\\Software\\Classes\\" +\ - format + "\\shell\\open\\command]\n") - file.write('@="' + browser + '"\n') - file.close() - - os.system("wine regedit .registrybrowser.reg") - os.remove(".registrybrowser.reg") - else: # winebrowser - for format in wineread.default_browser_formats: - file.write("\n[HKEY_LOCAL_MACHINE\\Software\\Classes\\" +\ - format + "\\shell\\open\\command]\n") - file.write('@="winebrowser"\n') - file.close() - - os.system("wine regedit .registrybrowser.reg") - os.remove(".registrybrowser.reg") - - SetFirstBrowser(browser) - -def SetDefaultMailer(mailer): - """ - Sets the default mailer to mailer - Doesn't set windows mailers, leaves it for the program to do. - """ - file=open('.registrymailer.reg','w') - file.write("REGEDIT4\n") - - if mailer[1] == ':': - for format in wineread.default_mailer_formats: - file.write("\n[HKEY_LOCAL_MACHINE\\Software\\Classes\\" +\ - format + "\\shell\\open\\command]\n") - file.write('@="' + mailer + '"\n') - file.close() - - os.system("wine regedit .registrymailer.reg") - os.remove(".registrymailer.reg") - else: # winebrowser - for format in wineread.default_mailer_formats: - file.write("\n[HKEY_LOCAL_MACHINE\\Software\\Classes\\" +\ - format + "\\shell\\open\\command]\n") - file.write('@="winebrowser %1"\n') - file.close() - - os.system("wine regedit .registrymailer.reg") - os.remove(".registrymailer.reg") - - SetFirstMailer(mailer) - -def SetFirstBrowser(browser): - """ Sets the first in the list of browsers for winebrowser to use to browser """ - originalbrowserlist = wineread.GetNativeBrowserList() - - if browser in originalbrowserlist: - originalbrowserlist.remove(browser) - browserlist = [browser] + originalbrowserlist - - browserlist = str(browserlist).strip('[]') - browserlist = browserlist.replace("'","") - browserlist = browserlist.replace(", ",",") - - SetValue("HKEY_CURRENT_USER\\Software\\Wine\\WineBrowser","Browsers",browserlist) - -def SetFirstMailer(mailer): - """ Sets the first in the list of mailers for winebrowser to use to mailer """ - originalmailerlist = wineread.GetNativeMailerList() - - if mailer in originalmailerlist: - originalmailerlist.remove(mailer) - mailerlist = [mailer] + originalmailerlist - - mailerlist = str(mailerlist).strip('[]') - mailerlist = mailerlist.replace("'","") - mailerlist = mailerlist.replace(", ",",") - - SetValue("HKEY_CURRENT_USER\\Software\\Wine\\WineBrowser","Mailers",mailerlist) - -def CreateWineDrive(path = None): - """ - Creates a fake windows installation in path - """ - if not path: - path = wineread.default_winepath - - os.system("WINEPREFIX=" + path + " winepath --wait") - -# ----- Theming ----- - -def SetCurrentTheme(theme): - """ - Sets the current theme - theme = (theme,color,size), None if none is set - """ - if not theme: - theme = ("", "", "") - - themesettings = {"ColorName":theme[1], - "SizeName":theme[2], - "ThemeActive":"1"} - - if not theme[0]: - themesettings["DllName"] = "" - themesettings["ThemeActive"] = "0" - else: - themesettings["DllName"] = "C:\\\\windows\\\\Resources\\\\Themes\\\\" +\ - theme[0] + "\\\\" + theme[0] +".msstyles" - - themefile=open('.registrytheme.reg','w') - themefile.write("REGEDIT4\n\n[HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\ThemeManager]\n") - for setting in themesettings: - if themesettings[setting]: - themefile.write('"'+str(setting)+'"="'+str(themesettings[setting])+'"\n') - else: - themefile.write('"'+str(setting)+'"=-\n') - - themefile.close() - os.system("wine regedit .registrytheme.reg") - os.remove(".registrytheme.reg") - -def SetColorSettings(colors): - """ Takes a dictionary of color settings and sets them in the registry """ - SetKeyValues("HKEY_CURRENT_USER\\Control Panel\\Colors",colors) - SetKeyValues("HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\ThemeManager\\Control Panel\\Colors",colors) - -def SetWindowMetrics(metrics): - """ - Takes a dictionary of WindowMetrics settings and sets them in the registry - """ - SetKeyValues("HKEY_CURRENT_USER\\Control Panel\\Desktop\\WindowMetrics",metrics) - -ports_translation = {"lp":"lpt","ttyS":"com"} - -def CreatePorts(ports = None): - """ - Creates links to ports in dosdevices - """ - if not ports: - # Find ports in /dev - ports = ["lp0"] - - for port in ports: - winport = ports_translation[port.rstrip("012345678")] +\ - str(int(port.lstrip("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")) + 1) - os.symlink("/dev/" + port, wineread.winepath + "/dosdevices/" + winport) - |