2009-06-19 22 views
6

Ho un'applicazione che viene eseguita ogni ora su un computer Windows XP. Per funzionare correttamente, questa applicazione richiede che la sessione corrente sia sbloccata. Quindi mi chiedevo se c'era un modo per sapere se la sessione corrente di Windows è bloccata o meno con C# e .NET 3.5.Come determinare se la sessione corrente di Windows è bloccata o no?

UPDATE: l'applicazione non è in grado di ascoltare gli eventi SessionNotification. L'applicazione può essere avviata in qualsiasi momento e termina quando completata.

Grazie!

+0

Cosa fa che non può essere eseguito quando la sessione è bloccata? – jmucchiello

risposta

1

Questi sono non testati da me, ma sembrano interessanti. Darei loro un test, ma il mio Visual Studio sembra essere meno che felice con me al momento.

+0

Il collegamento eggheadcafe è 404'd – hometoast

+0

Il link della cache è 404'd – jnm2

0

Una volta ho usato la funzione GetForegroundWindow() per determinare se uno screen saver era in esecuzione. Se il valore restituito era NULL, allora lo screen saver (o, presumibilmente, una workstation bloccata) era attivo. Si noti che questo era agli albori di Windows NT, non è documentato per farlo, e non c'è alcuna garanzia che continuerà a fare la stessa cosa oggi.

Osservando il riferimento API Win32, è possibile utilizzare qualcosa come OpenInputDesktop() per ottenere il HDESK del desktop attualmente attivo. Se non riesci a ottenere un handle sul desktop o se è diverso dal tuo thread desktop, allora l'app è in esecuzione su un desktop che non è attivo (e la workstation è probabilmente in uno stato di salvaschermo o è bloccata). Non garantisce che questo metodo funzioni, ma potrebbe valere la pena di investigare.

0

Ho risposto a una domanda simile here. Penso che i metodi 2 & 3 possano essere migliorati per rilevare uno stato bloccato.

Problemi correlati