List de procesos en win32

Chema Cortes pych3m4 en gmail.com
Jue Nov 2 05:35:53 CET 2006


El 2006/11/1, Josu Rodriguez Vilda <jrvilda en gmail.com> escribió:
> Me gustaría sacar un listado de los procesos que están corriendo en mi
> maquina windows.
> He estado mirando y creo que se realiza con el modulo win32pdh, pero por
> mucho que veo ejemplos y de mas, no consigo ni hacer que me salga la
> lista ni tampoco entender como hacerlo.
> Alguien tiene alguna idea.

> Estoy probando con :
>
> import win32pdh
> win32pdh.EnumObjects(None, None, win32pdh.PERF_DETAIL_WIZARD)
> junk, instances = win32pdh.EnumObjectItems(None,None,'Process',
> win32pdh.PERF_DETAIL_WIZARD)
>
> Pero el resultado siempre es el mismo en todos los ejemplos de la web
> que veo.
>
> pywintypes.error: (-1073738824, 'EnumObjectItems for buffer size', 'No
> error message is available')
>
> Que creo que es por acceso denegado.

El problema está en que cuando preguntas por un objeto a
EnumObjectItems tienes que dar el nombre en el idioma que uses (eg:
'proceso'). Manías que tiene el windows :-p

Un modo de evitarlo sería de esta forma:

import win32process, win32api, winnt, os
def GetProcessNames():
    id_list = win32process.EnumProcesses()
    result = []
    for id in id_list:
        try:
            try:
                proc_handle =win32api.OpenProcess(
                        winnt.PROCESS_QUERY_INFORMATION | winnt.PROCESS_VM_READ,
                        False, id)
                module_handle = win32process.EnumProcessModules(proc_handle)[0]
                process_path =
win32process.GetModuleFileNameEx(proc_handle, module_handle)
                result.append(os.path.basename(process_path))
            finally:
                win32api.CloseHandle(proc_handle)
        except:
            pass
    return result




Más información sobre la lista de distribución Python-es