* * * *

Privacy Policy

Blog italiano

Clicca qui se vuoi andare al blog italiano su Lazarus e il pascal.

Forum ufficiale

Se non siete riusciti a reperire l'informazione che cercavate nei nostri articoli o sul nostro forum vi consiglio di visitare il
Forum ufficiale di Lazarus in lingua inglese.

Lazarus 1.0

Trascinare un file nel programma
DB concetti fondamentali e ZeosLib
Recuperare codice HTML da pagina web
Mandare mail con Lazarus
Stabilire il sistema operativo
Esempio lista in pascal
File INI
Codice di attivazione
Realizzare programmi multilingua
Lavorare con le directory
Utilizzare Unità esterne
TTreeView
TTreeview e Menu
Generare controlli RUN-TIME
LazReport, PDF ed immagini
Intercettare tasti premuti
Ampliare Lazarus
Lazarus e la crittografia
System Tray con Lazarus
UIB: Unified Interbase
Il file: questo sconosciuto
Conferma di chiusura di un applicazione
Liste e puntatori
Overload di funzioni
Funzioni a parametri variabili
Proprietà
Conversione numerica
TImage su Form e Panel
Indy gestiore server FTP lato Client
PopUpMenu sotto Pulsante (TSpeedButton)
Direttiva $macro
Toolbar
Evidenziare voci TreeView
Visualizzare un file Html esterno
StatusBar - aggirare l'errore variabile duplicata
Da DataSource a Excel
Le permutazioni
Brute force
Indy 10 - Invio email con allegati
La gestione degli errori in Lazarus
Pascal Script
Linux + Zeos + Firebird
Dataset virtuale
Overload di operatori
Lavorare con file in formato JSON con Lazarus
Zeos ... dietro le quinte (prima parte)
Disporre le finestre in un blocco unico (come Delphi)
Aspetto retrò (Cmd Line)
Lazarus 1.0
Come interfacciare periferica twain
Ubuntu - aggiornare free pascal e lazarus
fpcup: installazioni parallele di lazarus e fpc
Free Pascal e Lazarus sul Raspberry Pi
Cifratura: breve guida all'uso dell'algoritmo BlowFish con lazarus e free pascal.
Creare un server multithread
guida all'installazione di fpc trunk da subversion in linux gentoo
Indice
DB concetti fondamentali e connessioni standard
Advanced Record Syntax
DB concetti fondamentali e DBGrid
DB concetti fondamentali e TDBEdit, TDBMemo e TDBText
Advanced Record Syntax: un esempio pratico
Superclasse form base per programmi gestionali (e non)
Superclasse form base per programmi gestionali (e non) #2 - log, exception call stack, application toolbox
Superclasse form base per programmi gestionali (e non) #3 - traduzione delle form
Superclasse form base per programmi gestionali (e non) #4 - wait animation
Un dialog per la connessione al database:TfmSimpleDbConnectionDialog
Installare lazarus su mac osx sierra
immagine docker per lavorare con lazarus e free pascal
TDD o Test-Driven Development
Benvenuto! Effettua l'accesso oppure registrati.
Aprile 16, 2024, 11:03:08 pm

Inserisci il nome utente, la password e la durata della sessione.

49 Visitatori, 0 Utenti

Autore Topic: Solo Windows - Elenco reti o rete attuale  (Letto 1898 volte)

bonmario

  • Hero Member
  • *****
  • Post: 1300
  • Karma: +10/-1
Solo Windows - Elenco reti o rete attuale
« il: Dicembre 29, 2021, 01:20:31 pm »
Ciao a tutti,
ho dei programmi fatti da me, che uso sia al lavoro che a casa, che devono scaricare dei files da internet.
Quando sono al lavoro, per scaricare hanno bisogno dei dati del proxy, quando sono a casa no.
I miei programmi capiscono se sono a casa o al lavoro, reperendo il nome utente. In base a quello impostano o meno il proxy.

Fino a settimana scorsa, non c'era problema, perché al lavoro avevo il PC fisso, ed idem a casa mia.
Ora le cose sono cambiate ... a lavoro mi hanno dato il portatile, che userò anche da casa quando faccio smart working.

Sorge quindi il problema ...
L'unica cosa che mi viene in mente è questa: se riuscissi a fare un elenco delle reti Wi-Fi disponibili, capirei subito se sono a casa o fuori casa.
Il problema è che non so come fare !!!

Qualcuno mi sa aiutare?


Grazie, Mario

nomorelogic

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2870
  • Karma: +20/-4
Re:Solo Windows - Elenco reti o rete attuale
« Risposta #1 il: Dicembre 29, 2021, 02:03:47 pm »
L'output di ipconfig ti può aiutare credo
Imagination is more important than knowledge (A.Einstein)

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1266
  • Karma: +43/-0
  • Prima ascoltare, poi decidere
Re:Solo Windows - Elenco reti o rete attuale
« Risposta #2 il: Dicembre 29, 2021, 02:50:02 pm »
EDIT: Avevo risposto con una castronata .... perdonatemi ma sono ... vecchio ....  ;D
Risposta cancellata e riscritta.

Puoi usare il seguente codice, usando Indy10 (questo per Windows, però sostituendo IdStackWindows con IdStackLinux dovrebbe funzionare anche sotto Linux):

Indy10 lo puoi installare tramite l'ONLINE PACKAGE MANAGER di Lazarus.

Codice: [Seleziona]
Uses IdStackWindows, IdStack;

function GetLocalIpList(Name:string): TStringList;

var ElencoIP: TStringList;

function GetLocalIpList(Name: string): TStringList;
var Lista: TIdStackLocalAddressList;
    GProva: TIdStackWindows;
    temp: TIdStackLocalAddress;
begin
  result := TStringList.Create;
  try
    Lista := TIdStackLocalAddressList.Create;
    GProva := TIdStackWindows.Create;
    GProva.GetLocalAddressList(Lista);
    for  temp in Lista do
      if temp is TIdStackLocalAddressIPv4 then
        result.add((temp as TIdStackLocalAddressIPv4).IPAddress);
    GProva.Free;
    Lista.Free;
  except on e:exception do
     ;
  end;
end;

.....

   ElencoIP := GetLocalIpList('');

.....

In ElencoIP ti trovi n. elementi stringa con gli indirzzi IP assegnati (SOLO SE LE NIC SONO CONNESSE).

Se scorri gli elementi (IP formato string 'xxx.xxx.xxx.xxx.') dovresti capire dove sei ...

Io lo uso da anni senza problemi.

Ciao
« Ultima modifica: Dicembre 29, 2021, 02:55:22 pm da DragoRosso »
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

bonmario

  • Hero Member
  • *****
  • Post: 1300
  • Karma: +10/-1
Re:Solo Windows - Elenco reti o rete attuale
« Risposta #3 il: Dicembre 29, 2021, 03:10:39 pm »
Grazie a tutti e 2 per la risposta.
Tendo ad installare meno componenti aggiuntivi possibile, per cui per il momento provo con "ipconfig".

Se dovesse servire ad altri in futuro, nel frattempo avevo anche trovato questo comando:
Codice: [Seleziona]
netsh wlan show interfaces

Leggendone l'output, sulla riga SSD c'è  anche il nome della rete wifi a cui si è connessi.

Stasera a casa faccio qualche prova col cavo di rete inserito, con wifi acceso e spento, e provo sia questo comando che ipconfig, e vedo quale dei 2 mi da le risposte più efficaci.

Ciao, Mario

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1266
  • Karma: +43/-0
  • Prima ascoltare, poi decidere
Re:Solo Windows - Elenco reti o rete attuale
« Risposta #4 il: Dicembre 29, 2021, 03:40:40 pm »
Fai solo attenzione al fatto che l'output dei comandi "netsh" e "ipconfig" nel tempo sono cambiati (parlo per l'ambiente Windows, anche tra aggiornamenti).

Inoltre dipende dai settings che hai nella interfaccia di Windows (ad esempio ITA, ENG, .....).

Io faccio molto spesso programmi per l'estero, e ho dovuto ripiegare su routine standard perchè l'output delle shell è assolutamente volubile.

Ciao
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

bonmario

  • Hero Member
  • *****
  • Post: 1300
  • Karma: +10/-1
Re:Solo Windows - Elenco reti o rete attuale
« Risposta #5 il: Dicembre 29, 2021, 03:56:04 pm »
Grazie del consiglio, ma sono rimasto "scottato" in passato con estensioni non più manutenzionate, e se posso evito !!!
Io di solito, verifico che la prima riga sia come me la aspetto io, se non è così, evito di proseguire con l'analisi.
Tra l'altro, in questo caso specifico, mi serve proprio per capire se sta girando sul mio PC del lavoro, che uso solo io, quindi non rischio che qualcuno mi cambi la lingua, o cose del genere.

Grazie ancora, Mario

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1266
  • Karma: +43/-0
  • Prima ascoltare, poi decidere
Re:Solo Windows - Elenco reti o rete attuale
« Risposta #6 il: Dicembre 29, 2021, 04:49:12 pm »
Solo un'ultima nota, poi evito ancora di importunarti.

Hai ragione di porre un dubbio sulla manutenzione delle estensioni, questo problema esiste in tutti gli ambienti (non ti dico quanti di questi nei vari anni in Delphi ... e si paga pure  :-\ ).

Però alcuni di questi sono talmente "stato dell'arte" che è il loro mancato uso che è una "bestemmia"   :o (stò scherzando ovviamente).

Indy esiste dal 1993 (nei suoi vari sviluppi), ed è stato portato avanti sino ad oggi grazie ad un gruppo molto coeso di persone. E' di fatto lo standard per le comunicazioni Internet in Pascal (Internect Direct era il suo vero nome), ancorchè ci siano altri prodotti che svolgono quelle funzioni (magari non tutte) altrettanto efficientemente.
Nel gruppo di lavoro di Indy ci sono anche alcune persone di FPC.

E' talmente usato che sono convinto che se si profilasse anche la vaga idea che venga abbandonato, chiuso o altro ci sarebbe la fila per assicurarsi la sua manutenzione.

Ed è il suo uso che consente il continuo sviluppo, il mantenimento e la risoluzione dei bug.

Non è una critica a te, anche io come te non faccio uso di alcuni pacchetti che mi sembrano utili ma ho perplessità sul loro futuro. Ho colto solo l'occasione per porre una opinione su una questione che ritengo sia abbastanza sentita.

Usiamo i pacchetti di estensione se ci forniscono aiuto o delle soluzioni "standard", questo aiuta la community (in senso largo) a crescere a sprona gli sviluppatori a mantenere ed evolvere i "pacchetti" stessi.

Ciao ciao, approfitto per augurare un buon proseguimento a tutti

 


:) Ogni alba è un regalo, ogni tramonto è una conquista :)

bonmario

  • Hero Member
  • *****
  • Post: 1300
  • Karma: +10/-1
Re:Solo Windows - Elenco reti o rete attuale
« Risposta #7 il: Gennaio 19, 2022, 09:38:50 am »
Puoi usare il seguente codice, usando Indy10 (questo per Windows, però sostituendo IdStackWindows con IdStackLinux dovrebbe funzionare anche sotto Linux):

Ciao,
Stavo provando il tuo codice, ma mi da un errore in compilazione.
L'errore è questo:
Codice: [Seleziona]
BonMarIndy.pas(28,10) Error: Incompatible types: got "TCollectionItem" expected "TIdStackLocalAddress"

Lo da su questa riga:
Codice: [Seleziona]
for  temp in Lista do

Ho fatto una unit a parte, in cui c'è dentro solo il tuo codice e, oltre alle uses che hai messo tu, ho aggiunto "Classes"

EDIT: Sono riuscito a farlo andare ... ma ...
non fa quello che serve a me.
Probabilmente mi sono spiegato male, a me servirebbe un elenco delle reti wifi disponibili, come quello che esce su windows quando si clicca sul mappamondo che c'è di fianco all'orologio. Credo che il codice postato mi faccia l'elenco delle schede wifi presenti nel PC da cui si lancia.

Grazie, Mario
« Ultima modifica: Gennaio 19, 2022, 02:40:43 pm da bonmario »

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1266
  • Karma: +43/-0
  • Prima ascoltare, poi decidere
Re:Solo Windows - Elenco reti o rete attuale
« Risposta #8 il: Gennaio 19, 2022, 04:04:30 pm »
Probabilmente mi sono spiegato male, a me servirebbe un elenco delle reti wifi disponibili, come quello che esce su windows quando si clicca sul mappamondo che c'è di fianco all'orologio. Credo che il codice postato mi faccia l'elenco delle schede wifi presenti nel PC da cui si lancia.

Il codice che ti ho postato elenca TUTTI gli indirizzi IP assegnati al tuo PC. Dall'indirizzo IP assegnato, ad esempio dal 192.168.1.x al 192.168.10.x al 172.45.x.x potresti facilmente capire dove sei (ammesso che le reti a cui ti connetti ti forniscano un IP diverso dal quello di casa, come 192.168.12.x invece di 192.168.1.x)

L'elenco delle reti disponibili, siano esse WI-FI che altre, è sicuramente accessibile solo che almeno io non l'ho mai usato. Ho sempre verificato dove il mio  applicativo è o tramite IP assegnato (tutte le aziende hanno uno schema IP) o tramite accessibilità di una o più precise risorse.

Ciao

P.S.: vedo se riesco a buttarti giù il codice per rilevarti le reti wifi..
« Ultima modifica: Gennaio 19, 2022, 04:45:29 pm da DragoRosso »
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

bonmario

  • Hero Member
  • *****
  • Post: 1300
  • Karma: +10/-1
Re:Solo Windows - Elenco reti o rete attuale
« Risposta #9 il: Gennaio 19, 2022, 06:03:49 pm »
Hai ragione ...
Qui a casa iniziano tutti con 192.
Se non ricordo male, al lavoro iniziano con 172.

Domani verifico ... speriamo !

Domani devo fare qualche verifica: la mia idea iniziale era quella di usare il wifi al lavoro ed il cavo ethernet a casa. In quella casistica il comando netsh wlan show interfaces andava bene.
Oggi invece stavo pensando che forse mi conviene usare il cavo ethernet anche al lavoro, perché ha una resa nettamente migliore, ma mi è venuto il dubbio che in quel caso potrebbe non funzionare il comando netsh.
Domani o al massimo venerdì, faccio le verifiche del caso, e poi vedo come muovermi.

L'unica cosa che mi preoccupa un attimino nel codice che hai postato, è che usato sul mio PC di casa che ha però 10 anni, ci mette un paio di secondi a darmi il risultato, e sapere che gira all'avvio di parecchi programmi non mi piace molto. Al lavoro però abbiamo dei PC molto più recenti, quindi spero che sia più reattivo.

Grazie, Mario

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1266
  • Karma: +43/-0
  • Prima ascoltare, poi decidere
Re:Solo Windows - Elenco reti o rete attuale
« Risposta #10 il: Gennaio 19, 2022, 09:39:48 pm »
Preview in Lazarus ..... commento il sorgente e lo posto.  ;D

EDIT: aggiunto progetto.

Thanks to: @coolshou https://github.com/coolshou for WLan api wrappers.
« Ultima modifica: Gennaio 19, 2022, 09:55:07 pm da DragoRosso »
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

bonmario

  • Hero Member
  • *****
  • Post: 1300
  • Karma: +10/-1
Re:Solo Windows - Elenco reti o rete attuale
« Risposta #11 il: Gennaio 20, 2022, 08:13:23 am »
Grazie, appena ho tempo, tra oggi e domani gli do un occhio.

Per il momento, tengo in lista tra le possibili soluzioni, quella dell'istruzione "ping", testando dei vari valori restituiti quello dell'indirizzo IP.
A differenza dell'altro, sembra più veloce anche su un vecchio PC come il mio di casa.

Farò qualche prova, e poi vedrò quale mi conviene usare.

Grazie ancora, Mario

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1266
  • Karma: +43/-0
  • Prima ascoltare, poi decidere
Re:Solo Windows - Elenco reti o rete attuale
« Risposta #12 il: Gennaio 20, 2022, 06:10:52 pm »
Non ci avevo fatto molto caso, ma hai accennato ad un discorso di "tempo di esecuzione".

Devo farti una precisazione, che spero ti sarà utile: quando si ha a che fare con un qualsiasi risorsa di rete, qualunque essa sia, è da mettere in conto che ci posso essere dei ritardi nella esecuzione. In realtà non è l'esecuzione che ritarda, ma è semplicemente il tempo di attesa di accesso alla risorsa di rete, stabilito nella stragrande maggioranza delle volte da "norme" o modi d'uso consolidati.

