Italian community of Lazarus and Free Pascal

Programmazione => Generale => Topic aperto da: bonmario - Giugno 24, 2020, 09:14:28 am

Titolo: [Risolto]Verifica esistenza di "\\tsclient"
Inserito da: bonmario - 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
Titolo: Re:Verifica esistenza di "\\tsclient"
Inserito da: xinyiman - 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
Titolo: Re:Verifica esistenza di "\\tsclient"
Inserito da: bonmario - 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
Titolo: Re:Verifica esistenza di "\\tsclient"
Inserito da: xinyiman - 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?
Titolo: Re:Verifica esistenza di "\\tsclient"
Inserito da: xinyiman - 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.
Titolo: Re:Verifica esistenza di "\\tsclient"
Inserito da: bonmario - 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
Titolo: [Risolto]Re:Verifica esistenza di "\\tsclient"
Inserito da: bonmario - 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