Ver Mensaje Individual
  #2  
Antiguo 18-10-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Reputación: 29
Lepe Va por buen camino
Partiendo de las 2 aplicaciones hechas por roman, he dado mis primeros pasos con HDesk.

En MainApp, justo donde crea el proceso lockApp, añade esta linea:
Código Delphi [-]
  CreateProcess('MainApp.exe', nil, nil, nil, false, 
                            0, nil, nil, StartInfo, ProcInfo);
Con esto tienes lo que querías, el concepto global sería:
- Ejecutas MainApp en el escritorio principal (el de windows de siempre).
- en el FormCreate, se crea el escritorio virtual.
- al pulsar el boton LockDesktop, MainApp se queda en el escritorio principal, mientras crea 2 procesos más.
  1. Un MainApp en el escritorio virtual
  2. Un LockApp en el escritorio virtual.
- Y cambia de Escritorio al virtual.
Pero en el escritorio principal, también está MainApp, solo que no puedes verlo .

Si has seguido mis pasos hasta ahora, te encontrarás en el escritorio virtual con 2 aplicaciones, MainApp y LockApp, para salir correctamente: primero tienes que pulsar Exit en MainApp (para que se cierre ese programa), y despues pulsas OK en el LockApp.

¿Por qué?
Supon o mejor sigue estos pasos... verás que bonito
- Ejecutas MainApp en el escritorio principal (el de windows de siempre).
- en el FormCreate, se crea el escritorio virtual.
- al pulsar el botonLockDesktop, MainApp se queda en el escritorio principal, mientras crea 2 procesos más.
  1. Un MainApp en el escritorio virtual
  2. Un LockApp en el escritorio virtual.
- Y cambia de Escritorio al virtual.
- Ahora pulsas en OK en el LockApp.
- Sales del escritorio virtual y vuelves al principal.
- Estas en el principal, con el MainApp, ahora pulsa de nuevo LockDesktop.
- Cambias al escritorio virtual y encontrarás:
  1. Un MainApp en el escritorio virtual.
  2. Otro MainApp en el escritorio virtual, el de antes que no cerraste!!!
  3. Un LockApp en el escritorio virtual.
Para salir correctamente y no dejar ninguna aplicación corriendo en escritorios virtuales, tienes que cerrar los 2 MainApp, y despues el LockApp.

Si has entendido todas mis divagaciones , pensarás.... Bueno, y ¿por qué crear un MainApp con createProcess? ¿no podría simplemente cambiar el MainApp al escritorio virtual?, pues a primera vista no. He visto que existe la rutina SetThreadDesktop, que permite cambiar a un proceso de escritorio, pero si ese proceso tiene alguna ventana o algún Hook, no es posible moverlo de escritorio, y claro, nuestro programa MainApp tiene una ventana .

Se podrá hacer, ya que los controladores de Nvidia, permite crear escritorios virtuales y mover las aplicaciones (ventanas) de un escritorio a otro, por tanto, seguro que puede engañarse a windows para hacer lo que queramos, aunque no me preguntes como

El tema que inicialmente planteabas, quedaría resulto con añadir esa linea que digo, pero no puedo saber cuan complejo es tu programa. Lo que sí veo es que CreateProcess tiene un parámetro "CommandLine", por tanto, puedes preparar una linea de comandos en tu MainApp. Al crearlo con CreateProcess le envias un parámetro para que ella misma sepa que se está ejecutando en otro escritorio virtual, y por ejemplo, no permita cambiar de escritorio sin antes cerrarse.

Buff que lio, ni yo mismo me entiendo, ¿será la resaca de anoche?
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita