El envío de un mensaje a una aplicación iniciada por sesión de usuario a diferentes ventanas

StackOverflow https://stackoverflow.com/questions/1673507

  •  16-09-2019
  •  | 
  •  

Pregunta

Una aplicación de escritorio (hecho en Delphi) es iniciado por el Usuario A. Vamos a llamarlo "Instancia A".

El usuario A realiza una "cambio de usuario" y los registros de usuario B en.

El usuario B ejecuta la misma aplicación. Digamos que es "Instancia B"

Lo que quiero ahora, es una forma de que la Instancia B para enviar mensajes a una Instancia.

He intentado lo siguiente: Instancia A escribe su mango en un archivo, por lo Instancia B puede abrir ese archivo, leer el mango, y lo utilizan para enviar un mensaje a Instancia A, pero no funciona - tal vez por razones de seguridad de Windows no da un solo acceso de los usuarios a los mangos de los procesos de funcionamiento de otro usuario ...

Una forma "malo" para hacer esto sería tener un cheque Instancia un archivo o registro de ubicación en particular cada pocos segundos, por lo Instancia B puede escribir algo allí y Instancia A lo obtendrá ... pero esto es obviamente una gravosa y solución unelegant.

En cambio, lo que necesito es una forma de Instancia B del usuario B para enviar un mensaje inofensivo para Instancia A de usuario A, después de lo cual Instancia Un despierta y decide qué acerca de ello.

Gracias por cualquier sugerencia!

¿Fue útil?

Solución

No se puede utilizar SendMessage, PostMessage y funciones similares, ya instancias de la aplicación de diferentes sesiones de usuario no están disponibles para su aplicación.

Lo que se puede utilizar son las canalizaciones con nombre, semáforos, etc., en el espacio de nombres global (es decir, tener nombres con el prefijo "Global \"). A continuación, cree un hilo separado en su aplicación que, por ejemplo, dormir hasta que una "señal" de uno de estos llega y notificar a la ventana principal en consecuencia.

Para ahorrar recursos, utilice WTSRegisterSessionNotification para ser notificado cuando se produce el interruptor de sesión y crear el hilo sólo en ese punto.

Más información aquí: http://support.microsoft.com/kb/310153 y aquí: http://msdn.microsoft.com/en-us/library/ms997634. aspx

Otros consejos

No es esto esencialmente el mismo problema que tener un servicio que se ejecuta bajo Windows cuenta del sistema y tener una instancia de usuario de alguna aplicación comunicarse con él? Entonces tal vez debería de google para la comunicación entre procesos (canalizaciones con nombre, etc.).

También puede utilizar UDP o TCP / IP, pero supongo que el uso de canalizaciones con nombre es mejor para la comunicación "local" (aunque nunca he hecho realmente).

aquí sobre canalizaciones con nombre en MSDN.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top