def list_process_names(): """ Returns a list of the names of running processes :return: A list of unicode strings """ process_id_array_size = 1024 entries = 0 while entries == 0 or process_id_array_size == entries: dword_array = (wintypes.DWORD * process_id_array_size) process_ids = dword_array() bytes_used = wintypes.DWORD(0) res = psapi.EnumProcesses(cast(process_ids, wintypes.PDWORD), sizeof(process_ids), byref(bytes_used)) if not res: return [] entries = int(bytes_used.value / sizeof(wintypes.DWORD)) process_id_array_size += 512 output = [] index = 0 while index < entries: process_id = process_ids[index] process_handle = kernel32.OpenProcess( PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, False, process_id) if process_handle: module = wintypes.HANDLE() needed_bytes = wintypes.LPDWORD() module_res = psapi.EnumProcessModules(process_handle, byref(module), sizeof(module), byref(needed_bytes)) if module_res: length = 260 buffer = ctypes.create_unicode_buffer(length) output_size = wintypes.DWORD(length) name_res = psapi.GetModuleBaseNameW( process_handle, module, buffer, length) name = buffer.value output.append(name) kernel32.CloseHandle(process_handle) index += 1 return output
def get_ppname(): process_id_array_size = 1024 entries = 0 while entries == 0 or process_id_array_size == entries: dword_array = (wintypes.DWORD * process_id_array_size) process_ids = dword_array() bytes_used = wintypes.DWORD(0) res = WINAPI._EnumProcesses(cast(process_ids, wintypes.PDWORD), sizeof(process_ids), byref(bytes_used)) if not res: return [] entries = int(bytes_used.value / sizeof(wintypes.DWORD)) process_id_array_size += 512 name = None index = 0 ppid = os.getppid() while index < entries: process_id = process_ids[index] if ppid != process_id: index += 1 continue process_handle = WINAPI._OpenProcess( WINAPI._PROCESS_QUERY_INFORMATION | WINAPI._PROCESS_VM_READ, False, process_id) if process_handle: module = wintypes.HANDLE() needed_bytes = wintypes.LPDWORD() module_res = WINAPI._EnumProcessModules( process_handle, byref(module), sizeof(module), byref(needed_bytes)) if module_res: length = 260 buffer = ctypes.create_unicode_buffer(length) WINAPI._GetModuleBaseNameW(process_handle, module, buffer, length) name = buffer.value WINAPI._CloseHandle(process_handle) break return name