Qualsiasi accesso ad una risorsa di rete (non proprio qualsiasi, diciamo un buon 99%) passa per lo stato di "connessione". Questo stato viene definito quando una ben determinata sequenza ha luogo. La sequenza include ad esempio i comandi ARP (interrogazione degli indirizzi IP di destinazione), i comandi DNS, i discovery ... etc ...

Per propria natura lo stack di rete di un sistema operativo esegue queste sequenze a tempo, in modo da mantenere sempre "reattivo" il sistema stesso e aggiornata la cache. Però, ad esempio, la prima volta che si accede ad una risorsa è normale che ci sia un tempo di ritardo, dovuto proprio all'esecuzione di tutte le sequenze per poter effettuare la connessione.

Potete verificarlo in modo banale proprio con un ping: fate un ping ad una risorsa a cui non avete avuto accesso prima (anche un indirizzo internet) e vedrete due effetti palesi:

1) il comando ping sarà "lento" a mostrare il primo risultato (alle volte secondi), nonostante il tempo indicato dal "risultato" non sia così alto;

2) il primo risultato mediamente ha un tempo più alto rispetto a quelli successivi.

Ciò è normale. E se ci sono di mezzo apparati radio potrebbe andare anche peggio.

Tutto questo per dirti che non devi aspettarti che magicamente un accesso ad una informazione di rete avvenga in modo istantaneo, ma che tale situazione potrebbe generare dei tempi di ritardo, e se questi avvengono nei programmmi, allora bisogna stare all'occhio.

Nel programma di test per la WLAN postato, ad esempio, c'è un passo dove viene eseguita (o meglio richiesta) la scansione. Lasciando perdere i dettagli tecnici sulla cosa, per avere quel risultato SI DEVONO ATTENDERE almeno 4 secondi prima di accedere ai risultati (elenco reti ad esempio), o bisognerebbe registrarsi ad una callback e attendere l'OK dalla funzione (che avverrà o più velocemente o dopo 4 secondi per timeout). Questo è deciso dal protocollo, imponendo ai dispositivi di rispondere entro questo tempo ad un "discovery" .... per farla breve.

Per un Bluetooth, questo tempo è di oltre 10 secondi ...

Quando io ho queste situazioni, prima di usare la funzione pongo il cursore nello stato di "calamaro"  :o ;D , ossia la rotellina che gira, riportandolo alla condizione normale quando la funzione ritorna. Ciò fà si che l'utente sia avvertito del blocco, rendendo il tutto anche più comprensibile all'utente stesso.

Ove ci sia consapevolezza che i ritardi possano essere importanti, meglio ancora proporre una "scritta visiva" tipo "operazione in corso, si prega di attendere".

Con la speranza di esserti stato di aiuto, ti saluto.
Ciao
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

bonmario

  • Hero Member
  • *****
  • Post: 1300
  • Karma: +10/-1
Re:Solo Windows - Elenco reti o rete attuale
« Risposta #13 il: Gennaio 21, 2022, 07:58:32 am »
Grazie !

Ciao, Mario

bonmario

  • Hero Member
  • *****
  • Post: 1300
  • Karma: +10/-1
Re:Solo Windows - Elenco reti o rete attuale
« Risposta #14 il: Marzo 17, 2022, 08:35:43 am »
Aggiungo questo, di cui hanno scritto un paio di giorni fa nel forum internazionale:
https://www.delphibasics.info/home/delphibasicsprojects/wifiscanner

Non trovo più la discussione dove ne parlavano ...

Ciao, Mario

 

Recenti

How To

Utenti
  • Utenti in totale: 785
  • Latest: gmax
Stats
  • Post in totale: 18769
  • Topic in totale: 2232
  • Online Today: 95
  • Online Ever: 900
  • (Gennaio 21, 2020, 08:17:49 pm)
Utenti Online
Users: 0
Guests: 49
Total: 49

Disclaimer:

Questo blog non rappresenta una testata giornalistica poiché viene aggiornato senza alcuna periodicità. Non può pertanto considerarsi un prodotto editoriale ai sensi della legge n. 62/2001.