Scopri il nome utente dell’utente corrente – quando più utenti sono connessi

“Utente A” è connesso La mia applicazione riconosce Environment.Username come “Utente A”

Ora in Windows, faccio clic su Cambia utente … “Utente B” accede

I processi di “Utente A” sono ancora in esecuzione L’applicazione eseguita da “Utente A” dice ancora Environment.Username è “Utente A” Voglio che l’applicazione riconosca che l’utente attualmente connesso (utente attualmente attivo) è “Utente B”

Come faccio a fare questo?

Non esiste l’utente attualmente attivo poiché possono esserne più di uno (Terminal server)

È ansible utilizzare GetSystemMetrics (SM_REMOTESESSION) per verificare se si tratta di una sessione “locale” e WTSGetActiveConsoleSessionId per ottenere l’ID di sessione della sessione della console (Utente attualmente connesso mentre lo si chiama) È ansible utilizzare WTSRegisterSessionNotification per ricevere una notifica quando questo cambia. ProcessIdToSessionId (GetCurrentProcess (), …) ti mostrerà l’ID di sessione in cui si trova il tuo processo. Infine, WTSQuerySessionInformation () ti darà informazioni su una sessione specifica.

Sicuramente non troverai le informazioni a quel livello – vuoi andare alle API di livello inferiore che enuemrano gli utenti connessi (di cui ce ne possono essere più di uno).

Qualcosa come Come scrivere un’applicazione che supporta la funzionalità Cambio rapido utente utilizzando Visual Basic .NET o Visual Basic 2005 in Windows XP ?

Vedi anche Architecture of Fast User Switching