Red de conocimiento informático - Espacio del host - Quiero usar VC para cambiar rápidamente de programa de usuario, que tiene el mismo efecto que win L..., ¡por favor dame algún consejo!

Quiero usar VC para cambiar rápidamente de programa de usuario, que tiene el mismo efecto que win L..., ¡por favor dame algún consejo!

Código fuente 1: Código fuente

/code/downcode.asp?id=2067

Programas relacionados con la función de cambio rápido de usuario en XP

No No sé ustedes ¿Ha notado que Windows XP ha agregado una función de cambio rápido de usuario? Le permite cambiar entre usuarios sin cerrar sesión

y cada usuario tiene su propio perfil y escritorio independientes. Esto significa que cuando cambia a otro usuario (es decir, inicia sesión con una cuenta diferente), todos los programas ejecutados por el usuario anterior siguen ejecutándose y no cerrarán su sesión. Esto crea nuevos problemas para nuestros desarrolladores. Por ejemplo, si su aplicación proporciona una funcionalidad que provoca errores cuando la ejecutan varios usuarios al mismo tiempo, debe agregar código a su aplicación para detectar esta situación y reaccionar en consecuencia.

1. Detectar si un usuario está ejecutando la aplicación

Usualmente usamos el método mutex para lograr que solo se esté ejecutando una instancia, y usar CreateMutex() para generar un mutex es el método. método predeterminado. Es decir, el alcance de mutex

no es global, solo se puede usar en una sesión y mutex no es global.

El alcance de utex no es global, solo se puede usar en una sesión y no se puede usar para cambiar de usuario entre varias sesiones, por lo que no puede

detectar un ejemplo que ya se esté ejecutando. . La solución es simple, simplemente agregue la palabra clave "Global" al nombre del mutex cuando use CreateMutex().

m_hMutexAppRunning = CreateMutex(NULL, FALSE, "Global\Es/XPSwitchUserApp");

2. Monitorear si el usuario está cambiando de usuario

A veces necesitamos para detectar El usuario está cambiando el comportamiento del usuario para que nuestro programa pueda manejarlo adecuadamente. Por ejemplo, es posible que necesitemos liberar algunos recursos cuando finalice la sesión del usuario activo y recuperarlos cuando el usuario vuelva a ingresar a la sesión activa. Afortunadamente, Microsoft proporciona una forma para que nuestros programas reciban mensajes de notificación de sesión. Podemos registrarnos para recibir el mensaje WM_WTSSESSION_CHANGE llamando a la función WTSRegisterSessionNotification.

Estos mensajes incluyen principalmente:

WTS_CONSOLE_CONNECT

WTS_CONSOLE_DISCONNECT

WTS_REMOTE_CONNECT

WTS_REMOTE_DISCONNECT

Se ha cambiado el ID de la sesión.

cambiar(mensaje)

{

caso WM_WTSSESSION_CHANGE:

{

cambiar(wParam)

{

caso WTS_CONSOLE_CONNECT:

MessageBox("WTS_CONSOLE_CONNECT", "Esmile", MB_OK

descanso

<); p> caso WTS_CONSOLE_DISCONNECT:

MessageBox("WTS_CONSOLE_DISCONNECT",

"Esmile", MB_OK

descanso

caso WTS_SESSION_LOCK); :

MessageBox("WTS_SESSION _LOCK",

"Esmile", MB_OK

break

case WTS_SESSION_UNLOCK:

p>

p>

MessageBox("WTS_SESSION_UNLOCK",

"Esmile", MB _OK

break

caso WTS_SESSION_LOGOFF:

MessageBox("WTS_SESSION_LOGOFF",

"Esmile", MB_OK

descanso

caso WTS_SESSION_LOGON:

MessageBox( "WTS_SESSION_LOGON",

"Esmile", MB_OK

descanso

Valor predeterminado:

descanso;

}

}

descanso

Valor predeterminado:

descanso

}

De esta forma podemos procesar los mensajes que nos interesan y conseguir nuestros objetivos.

3. Notas

Se debe llamar a WTSUnRegisterSessionNotification cada vez que se llama a WTSRegisterSessionNotification,

es decir, este mensaje de registro de notificación se publica cuando se cierra el programa.

WTSRegisterSessionNotification y WTSUnegisterSessionNotification requieren los dos archivos de encabezado Wtsapi32.h y

Wtsapi32.lib. Además, agregue la siguiente declaración #define antes de la declaración que contiene windows.h

#define _WIN32_WINNT 0x0501

El código fuente adjunto a este artículo está compilado en win2000pro y el programa puede solo se puede ejecutar en Windows Ejecutar en XP, porque los sistemas que no son XP no tienen WTSAPI32.dll.

WTSAPI32.dll.