mercurial/win32.py
changeset 16807 80142f385af9
parent 16806 186049f70026
child 17006 6fc7fd72ba3e
equal deleted inserted replaced
16806:186049f70026 16807:80142f385af9
     3 # Copyright 2005-2009 Matt Mackall <mpm@selenic.com> and others
     3 # Copyright 2005-2009 Matt Mackall <mpm@selenic.com> and others
     4 #
     4 #
     5 # This software may be used and distributed according to the terms of the
     5 # This software may be used and distributed according to the terms of the
     6 # GNU General Public License version 2 or any later version.
     6 # GNU General Public License version 2 or any later version.
     7 
     7 
     8 import encoding
     8 import ctypes, errno, os, subprocess, random
     9 import ctypes, errno, os, subprocess, random, _winreg
       
    10 
     9 
    11 _kernel32 = ctypes.windll.kernel32
    10 _kernel32 = ctypes.windll.kernel32
    12 _advapi32 = ctypes.windll.advapi32
    11 _advapi32 = ctypes.windll.advapi32
    13 _user32 = ctypes.windll.user32
    12 _user32 = ctypes.windll.user32
    14 
    13 
   242                 return status.value == _STILL_ACTIVE
   241                 return status.value == _STILL_ACTIVE
   243         finally:
   242         finally:
   244             _kernel32.CloseHandle(h)
   243             _kernel32.CloseHandle(h)
   245     return _kernel32.GetLastError() != _ERROR_INVALID_PARAMETER
   244     return _kernel32.GetLastError() != _ERROR_INVALID_PARAMETER
   246 
   245 
   247 def lookupreg(key, valname=None, scope=None):
       
   248     ''' Look up a key/value name in the Windows registry.
       
   249 
       
   250     valname: value name. If unspecified, the default value for the key
       
   251     is used.
       
   252     scope: optionally specify scope for registry lookup, this can be
       
   253     a sequence of scopes to look up in order. Default (CURRENT_USER,
       
   254     LOCAL_MACHINE).
       
   255     '''
       
   256     if scope is None:
       
   257         scope = (_winreg.HKEY_CURRENT_USER, _winreg.HKEY_LOCAL_MACHINE)
       
   258     elif not isinstance(scope, (list, tuple)):
       
   259         scope = (scope,)
       
   260     for s in scope:
       
   261         try:
       
   262             val = _winreg.QueryValueEx(_winreg.OpenKey(s, key), valname)[0]
       
   263             # never let a Unicode string escape into the wild
       
   264             return encoding.tolocal(val.encode('UTF-8'))
       
   265         except EnvironmentError:
       
   266             pass
       
   267 
       
   268 def executablepath():
   246 def executablepath():
   269     '''return full path of hg.exe'''
   247     '''return full path of hg.exe'''
   270     size = 600
   248     size = 600
   271     buf = ctypes.create_string_buffer(size + 1)
   249     buf = ctypes.create_string_buffer(size + 1)
   272     len = _kernel32.GetModuleFileNameA(None, ctypes.byref(buf), size)
   250     len = _kernel32.GetModuleFileNameA(None, ctypes.byref(buf), size)