API: Procesos

Funciones para buscar, monitorear y gestionar procesos de Windows.

Registro en C++: regManager(js) y regProcesses(js).


proc_find

proc_find(name: string) → object

Busca proceso(s) por nombre de archivo .exe (sin distinguir mayúsculas/minúsculas). Si hay múltiples instancias en ejecución — devuelve todos los PID.

Parámetros:

Parámetro Tipo Descripción
name string Nombre del archivo del proceso, ej. "notepad.exe"

Resultado:

Campo Tipo Descripción
found bool true — se encontró al menos una instancia
pid number PID del primer proceso encontrado (0 si no se encuentra)
pids number[] Array con todos los PID con ese nombre
error string Mensaje de error o ""

Ejemplo:

let f = proc_find("notepad.exe");

if (!f.found) {
    console.log("Proceso no encontrado");
} else {
    console.log("Primer PID:", f.pid);

    if (f.pids.length > 1) {
        console.log("Múltiples instancias:", JSON.stringify(f.pids));
    }
}

proc_cpu

proc_cpu(pid: number) → object

Uso de CPU por el proceso en porcentaje.

Nota: La función toma dos mediciones con una pausa de 200 ms — la ejecución se bloquea durante este tiempo.

Parámetros:

Parámetro Tipo Descripción
pid number PID del proceso

Resultado:

Campo Tipo Descripción
cpu number Porcentaje de CPU (−1 en caso de error)
error string Mensaje de error o ""

Ejemplo:

let r = proc_cpu(1234);
if (r.error) {
    console.log("Error:", r.error);
} else {
    console.log("CPU:", r.cpu.toFixed(1) + "%");
}

proc_ram

proc_ram(pid: number) → object

Consumo de memoria (Working Set).

Parámetros:

Parámetro Tipo Descripción
pid number PID del proceso

Resultado:

Campo Tipo Descripción
ram_mb number MB (−1 en caso de error)
ram_bytes number Bytes
error string Mensaje de error o ""

Ejemplo:

let r = proc_ram(1234);
console.log("RAM:", r.ram_mb.toFixed(1), "MB");
console.log("RAM (bytes):", r.ram_bytes);

proc_alive

proc_alive(pid: number) → object

Comprueba si el proceso está activo y responde a mensajes.

Comportamiento:

  • Proceso GUI (tiene ventana visible): se verifica mediante SendMessageTimeout con un tiempo de espera de 1 segundo.
  • Proceso en segundo plano (sin ventana): responding = alive.

Parámetros:

Parámetro Tipo Descripción
pid number PID del proceso

Resultado:

Campo Tipo Descripción
alive bool true — el proceso existe y no ha finalizado
responding bool true — el proceso responde a mensajes
error string Mensaje de error o ""

Ejemplo:

let r = proc_alive(1234);
console.log("Activo:", r.alive);
console.log("Responde:", r.responding);

if (r.alive && !r.responding) {
    console.log("¡El proceso está bloqueado!");
}

proc_service

proc_service(pid: number) → object

Comprueba si el proceso pertenece a un servicio de Windows.

Parámetros:

Parámetro Tipo Descripción
pid number PID del proceso

Resultado:

Campo Tipo Descripción
is_service bool true — el proceso es un servicio de Windows
service_name string Nombre del servicio o ""
error string Mensaje de error o ""

Ejemplo:

let r = proc_service(1234);
if (r.is_service) {
    console.log("Servicio:", r.service_name);
}

proc_kill

proc_kill(pid: number) → object

Finaliza un proceso de forma forzosa (TerminateProcess).

Parámetros:

Parámetro Tipo Descripción
pid number PID del proceso

Resultado:

Campo Tipo Descripción
ok bool true — proceso finalizado
error string Mensaje de error o ""

Ejemplo:

let r = proc_kill(1234);
if (r.ok) {
    console.log("Proceso finalizado");
} else {
    console.log("Error:", r.error);
}

proc_run

proc_run(path: string, args?: string) → object

Inicia un nuevo proceso (CreateProcess).

Parámetros:

Parámetro Tipo Descripción
path string Ruta completa al archivo .exe
args string (opcional) Argumentos de línea de comandos

Resultado:

Campo Tipo Descripción
ok bool true — proceso iniciado
pid number PID del nuevo proceso (0 en caso de error)
error string Mensaje de error o ""

Ejemplos:

// Sin argumentos
let r = proc_run("C:\\Windows\\notepad.exe");
console.log("PID:", r.pid);

// Con argumentos
let r2 = proc_run("C:\\tools\\app.exe", "--config app.json --verbose");
if (r2.ok) {
    console.log("Iniciado, PID:", r2.pid);
} else {
    console.log("Error:", r2.error);
}

Ejemplo completo: monitoreo de un solo proceso

let name = "myapp.exe";

// 1. Buscar el proceso
let f = proc_find(name);
if (!f.found) {
    console.log("[ADVERTENCIA] Proceso no encontrado:", name);
} else {
    let pid = f.pid;

    // 2. Recopilar métricas
    let cpu  = proc_cpu(pid);      // se bloquea durante 200 ms
    let ram  = proc_ram(pid);
    let live = proc_alive(pid);
    let svc  = proc_service(pid);

    console.log("PID:", pid);
    console.log("CPU:", cpu.cpu.toFixed(1) + "%");
    console.log("RAM:", ram.ram_mb.toFixed(1) + " MB");
    console.log("Activo:", live.alive, "| Responde:", live.responding);

    if (svc.is_service) {
        console.log("Servicio:", svc.service_name);
    }
}