comparison win32.py @ 81:24752db487c5

Fixed errors in the win32 module
author Oleg Oshmyan <chortos@inbox.lv>
date Wed, 16 Feb 2011 15:30:57 +0000
parents 809b77302b21
children 06356af50bf9
comparison
equal deleted inserted replaced
80:809b77302b21 81:24752db487c5
2 2
3 from __future__ import division, with_statement 3 from __future__ import division, with_statement
4 4
5 try: 5 try:
6 from compat import * 6 from compat import *
7 from testcases import (TimeLimitExceeded, MemoryLimitExceeded,
8 CanceledByUser, CannotStartTestee)
7 except ImportError: 9 except ImportError:
8 import __main__ 10 import __main__
9 __main__.import_error(sys.exc_info()[1]) 11 __main__.import_error(sys.exc_info()[1])
10 12
11 from __main__ import clock 13 from __main__ import clock
85 proc = HANDLE(int(GetCurrentProcess())) 87 proc = HANDLE(int(GetCurrentProcess()))
86 handle = DuplicateHandle(proc, handle, proc, 0, flags & 1, 2) 88 handle = DuplicateHandle(proc, handle, proc, 0, flags & 1, 2)
87 self.handle = handle.Detach() 89 self.handle = handle.Detach()
88 else: 90 else:
89 raise TypeError("Handle() argument must be a handle, not '%s'" % 91 raise TypeError("Handle() argument must be a handle, not '%s'" %
90 type(name).__name__) 92 type(handle).__name__)
91 93
92 def __int__(self): 94 def __int__(self):
93 return int(self.handle) 95 return int(self.handle)
94 96
95 def Detach(self): 97 def Detach(self):
113 115
114 try: 116 try:
115 unicode 117 unicode
116 except NameError: 118 except NameError:
117 LPCTSTR = LPCWSTR 119 LPCTSTR = LPCWSTR
118 unisuffix = 'W' 120 UNISUFFIX = 'W'
119 else: 121 else:
120 LPCTSTR = LPCSTR 122 LPCTSTR = LPCSTR
121 unisuffix = 'A' 123 UNISUFFIX = 'A'
122 124
123 125
124 prototype = WINFUNCTYPE(BOOL, Handle, 126 prototype = WINFUNCTYPE(BOOL, Handle,
125 LPFILETIME, LPFILETIME, LPFILETIME, LPFILETIME) 127 LPFILETIME, LPFILETIME, LPFILETIME, LPFILETIME)
126 flags = ((1, 'process'), 128 flags = ((1, 'process'),
242 244
243 245
244 prototype = WINFUNCTYPE(HANDLE, c_void_p, LPCTSTR) 246 prototype = WINFUNCTYPE(HANDLE, c_void_p, LPCTSTR)
245 flags = (5, 'attributes'), (1, 'name') 247 flags = (5, 'attributes'), (1, 'name')
246 try: 248 try:
247 CreateJobObject = prototype(('CreateJobObject'+unisuffix, windll.kernel32), 249 CreateJobObject = prototype(('CreateJobObject'+UNISUFFIX, windll.kernel32),
248 flags) 250 flags)
249 except AttributeError: 251 except AttributeError:
250 # Available on 2000 and up, NT line only 252 # Available on 2000 and up, NT line only
251 CreateJobObject = lambda name: None 253 CreateJobObject = lambda name: None
252 else: 254 else:
398 TerminateProcess.errcheck = errcheck 400 TerminateProcess.errcheck = errcheck
399 401
400 402
401 # Do not show error messages due to errors in the program being tested 403 # Do not show error messages due to errors in the program being tested
402 try: 404 try:
403 errmode = ctypes.windll.kernel32.GetErrorMode() 405 errmode = windll.kernel32.GetErrorMode()
404 except AttributeError: 406 except AttributeError:
405 # GetErrorMode is available on Vista/2008 and up 407 # GetErrorMode is available on Vista/2008 and up
406 errmode = ctypes.windll.kernel32.SetErrorMode(0) 408 errmode = windll.kernel32.SetErrorMode(0)
407 ctypes.windll.kernel32.SetErrorMode(errmode | 0x8003) 409 windll.kernel32.SetErrorMode(errmode | 0x8003)
408 410
409 stdin = GetStdHandle(STD_INPUT_HANDLE) 411 stdin = GetStdHandle(STD_INPUT_HANDLE)
410 try: 412 try:
411 SetConsoleMode(stdin, ENABLE_PROCESSED_INPUT) 413 SetConsoleMode(stdin, ENABLE_PROCESSED_INPUT)
412 except WindowsError: 414 except WindowsError: