Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Detalle procesos con psutil
#1
Question 
Hola,

Utilizando el módulo psutil obtengo el detalle de los procesos en memoria de Acrobar Reader:

def find_procs_by_name(name):
    "Return a list of processes matching 'name'."
    ls = []
    for p in psutil.process_iter(['name']):
        if p.info['name'] == name:
            ls.append(p)
    return ls  


Salida:
[psutil.Process(pid=5576, name='AcroRd32.exe', started='19:22:22'), psutil.Process(pid=10876, name='AcroRd32.exe', started='19:22:23')]

Lo que quisiera saber es si a partir de esa información puedo obtener el nombre del archivo (pdf) que está abriendo el Acrobat, tal como figura en la imagen adjunta.

Muchas gracias!

Saludos,

Raúl


Archivos adjuntos Miniatura(s)
   
Responder
#2
Hola Raúl.

psutil no provee ninguna función para eso. Se me ocurre que se puede obtener el nombre del archivo leyendo el título de la ventana principal del proceso (considerando que eso es lo que muestra el administrador de tareas) usando la API de Windows:

  1. from win32con import WM_GETTEXT
  2. import win32gui
  3. import win32process
  4.  
  5. def get_main_window_name(p):
  6. handles = []
  7. win32gui.EnumWindows(lambda hwnd, _: handles.append(hwnd), 0)
  8. title_buffer = win32gui.PyMakeBuffer(256)
  9. for handle in handles:
  10. [_, pid] = win32process.GetWindowThreadProcessId(handle)
  11. if pid == p.pid:
  12. length = win32gui.SendMessage(
  13. handle, WM_GETTEXT, len(title_buffer), title_buffer
  14. )
  15. return title_buffer.tobytes()[:length * 2].decode("utf16")


Ejemplo:

  1. for p in find_procs_by_name("AcroRd32.exe"):
  2. print(get_main_window_name(p))


El código requiere pywin32.

Saludos!
Responder
#3
OK, muchas gracias Francisco !!!
Responder


Salto de foro:


Usuarios navegando en este tema: 2 invitado(s)