API: Processi

Funzioni per individuare, monitorare e gestire processi Windows.

Registrazione C++: regManager(js) e regProcesses(js).


proc_find

proc_find(name: string) → object

Trova uno o più processi per nome .exe (senza distinzione tra maiuscole e minuscole). Se sono in esecuzione più istanze — restituisce tutti i PID.

Parametri:

Parametro Tipo Descrizione
name string Nome del file del processo, es. "notepad.exe"

Risultato:

Campo Tipo Descrizione
found bool true — trovata almeno un'istanza
pid number PID del primo trovato (0 se non trovato)
pids number[] Array di tutti i PID con quel nome
error string Messaggio di errore o ""

Esempio:

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

if (!f.found) {
    console.log("Processo non trovato");
} else {
    console.log("Primo PID:", f.pid);

    if (f.pids.length > 1) {
        console.log("Istanze multiple:", JSON.stringify(f.pids));
    }
}

proc_cpu

proc_cpu(pid: number) → object

Utilizzo della CPU da parte del processo in percentuale.

Nota: La funzione effettua due misurazioni con una pausa di 200 ms — l'esecuzione viene bloccata durante questo intervallo.

Parametri:

Parametro Tipo Descrizione
pid number PID del processo

Risultato:

Campo Tipo Descrizione
cpu number Percentuale CPU (−1 in caso di errore)
error string Messaggio di errore o ""

Esempio:

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

proc_ram

proc_ram(pid: number) → object

Consumo di memoria (Working Set).

Parametri:

Parametro Tipo Descrizione
pid number PID del processo

Risultato:

Campo Tipo Descrizione
ram_mb number MB (−1 in caso di errore)
ram_bytes number Byte
error string Messaggio di errore o ""

Esempio:

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

proc_alive

proc_alive(pid: number) → object

Verifica se il processo è attivo e risponde ai messaggi.

Comportamento:

  • Processo GUI (ha una finestra visibile): verificato tramite SendMessageTimeout con un timeout di 1 secondo.
  • Processo in background (nessuna finestra): responding = alive.

Parametri:

Parametro Tipo Descrizione
pid number PID del processo

Risultato:

Campo Tipo Descrizione
alive bool true — il processo esiste e non è terminato
responding bool true — il processo risponde ai messaggi
error string Messaggio di errore o ""

Esempio:

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

if (r.alive && !r.responding) {
    console.log("Il processo è bloccato!");
}

proc_service

proc_service(pid: number) → object

Verifica se il processo appartiene a un servizio Windows.

Parametri:

Parametro Tipo Descrizione
pid number PID del processo

Risultato:

Campo Tipo Descrizione
is_service bool true — il processo è un servizio Windows
service_name string Nome del servizio o ""
error string Messaggio di errore o ""

Esempio:

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

proc_kill

proc_kill(pid: number) → object

Termina forzatamente un processo (TerminateProcess).

Parametri:

Parametro Tipo Descrizione
pid number PID del processo

Risultato:

Campo Tipo Descrizione
ok bool true — processo terminato
error string Messaggio di errore o ""

Esempio:

let r = proc_kill(1234);
if (r.ok) {
    console.log("Processo terminato");
} else {
    console.log("Errore:", r.error);
}

proc_run

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

Avvia un nuovo processo (CreateProcess).

Parametri:

Parametro Tipo Descrizione
path string Percorso completo del file .exe
args string (opzionale) Argomenti della riga di comando

Risultato:

Campo Tipo Descrizione
ok bool true — processo avviato
pid number PID del nuovo processo (0 in caso di errore)
error string Messaggio di errore o ""

Esempi:

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

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

Esempio completo: monitoraggio di un singolo processo

let name = "myapp.exe";

// 1. Trova il processo
let f = proc_find(name);
if (!f.found) {
    console.log("[WARN] Processo non trovato:", name);
} else {
    let pid = f.pid;

    // 2. Raccogli metriche
    let cpu  = proc_cpu(pid);      // si blocca per 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("Attivo:", live.alive, "| Risponde:", live.responding);

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