* * * *

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, 08:30:35 am

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

70 Visitatori, 2 Utenti
   

Autore Topic: [Risolto]Verifica esistenza di "\\tsclient"  (Letto 1274 volte)

bonmario

  • Hero Member
  • *****
  • Post: 1300
  • Karma: +10/-1
[Risolto]Verifica esistenza di "\\tsclient"
« il: Giugno 24, 2020, 09:14:28 am »
Ciao a tutti,
dovrei fare una funzioncina, che mi permetta di capire se sono fisicamente al lavoro, o se mi sono collegato al PC del lavoro tramite RDP.

Ho notato che, quando mi collego tramite RDP, se apro Esplora Risorse, o comunque un qualsiasi file manager, sotto "Desktop\Rete", c'è la voce "\\tsclient". Questa voce non c'è invece quando sono fisicamente al lavoro, e quindi non mi connetto tramite RDP.

Ho quindi fatto questaa funzioncina di test:
Codice: [Seleziona]
    if DirectoryExistsUTF8('\\tsclient') then begin
      ShowMessage('Esiste !!!');
    end else begin
      ShowMessage('No !!!');
    end;

che però, quando eseguo, mi va sempre nel ramo del "No".

Qualcuno mi sa dire come faccio a verificare l'esistenza o meno di "\\tsclient"?

Grazie in anticipo, Mario
« Ultima modifica: Giugno 24, 2020, 04:12:16 pm da bonmario »

xinyiman

  • Administrator
  • Hero Member
  • *****
  • Post: 3249
  • Karma: +12/-0
Re:Verifica esistenza di "\\tsclient"
« Risposta #1 il: Giugno 24, 2020, 10:34:51 am »
Hai già provato a giocare con il secondo parametro della funzione?

https://www.freepascal.org/docs-html/rtl/sysutils/directoryexists.html

Intendo il FollowLink. Con quello cambia qualcosa?

Diversamente se non trovi nulla posso consigliarti una soluzione alternativa. Scrivi una procedura che conta quanti file e cartelle sono contenute in quel percorso di rete. E gestisci le eccezioni da codice facendogli ritornare sempre quantità 0. Così se ti ritorna un valore superiore a 0 vuol dire che sei collegato da casa.

Qui la spiegazione per scorrere il contenuto delle directory: http://www.lazaruspascal.it/index.php?page=35

Qui la spiegazione per gestire le eccezioni: http://www.lazaruspascal.it/index.php?page=83
Ieri è passato, domani è futuro, oggi è un dono...

bonmario

  • Hero Member
  • *****
  • Post: 1300
  • Karma: +10/-1
Re:Verifica esistenza di "\\tsclient"
« Risposta #2 il: Giugno 24, 2020, 11:35:34 am »
Da quello che ho capito, quel percorso non viene visto come una directory, quindi non mi funziona.

Ho fatto un passo avanti grazie al codice postato in questa discussione:
https://stackoverflow.com/questions/11602599/enumerate-list-of-network-computers-and-shared-folders-in-a-tree-view

Questo codice, serve però a fare un elenco di tutte le directories di rete.
Per funzionare, funziona, ma ci mette 10 secondi per tirarmi fuori l'unica, che è appunto "\\tsclient".
Adesso, devo capire se riesco in qualche modo a velocizzarla ...

Ciao, Mario

xinyiman

  • Administrator
  • Hero Member
  • *****
  • Post: 3249
  • Karma: +12/-0
Re:Verifica esistenza di "\\tsclient"
« Risposta #3 il: Giugno 24, 2020, 11:37:38 am »
Da quello che ho capito, quel percorso non viene visto come una directory, quindi non mi funziona.

Appunto, se fai un conteggio del contenuto e la cartella è vuota vuol dire che non è collegata. Hai guardato i link che ti ho postato?
Ieri è passato, domani è futuro, oggi è un dono...

xinyiman

  • Administrator
  • Hero Member
  • *****
  • Post: 3249
  • Karma: +12/-0
Re:Verifica esistenza di "\\tsclient"
« Risposta #4 il: Giugno 24, 2020, 11:40:48 am »
Un'altra strada potrebbe essere creare un file BAT, che richiama il comando "net use" parametrizzato per recuperare la lista delle unità di rete mappate.
Quando il file BAT funziona come vuoi tu lo richiami come programma esterno e ne interpreti il contenuto.
Ieri è passato, domani è futuro, oggi è un dono...

bonmario

  • Hero Member
  • *****
  • Post: 1300
  • Karma: +10/-1
Re:Verifica esistenza di "\\tsclient"
« Risposta #5 il: Giugno 24, 2020, 12:25:17 pm »
Sì, ho guardato i link, ma nel mio caso specifico non mi servono.

Mi spiego meglio, anche perché mi sono reso conto di aver omesso una cosa fondamentale nel primo post.
Sia sul mio PC di casa, che su quello del lavoro c'è Windows 10.
Mi connetto tramite RDP, avendo impostato il fatto di condividere solo le "Unità USB collegate in seguito". Non sto qui a spiegare i motivi di questa scelta, perché ci vorrebbero ore !!!

Quindi, quando mi connetto, dalla macchina dell'ufficio, vedo solo "\\tsclient", che DirectoryExist non vede.
Se infilo una chiavetta USB nel mio pc di casa, dal pc del lavoro vedo "\\tsclient\E", che DirectoryExist riconosce benissimo come directory.

Il mio problema è appunto quello di vedere "\\tsclient" indipendentemente dal fatto che abbia inserito o meno una chiavetta USB nel mio PC di casa.

Tramite il link che ho postato prima, riesco a fare un elenco di tutte le directories remote, che nel mio caso è composto solo da "\\tsclient", ma per generare questo elenco, ci mette circa 10 secondi.

Ciao, Mario

bonmario

  • Hero Member
  • *****
  • Post: 1300
  • Karma: +10/-1
[Risolto]Re:Verifica esistenza di "\\tsclient"
« Risposta #6 il: Giugno 24, 2020, 04:12:02 pm »
Dopo vari passaggi, sono capitato su questa pagina:
https://stackoverflow.com/questions/973802/detecting-remote-desktop-connection

Questa la funzioncina che ho fatto:
Codice: [Seleziona]
function IsRemoteSession:Boolean;
begin
   if (GetVariabileAmbiente('SESSIONNAME').StartsWith('RDP-')) then begin
     Result:=True;
   end else begin
     Result:=False;
   end;
end;

La cosa bella è che, potendo leggere una variabile di ambiente, posso fare la stessa cosa anche all'interno di un file bat.
Se non fosse stato così, visto che mi serviva pure lì, avrei dovuto fare un programma Lazarus apposta, per poter interpretare la risposta da un file bat.

Ciao, Mario

 

Recenti

How To

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

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.