# -*- coding: utf-8 -*- """ Platform specific utility functions, win32 version Importing this module directly is not portable - rather, import platutils to use these functions in platform agnostic fashion. """ #***************************************************************************** # Copyright (C) 2001-2006 Fernando Perez # # Distributed under the terms of the BSD License. The full license is in # the file COPYING, distributed as part of this software. #***************************************************************************** import os ignore_termtitle = True try: import ctypes SetConsoleTitleW = ctypes.windll.kernel32.SetConsoleTitleW SetConsoleTitleW.argtypes = [ctypes.c_wchar_p] def set_term_title(title): """Set terminal title using ctypes to access the Win32 APIs.""" SetConsoleTitleW(title) except ImportError: def set_term_title(title): """Set terminal title using the 'title' command.""" global ignore_termtitle try: # Cannot be on network share when issuing system commands curr = os.getcwd() os.chdir("C:") ret = os.system("title " + title) finally: os.chdir(curr) if ret: # non-zero return code signals error, don't try again ignore_termtitle = True def find_cmd(cmd): """Find the full path to a .bat or .exe using the win32api module.""" try: from win32api import SearchPath except ImportError: raise ImportError('you need to have pywin32 installed for this to work') else: PATH = os.environ['PATH'] extensions = ['.exe', '.com', '.bat', '.py'] path = None for ext in extensions: try: path = SearchPath(PATH,cmd + ext)[0] except: pass if path is None: raise OSError("command %r not found" % cmd) else: return path def get_long_path_name(path): """Get a long path name (expand ~) on Windows using ctypes. Examples -------- >>> get_long_path_name('c:\\docume~1') u'c:\\\\Documents and Settings' """ try: import ctypes except ImportError: raise ImportError('you need to have ctypes installed for this to work') _GetLongPathName = ctypes.windll.kernel32.GetLongPathNameW _GetLongPathName.argtypes = [ctypes.c_wchar_p, ctypes.c_wchar_p, ctypes.c_uint ] buf = ctypes.create_unicode_buffer(260) rv = _GetLongPathName(path, buf, 260) if rv == 0 or rv > 260: return path else: return buf.value def term_clear(): os.system('cls')