platutils_win32.py
95 lines
| 2.7 KiB
| text/x-python
|
PythonLexer
ville
|
r988 | # -*- 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 <fperez@colorado.edu> | ||||
# | ||||
# Distributed under the terms of the BSD License. The full license is in | ||||
# the file COPYING, distributed as part of this software. | ||||
#***************************************************************************** | ||||
import os | ||||
Fernando Perez
|
r1852 | ignore_termtitle = True | ||
ville
|
r988 | |||
try: | ||||
import ctypes | ||||
Fernando Perez
|
r1331 | |||
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.""" | ||||
ville
|
r988 | SetConsoleTitleW(title) | ||
Brian Granger
|
r2204 | |||
ville
|
r988 | except ImportError: | ||
Fernando Perez
|
r1331 | 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) | ||||
ville
|
r988 | if ret: | ||
Fernando Perez
|
r1331 | # non-zero return code signals error, don't try again | ||
ignore_termtitle = True | ||||
Brian Granger
|
r1975 | |||
Fernando Perez
|
r2102 | |||
Brian Granger
|
r1975 | def find_cmd(cmd): | ||
"""Find the full path to a .bat or .exe using the win32api module.""" | ||||
try: | ||||
Fernando Perez
|
r2110 | from win32api import SearchPath | ||
Brian Granger
|
r1975 | except ImportError: | ||
raise ImportError('you need to have pywin32 installed for this to work') | ||||
else: | ||||
Fernando Perez
|
r2110 | 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 | ||||
Administrator
|
r1986 | |||
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 | ||||
Fernando Perez
|
r2102 | |||
Tom Fetherston
|
r1939 | def term_clear(): | ||
os.system('cls') | ||||