Newsgroup: it.comp.lang.visual-basic
Titolo: [?][W2K] Uso di API relative a Terminal Services

Salve a tutti,
Installando una applicazione da me sviluppata in VB6 su un server
Windows 2000 con le funzionalita' Terminal Server attivate, mi sono
accorto della seguente cosa : quando l'applicazione viene lanciata da
sessioni terminal diverse, la funzione GetComputerName restituisce
sempre e comunque il nome del server (abbastanza giustamente, visto che
la macchina su cui vengono fisicamente eseguite le istanze
dell'applicazione e' sempre la stessa). La documentazione Microsoft (in
particolare il Platform SDK) consiglia di utilizzare la funzione
WTSQuerySessionInformation, che permette di recuperare informazioni
sulla specifica sessione Terminal in corso (come il nome della macchina
client, ad esempio). L'esempio riportato pero' e' scritto in C, in
quanto la funzione restituisce alcuni puntatori a strutture dati : come
posso fare per implementarla in VB? esiste un metodo semplice oppure
devo creare un componente COM in C e poi richiamarlo da VB?
Grazie anticipate per l'attenzione,
-- 
Maurizio *Diaspar* Sani 
 
vana...@hotmail.com

 wrote in message
news:f7e5qskv9hco2gtrr...@4ax.com...



Inanzitutto grazie per la risposta.
la chiamata alla funzione richiesta e' questa :
BOOL WTSQuerySessionInformation(
  HANDLE hServer,
  DWORD SessionId,
  WTS_INFO_CLASS WTSInfoClass,
  LPTSTR *ppBuffer,
  DWORD *pBytesReturned
);
hServer e SessionId sono due parametri di input che nel mio caso
assumono i valori presenti in WTS_CURRENT_SERVER_HANDLE  e
WTS_CURRENT_SESSION (non ho ancora capito pero' dove reperire i valori
di queste costanti : forse nell'header C?). WSTInfoClass e' un parametro
di input che deve assumere uno dei valori del tipo enumerato
WTS_INFO_CLASS, che risulta cosi' definito :
typedef enum _WTS_INFO_CLASS {
    WTSInitialProgram,
    WTSApplicationName,
    WTSWorkingDirectory,
    WTSOEMId,
    WTSSessionId,
    WTSUserName,
    WTSWinStationName,
    WTSDomainName,
    WTSConnectState,
    WTSClientBuildNumber,
    WTSClientName,
    WTSClientDirectory,
    WTSClientProductId,
    WTSClientHardwareId,
    WTSClientAddress,
    WTSClientDisplay,
    WTSClientProtocolType
} WTS_INFO_CLASS;
*ppBuffer e *pBytesReturned sono due parametri di output : *ppBuffer e'
definito come "Pointer to a variable that receives a pointer to the
requested information" il che, se ho interpretato bene, significa che e'
un puntatore ad una variabile che contiene un altro puntatore verso
l'informazione cercata (i parametri indicati da WTSInfoClass infatti,
sono definiti tutti come puntatori). *pBytesReturned e' un puntatore ad
una variabile che contiene la lunghezza, in bytes, dei dati restituiti
da *ppBuffer. La funzione ritorna 0 se non ci sono stati errori,
altrimenti ritorna un valore diverso da 0 esaminabile con GetLastError.
Il parametro che vorrei esaminare e' WTSWinStationName, che e' definito
come puntatore diretto ad una stringa null-terminated. Questo dovrebbe
facilitare molto le cose visto che altri parametri, come
WTSClientDisplay, puntano invece a strutture dati, che pero' al momento
non mi interessano.
Tra parentesi ho la possibilita' di reperire un volume chiamato "Visual
Basic Programmer's Guide to the Win32 API" di Daniel Appleman che a
quanto ho capito contiene una parte dedicata alla conversione delle
chiamate API al formato VB : sai dirmi se ne vale la pena (considerando
anche il fatto che la situazione potrebbe ripetersi in futuro)?
 
Ciao,



La conversione delle chiamate e' una solenne vaccata... Il 90% delle
definizioni si riduce a ByVal Long, dell restante 10% in genere ByVal String
e' i due terzi, il resto e' Long.
Sono Long tutti i puntatori eccetto quelli a stringa che sono ByVal String,
tutto il resto e' ByVal Long.
Semplice no? :)
Il problema e' inserire i valori giusti e utilizzare correttamente i valori
di ritorno :)
Ciaotutti,
Alessandro

Se hai problemi posta che li risolviamo :)
Ho fatto un po' di prove e sono riuscito a convertire il tutto. Grazie
mille per l'aiuto, spero di poter contraccambiare presto!
