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:

Código:
from win32con import WM_GETTEXT
import win32gui
import win32process

def get_main_window_name(p):
    handles = []
    win32gui.EnumWindows(lambda hwnd, _: handles.append(hwnd), 0)
    title_buffer = win32gui.PyMakeBuffer(256)
    for handle in handles:
        [_, pid] = win32process.GetWindowThreadProcessId(handle)
        if pid == p.pid:
            length = win32gui.SendMessage(
                handle, WM_GETTEXT, len(title_buffer), title_buffer
            )
            return title_buffer.tobytes()[:length * 2].decode("utf16")

Ejemplo:

Código:
for p in find_procs_by_name("AcroRd32.exe"):
    print(get_main_window_name(p))

El código requiere pywin32.

Saludos!
¡No te pierdas nuestro curso oficial en Udemy para aprender Python, bases de datos SQL, orientación a objetos, tkinter y mucho más!

También ofrecemos consultoría profesional de desarrollo en Python para personas y empresas.
Responder
#3
OK, muchas gracias Francisco !!!
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)