VEDI COM — Monitor delle porte seriali in tempo reale
=====================================================
Developed by GG - 2026

Cosa fa
-------
Apre una finestra che mostra tutte le porte COM presenti sul PC e, per ognuna,
dice se è libera oppure occupata. Per le porte occupate indica quale processo
la sta usando (nome, PID e percorso dell'eseguibile) e quale dispositivo è
(collegamento USB-seriale, Bluetooth, porta madreboard, adattatore FTDI...),
con VID:PID e identificativo hardware.

La lettura avviene una volta al secondo e non apre mai le porte: non disturba
schede collegate, non resetta Arduino e non invia dati.


Requisiti
---------
- Windows XP SP3, Vista, 7, 8, 8.1, 10 o 11 (32 e 64 bit).
- Microsoft .NET Framework 4.0 o successivo.
  Windows 10 e 11 lo hanno già incluso; Windows 7 SP1 aggiornato di norma
  arriva alla 4.8 tramite Windows Update. Su Windows XP SP3 il massimo
  installabile è la 4.0 (gratuita, dal sito Microsoft).

Non serve installare nulla: VediCom.exe è un singolo file, non scrive nel
registro, non crea servizi e non usa la rete.


Windows XP
----------
VediCom funziona su Windows XP SP3 a 32 bit con .NET Framework 4.0: stessa
finestra, stesso rilevamento, nessuna versione separata da scegliere.

Su XP il programma riconosce da solo che il sistema non conosce la tabella
handle "estesa" introdotta con Vista e usa quella storica (voci da 16 byte):
il rilevamento delle porte occupate resta completo.

Differenze su XP, tutte estetiche o di contorno:
- il carattere dell'interfaccia è Tahoma (Segoe UI non esiste su XP);
- la barra del titolo segue il tema di XP (su Windows 10/11 è scura);
- "Esegui come amministratore" mostra la richiesta di XP invece del UAC;
- su schermi piccoli (800x600) la finestra si rimpicciolisce da sola per
  stare dentro lo schermo.

Limite: la tabella handle storica riporta handle a 16 bit, quindi questo
percorso vale solo per XP a 32 bit. Su Windows XP Professional x64 il
programma si avvia e mostra le porte, ma può non riconoscere i processi che
le occupano (sistema ormai rarissimo).


Copia per Windows XP: VediCom-XP.exe
------------------------------------
Nella cartella c'è anche VediCom-XP.exe: è lo stesso identico programma di
VediCom.exe (stessi byte, stesso md5), con un nome che rende subito chiaro a
chi lo riceve che funziona su Windows XP. Non è una build diversa e non va
mantenuta separatamente: se ricompili, copia il nuovo VediCom.exe sopra
VediCom-XP.exe (in Windows: copia e incolla, sostituisci).


32 o 64 bit
-----------
Lo stesso VediCom.exe va bene su entrambe le architetture: è compilato "AnyCPU",
quindi su Windows a 64 bit gira a 64 bit e su Windows a 32 bit gira nativamente
a 32 bit, senza bisogno di una versione diversa.

Il rilevamento delle porte usa solo strutture con puntatori a dimensione
variabile e adatta da sola gli spostamenti nella tabella degli handle: il
percorso a 32 bit è stato eseguito e verificato (finestra, centratura, lettura
di ~110.000 handle, associazione handle -> porta e processo corretto).
A parità di situazione le due versioni danno lo stesso risultato; l'unica
differenza è la quantità di memoria usata (un processo a 32 bit non può
superare ~2 GB, irrilevante qui: VediCom usa poche decine di MB).


Avvio
-----
Doppio clic su VediCom.exe (oppure su VediCom-XP.exe: è lo stesso file).
La finestra si apre al centro del monitor in cui si trova il puntatore del
mouse (utile con più schermi).

Per chiudere: pulsante "Chiudi" in basso a destra, la X della finestra, oppure
il tasto Esc.


Come si legge la finestra
-------------------------
- Scheda della porta: a sinistra il nome (COM5, COM10...), al centro il
  dispositivo, a destra lo stato.
- LIBERA (verde): nessun programma ha la porta aperta.
- OCCUPATA (rosso): la porta è aperta; sotto compaiono i programmi che la
  tengono aperta con il loro PID. Se sono più di uno, le schede in più sono
  riassunte con "+N".
- Le porte occupate sono sempre elencate per prime.
- "Occupata da ..." indica da quanto tempo il programma tiene aperta la porta.
- Clic su una scheda: copia negli appunti tutti i dettagli (utile per un
  messaggio di assistenza). Compare un avviso "Dettagli copiati".
- Passando il mouse su una scheda compare un riepilogo completo, compreso il
  percorso dell'eseguibile.
- "Solo occupate": mostra soltanto le porte in uso.
- "Aggiornamento automatico": se disattivato, la schermata resta ferma finché
  non premi "Aggiorna ora" (oppure F5).
- Nella barra in basso: ora dell'ultima lettura, durata della scansione e
  conteggio delle porte.

In alto a destra: "LIVE" (aggiornamento attivo) o "IN PAUSA", e il livello di
privilegi corrente.


Amministratore (importante)
---------------------------
Senza privilegi elevati il programma vede le porte aperte dai programmi
dell'utente corrente (la maggior parte dei casi). Le porte tenute aperte da
servizi di sistema o da altri utenti possono risultare libere.

Per vederle tutte:
  premi "Esegui come amministratore" in basso: il programma si riavvia con i
  privilegi richiesti (compare la richiesta di consenso di Windows).

Il programma NON richiede amministratore per avviarsi: è una scelta, così
parte sempre senza UAC. La modalità elevata è facoltativa.


Come funziona (in breve)
------------------------
1. Le porte presenti si leggono dal registro di sistema e dalla classe
   "Porte" di Windows (SetupAPI): nome, produttore, VID/PID, driver.
2. Ogni secondo si legge la tabella degli handle di sistema
   (NtQuerySystemInformation) e si esaminano solo gli handle di tipo file su
   dispositivi a caratteri; il nome dell'oggetto (\Device\USBSER000,
   \Device\BthModem0...) viene confrontato con quello della porta. Se il
   sistema non supporta la tabella "estesa" (Windows XP) si usa il formato
   storico, riconosciuto in automatico.
