def get_current_wallpaper(win): """ Try to get the current wallpaper image path. :param win: Windows version (Major, Minor). :type win: Tuple of Integers :returns: Wallpaper image path if it can find it. :rtype: String """ wallpaper = None wallpaper_path = '' key = None default_entry = None reg_location = None LOGGER.debug('get_current_wallpaper: ' + str(win)) if win[0] == 5: # XP == 5,1 XP64 == 5,2 reg_location = __WIN_XP_REG elif win[0] == 6: reg_location = __WIN_VISTA7_REG if win[1] == 0: # Vista default_entry = r'Microsoft\Windows\Themes\TranscodedWallpaper.jpg' elif win[1] == 1: # Windows 7 default_entry = r'Microsoft\Windows\Themes\TranscodedWallpaper.jpg' elif win[1] == 2: # Windows 8 default_entry = r'Microsoft\Windows\Themes\TranscodedWallpaper' try: # Try the defualt location if available. if default_entry and ('APPDATA' in os.environ): wallpaper_path = os.path.join(os.environ['APPDATA'], default_entry) LOGGER.debug('Accessing: ' + wallpaper_path) # Get current current_wallpaper from registry if needed. if wallpaper_path and os.path.exists(wallpaper_path): wallpaper = wallpaper_path # We might have the default wallpaper now, but let's try # replace it with the current one... if reg_location: LOGGER.debug('reg_location: ' + str(reg_location)) key = OpenKey(HKEY_CURRENT_USER, reg_location) LOGGER.debug('key: ' + str(key) + ' open!') wallpaper_path = QueryValueEx(key, 'Wallpaper')[0] LOGGER.debug('keyval: ' + str(wallpaper_path)) if wallpaper_path.count('%') > 1: index_start = wallpaper_path.find('%') index_end = wallpaper_path.find('%', index_start + 1) env = wallpaper_path[index_start + 1:index_end] end = wallpaper_path[index_end + 2:] wallpaper_path = os.path.join(os.getenv(env), end) LOGGER.debug('keyval2: ' + str(wallpaper_path)) if (wallpaper_path) and len(wallpaper_path): wallpaper = wallpaper_path except (ValueError, IOError, OSError) as excp: LOGGER.exception('get_current_wallpaper exception: {0!s}'.format(excp)) if key is not None: CloseKey(key) return wallpaper
def getEditorCommand(self): """Return the editor command""" editor = self.options.get('editor') if win32 and editor is None: from _winreg import HKEY_CLASSES_ROOT, OpenKeyEx, \ QueryValueEx, EnumKey from win32api import FindExecutable import pywintypes # Find editor application based on mime type and extension content_type = self.metadata.get('content_type') extension = self.options.get('extension') if content_type: # Search registry for the extension by MIME type try: key = 'MIME\\Database\\Content Type\\%s' % content_type key = OpenKeyEx(HKEY_CLASSES_ROOT, key) extension, nil = QueryValueEx(key, 'Extension') except EnvironmentError: pass if extension is None: url = self.metadata['url'] dot = url.rfind('.') if dot != -1 and dot > url.rfind('/'): extension = url[dot:] if extension is not None: try: key = OpenKeyEx(HKEY_CLASSES_ROOT, extension) classname, nil = QueryValueEx(key, None) except EnvironmentError: classname = None if classname is not None: try: # Look for Edit action in registry key = OpenKeyEx(HKEY_CLASSES_ROOT, classname+'\\Shell\\Edit\\Command') editor, nil = QueryValueEx(key, None) except EnvironmentError: pass if editor is None: # Enumerate the actions looking for one # starting with 'Edit' try: key = OpenKeyEx(HKEY_CLASSES_ROOT, classname+'\\Shell') index = 0 while 1: try: subkey = EnumKey(key, index) index += 1 if str(subkey).lower().startswith('edit'): subkey = OpenKeyEx(key, subkey + '\\Command') editor, nil = QueryValueEx(subkey, None) else: continue except EnvironmentError: break except EnvironmentError: pass if editor is None: try: # Look for Open action in registry key = OpenKeyEx(HKEY_CLASSES_ROOT, classname+'\\Shell\\Open\\Command') editor, nil = QueryValueEx(key, None) except EnvironmentError: pass if editor is None: try: nil, editor = FindExecutable(self.content_file, '') except pywintypes.error: pass # Don't use IE as an "editor" if editor is not None and editor.find('\\iexplore.exe') != -1: editor = None if not editor and not win32 and has_tk(): from tkSimpleDialog import askstring editor = askstring('Zope External Editor', 'Enter the command to launch the default editor') if not editor: sys.exit(0) self.config.set('general', 'editor', editor) self.config.save() if editor is not None: return editor else: fatalError('No editor was found for that object.\n' 'Specify an editor in the configuration file:\n' '(%s)' % self.config.path)
def getEditorCommand(self): """Return the editor command""" editor = self.options.get('editor') if win32 and editor is None: # Find editor application based on mime type and extension content_type = self.metadata.get('content_type') extension = self.options.get('extension') logger.debug('Have content type: %r, extension: %r', content_type, extension) if content_type: # Search registry for the extension by MIME type try: key = 'MIME\\Database\\Content Type\\%s' % content_type key = OpenKeyEx(HKEY_CLASSES_ROOT, key) extension, nil = QueryValueEx(key, 'Extension') logger.debug('Registry has extension %r for ' 'content type %r', extension, content_type) except EnvironmentError: pass if extension is None: url = self.metadata['url'] dot = url.rfind('.') if dot != -1 and dot > url.rfind('/'): extension = url[dot:] logger.debug('Extracted extension from url: %r', extension) classname = editor = None if extension is not None: try: key = OpenKeyEx(HKEY_CLASSES_ROOT, extension) classname, nil = QueryValueEx(key, None) logger.debug('ClassName for extension %r is: %r', extension, classname) except EnvironmentError: classname = None if classname is not None: try: # Look for Edit action in registry key = OpenKeyEx(HKEY_CLASSES_ROOT, classname+'\\Shell\\Edit\\Command') editor, nil = QueryValueEx(key, None) logger.debug('Edit action for %r is: %r', classname, editor) except EnvironmentError: pass if classname is not None and editor is None: logger.debug('Could not find Edit action for %r. ' 'Brute-force enumeration.', classname) # Enumerate the actions looking for one # starting with 'Edit' try: key = OpenKeyEx(HKEY_CLASSES_ROOT, classname+'\\Shell') index = 0 while True: try: subkey = EnumKey(key, index) index += 1 if str(subkey).lower().startswith('edit'): subkey = OpenKeyEx(key, subkey + '\\Command') editor, nil = QueryValueEx(subkey, None) if editor is None: continue logger.debug('Found action %r for %r. ' 'Command will be: %r', subkey, classname, editor) except EnvironmentError: break except EnvironmentError: pass if classname is not None and editor is None: try: # Look for Open action in registry key = OpenKeyEx(HKEY_CLASSES_ROOT, classname+'\\Shell\\Open\\Command') editor, nil = QueryValueEx(key, None) logger.debug('Open action for %r has command: %r. ', classname, editor) except EnvironmentError: pass if editor is None: try: nil, editor = FindExecutable(self.content_file, '') logger.debug('Executable for %r is: %r. ', self.content_file, editor) except pywintypes.error: pass # Don't use IE as an "editor" if editor is not None and editor.find('\\iexplore.exe') != -1: logger.debug('Found iexplore.exe. Skipping.') editor = None if editor is not None: return ExpandEnvironmentStrings(editor) if editor is None: fatalError('No editor was found for that object.\n' 'Specify an editor in the configuration file:\n' '(%s)' % self.config.path) return editor
def getEditorCommand(self): """Return the editor command""" editor = self.options.get('editor') if win32 and editor is None: from _winreg import HKEY_CLASSES_ROOT, OpenKeyEx, \ QueryValueEx, EnumKey from win32api import FindExecutable, ExpandEnvironmentStrings # Find editor application based on mime type and extension content_type = self.metadata.get('content_type') extension = self.options.get('extension') logger.debug('Have content type: %r, extension: %r', content_type, extension) if content_type: # Search registry for the extension by MIME type try: key = 'MIME\\Database\\Content Type\\%s' % content_type key = OpenKeyEx(HKEY_CLASSES_ROOT, key) extension, nil = QueryValueEx(key, 'Extension') logger.debug( 'Registry has extension %r for ' 'content type %r', extension, content_type) except EnvironmentError: pass if extension is None: url = self.metadata['url'] dot = url.rfind('.') if dot != -1 and dot > url.rfind('/'): extension = url[dot:] logger.debug('Extracted extension from url: %r', extension) classname = editor = None if extension is not None: try: key = OpenKeyEx(HKEY_CLASSES_ROOT, extension) classname, nil = QueryValueEx(key, None) logger.debug('ClassName for extension %r is: %r', extension, classname) except EnvironmentError: classname = None if classname is not None: try: # Look for Edit action in registry key = OpenKeyEx(HKEY_CLASSES_ROOT, classname + '\\Shell\\Edit\\Command') editor, nil = QueryValueEx(key, None) logger.debug('Edit action for %r is: %r', classname, editor) except EnvironmentError: pass if classname is not None and editor is None: logger.debug( 'Could not find Edit action for %r. ' 'Brute-force enumeration.', classname) # Enumerate the actions looking for one # starting with 'Edit' try: key = OpenKeyEx(HKEY_CLASSES_ROOT, classname + '\\Shell') index = 0 while 1: try: subkey = EnumKey(key, index) index += 1 if str(subkey).lower().startswith('edit'): subkey = OpenKeyEx(key, subkey + '\\Command') editor, nil = QueryValueEx(subkey, None) if editor is None: continue logger.debug( 'Found action %r for %r. ' 'Command will be: %r', subkey, classname, editor) except EnvironmentError: break except EnvironmentError: pass if classname is not None and editor is None: try: # Look for Open action in registry key = OpenKeyEx(HKEY_CLASSES_ROOT, classname + '\\Shell\\Open\\Command') editor, nil = QueryValueEx(key, None) logger.debug('Open action for %r has command: %r. ', classname, editor) except EnvironmentError: pass if editor is None: try: nil, editor = FindExecutable(self.content_file, '') logger.debug('Executable for %r is: %r. ', self.content_file, editor) except pywintypes.error: pass # Don't use IE as an "editor" if editor is not None and editor.find('\\iexplore.exe') != -1: logger.debug('Found iexplore.exe. Skipping.') editor = None if editor is not None: return ExpandEnvironmentStrings(editor) if editor is None: fatalError('No editor was found for that object.\n' 'Specify an editor in the configuration file:\n' '(%s)' % self.config.path) return editor