CMDgui
CMDgui
Interfaccia grafica (WinForms, .NET 10) per i principali comandi shell di
Windows — ping, tracert, pathping, ipconfig, nslookup, netstat,
arp, route, tasklist, systeminfo, netsh wlan, robocopy — con
output in tempo reale e vista parsificata dei risultati.
Caratteristiche
- Menu comandi: selezionando una voce dal menu si apre una nuova tab indipendente per quel comando.
- Esecuzioni multiple in parallelo: si possono aprire più tab dello
stesso comando contemporaneamente (es. due
pingverso host diversi). - Output in tempo reale: ogni tab mostra l'output grezzo del comando non appena viene prodotto, oltre a una vista strutturata (tabella o riepilogo) aggiornata via via che il comando gira.
- Output grezzo collassabile: la sezione di testo grezzo si trova in basso in ogni tab e può essere nascosta/mostrata con un pulsante, per lasciare più spazio alla vista parsificata.
- Anteprima del comando: tra i parametri e la tabella dei risultati, ogni tab mostra una casella di testo in sola lettura con l'anteprima esatta del comando che verrà eseguito (eseguibile + argomenti); si aggiorna automaticamente a ogni modifica delle opzioni, prima ancora di premere "Avvia".
- Icona applicativa coerente: l'app usa un'icona personalizzata a tema
terminale/prompt (
Assets/AppIcon.ico), impostata sia come icona dell'eseguibile sia come icona della finestra principale. - Comandi supportati:
- Ping — host, numero pacchetti, modalità continua (
-t), timeout, più una sezione "Opzioni avanzate" collassabile con tutte le altre opzioni diping.exe(-a -l -f -i -v -r -s -j -k -R -S -c -p -4 -6, con mutua esclusione tra-4/-6e tra-j/-k); tabella delle risposte, grafico a linea del tempo di risposta (asse X = numero della richiesta, asse Y = tempo in ms) e riepilogo (pacchetti persi, tempi min/max/media). - Tracert — host, numero massimo di hop, timeout, più una sezione
"Opzioni avanzate" collassabile (
-d -j -R -S -4 -6, con mutua esclusione tra-4/-6); tabella hop-by-hop con i tre tempi e l'indirizzo di ciascun passaggio. - Pathping — host, numero massimo di hop, numero di query per hop,
timeout, più una sezione "Opzioni avanzate" collassabile (
-n -p -i -g -4 -6, con mutua esclusione tra-4/-6); tabella hop-by-hop con RTT e percentuali di perdita (da origine e per singolo nodo/collegamento). - Ipconfig — opzioni
/alle/allcompartments; elenco degli adattatori di rete con indirizzo IPv4, subnet mask e gateway predefinito; azioni rapide indipendenti Pulisci cache DNS (/flushdns), Mostra cache DNS (/displaydns) e Registra DNS (/registerdns). - Nslookup — nome host, server DNS opzionale, tipo di record DNS
(
-type=: A, AAAA, MX, NS, CNAME, TXT, PTR, ANY); server DNS interrogato e indirizzi risolti. - Netstat — opzioni
-a -n -o -b -fe filtro protocollo (TCP/UDP); tabella delle connessioni/socket con protocollo, indirizzo locale ed esterno, stato e PID. - Arp — filtro opzionale per indirizzo IP, filtro opzionale per
indirizzo interfaccia (
-N) e modalità dettagliata (-v); tabella della cache ARP con indirizzo IP, indirizzo fisico, tipo e interfaccia. - Route — filtro famiglia indirizzi (IPv4/IPv6/tutte,
route print) e filtro opzionale per pattern di destinazione; tabella della route table IPv4 (indirizzo rete, mask, gateway, interfaccia, metrica). - Tasklist — elenco dei processi in esecuzione (nome immagine, PID,
sessione, memoria) con filtro opzionale per nome immagine (
/FI) e azione Termina processo selezionato che eseguetaskkill /PID <pid> /Fe aggiorna automaticamente l'elenco. - Systeminfo — riepilogo di sistema (host, SO, hardware, memoria, tempo di avvio, ecc.) mostrato come tabella proprietà/valore.
- Wlan (netsh) — due modalità: Stato interfaccia (
netsh wlan show interfaces, tabella proprietà/valore con nome, stato, SSID connesso, segnale, ecc.) e Reti disponibili (netsh wlan show networks mode=bssid, tabella delle reti Wi-Fi visibili con SSID, segnale, banda, canale, autenticazione, crittografia e BSSID). - Robocopy — cartella di origine/destinazione (con selezione da
finestra di dialogo), pattern file, opzioni di base sempre visibili e
una sezione "Opzioni avanzate" collassabile (
-S -E /MIR /MOV /L /V, tentativi/Re attesa/Wcon valori predefiniti ridotti rispetto a quelli nativi per evitare attese eccessive, copia multithread/MT); tabella delle operazioni file/directory (tipo, dimensione, percorso) e riepilogo finale (directory, file e byte totali/copiati/ignorati/non riusciti). Le opzioni distruttive (/MIR,/MOV) sono chiaramente etichettate; è disponibile anche una modalità di sola simulazione (/L, nessuna modifica reale).
- Ping — host, numero pacchetti, modalità continua (
- Architettura modulare: ogni comando è un modulo indipendente
(
Modules/<Comando>/); aggiungerne uno nuovo non richiede modifiche al core dell'applicazione (vedi.github/copilot-instructions.mdper i dettagli).
Requisiti
- Windows
- .NET 10 SDK o superiore
Build ed esecuzione
dotnet build CMDgui/CMDgui.csproj dotnet run --project CMDgui/CMDgui.csproj
In alternativa, aprire CMDgui.slnx in Visual Studio.
Struttura del progetto
CMDgui.slnx # soluzione
CMDgui/
Program.cs # entry point
FormMain.cs # finestra principale (menu + tab)
Core/ # infrastruttura condivisa dei moduli comando
ICommandModule.cs
ICommandParser.cs
ShellProcessRunner.cs
CollapsibleOutputPanel.cs
LineChartControl.cs
CommandRegistry.cs
Modules/ # un modulo per comando (Ping, Tracert, Pathping, Ipconfig, Nslookup, Netstat, Arp, Route, Tasklist, Systeminfo, NetshWlan, Robocopy)
<Comando>/
<Comando>Module.cs
<Comando>Result.cs
<Comando>OutputParser.cs
<Comando>Control.cs
Assets/
AppIcon.ico # icona applicativa (eseguibile + FormMain)
Note
- I comandi vengono eseguiti tramite
cmd.exe /c <comando> <argomenti>, catturando stdout/stderr in modo asincrono. - Il parsing dell'output dipende dalla lingua del sistema operativo: i
parser riconoscono sia etichette italiane sia inglesi (es.
Trasmessi/Sent,Minimo/Minimum). - Non sono presenti al momento test automatici o pipeline CI.
Estendere l'app con un nuovo comando
- Creare una cartella
Modules/<Comando>/conModule,Result,OutputParsereControlseguendo il pattern dei moduli esistenti. - Registrare il nuovo modulo in
Core/CommandRegistry.cs.
Per maggiori dettagli architetturali vedere
.github/copilot-instructions.md.
Per il codice sorgente e gli altri progetti visita il profilo GitHub di rsodvd79 .