| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- import ctypes
- DWORD = ctypes.c_ulong
- MAX_PATH = ctypes.c_int(260)
- MAX_PATH_NULL = int(MAX_PATH.value) + 1
- def decode(s):
- if isinstance(s, unicode):
- return s
- return s.decode('mbcs')
- def GetModuleFileName(handle):
- r = 0
- if hasattr(ctypes.windll.kernel32, "GetModuleFileNameW"):
- name = ctypes.create_unicode_buffer(MAX_PATH_NULL)
- r = ctypes.windll.kernel32.GetModuleFileNameW(handle, name, MAX_PATH_NULL)
- if r == 0:
- name = ctypes.create_string_buffer(MAX_PATH_NULL)
- ctypes.windll.kernel32.GetModuleFileNameA(handle, name, MAX_PATH_NULL)
- return decode(name.value)
- def GetTempPath():
- r = 0
- if hasattr(ctypes.windll.kernel32, "GetTempPathW"):
- name = ctypes.create_unicode_buffer(MAX_PATH_NULL)
- r = ctypes.windll.kernel32.GetTempPathW(MAX_PATH_NULL, name)
- if r == 0:
- name = ctypes.create_string_buffer(MAX_PATH_NULL)
- ctypes.windll.kernel32.GetTempPathA(MAX_PATH_NULL, name)
- return decode(name.value)
- def ShellExecute(hwnd, operation, file, parameters, directory, showCmd):
- if hasattr(ctypes.windll.shell32, 'ShellExecuteW'):
- SW = ctypes.windll.shell32.ShellExecuteW
- operation = decode(operation)
- file = decode(file)
- parameters = decode(parameters)
- directory = decode(directory)
- else:
- SW = ctypes.windll.shell32.ShellExecuteA
- return SW(hwnd, operation, file, parameters, directory, showCmd)
- def GetVolumeInformation(rootPathName):
- volumeSerialNumber = DWORD()
- maximumComponentLength = DWORD()
- fileSystemFlags = DWORD()
- if hasattr(ctypes.windll.kernel32, "GetVolumeInformationW"):
- rootPathName = decode(rootPathName)
- volumeNameBuffer = ctypes.create_unicode_buffer(MAX_PATH_NULL)
- fileSystemNameBuffer = ctypes.create_unicode_buffer(MAX_PATH_NULL)
- GVI = ctypes.windll.kernel32.GetVolumeInformationW
- else:
- volumeNameBuffer = ctypes.create_string_buffer(MAX_PATH_NULL)
- fileSystemNameBuffer = ctypes.create_string_buffer(MAX_PATH_NULL)
- GVI = ctypes.windll.kernel32.GetVolumeInformationA
- GVI(rootPathName, volumeNameBuffer, MAX_PATH_NULL,
- ctypes.byref(volumeSerialNumber), ctypes.byref(maximumComponentLength),
- ctypes.byref(fileSystemFlags), fileSystemNameBuffer, MAX_PATH_NULL)
- return (volumeNameBuffer.value, volumeSerialNumber.value,
- maximumComponentLength.value, fileSystemFlags.value,
- fileSystemNameBuffer.value)
- CloseHandle = ctypes.windll.kernel32.CloseHandle
- GetLastError = ctypes.windll.kernel32.GetLastError
- GetCurrentProcessId = ctypes.windll.kernel32.GetCurrentProcessId
- OpenProcess = ctypes.windll.kernel32.OpenProcess
- TerminateProcess = ctypes.windll.kernel32.TerminateProcess
|