3. Le letture dei nomi avvengono su un thread con timeout: se un driver si
   blocca, l'interfaccia resta reattiva e quel handle viene ignorato.
L'elenco dei processi si ottiene dall'handle: nessuna apertura della porta,
nessun disturbo alla periferica.


Ricompilare dai sorgenti
------------------------
Servono i Visual Studio Build Tools 2022 (compilatore C#) e le reference
assemblies .NET Framework 4.0.

  powershell -ExecutionPolicy Bypass -File build\build.ps1

L'eseguibile viene creato nella cartella principale (VediCom.exe), sostituendo
quello esistente. Con -OutDir <cartella> si sceglie un'altra destinazione.
La compilazione produce un eseguibile AnyCPU che dichiara .NET Framework 4.0:
parte su Windows XP SP3 e su tutti i Windows successivi con .NET 4.x.


Cartelle
--------
- VediCom.exe        programma pronto all'uso (unico file necessario)
- VediCom-XP.exe     copia identica, con il nome pensato per i PC con Windows XP
- src\              codice C# completo (interfaccia, rilevamento, P/Invoke)
- build\             script di compilazione, manifest, icona
- strumenti\         utilità di sviluppo (icona, cattura schermo, test porte)

Diagnostica
-----------
Impostando la variabile d'ambiente VEDICOM_DEBUG=1 il programma scrive un log
per ogni aggiornamento in %TEMP%\vedicom_debug.log (porte, tempi, processi).
Con VEDICOM_HANDLE_TABLE=legacy si forza il percorso Windows XP anche sui
sistemi recenti (solo diagnostica, per processi a 32 bit).


Limiti noti
-----------
- Le porte occupate da servizi di sistema o da altri utenti richiedono
  l'esecuzione come amministratore (vedi sopra).
- Su macchine virtuali o driver particolari un handle può non essere
  leggibile: in quel caso la porta risulta libera pur essendo aperta.
- Non modifica nulla: è uno strumento di sola osservazione.
