Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Coloboración Paypal con ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #2  
Antiguo 18-10-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 31
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
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 12:34:25.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi