Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 18-10-2005
bustio bustio is offline
Miembro
 
Registrado: oct 2003
Posts: 231
Poder: 21
bustio Va por buen camino
Dudas con HDESK

HOla:
Por lo que veo, voy a necesitar todo un Guru en programacion, den Delphi y en las APIs a ver quien me resuelve mi problema.
Me lei lo que aparece en la ayuda de delphi sobre los objetos HDESK y la verdad es que no avance mucho.
Necesito alguien ducho con esas cosas qeu me pueda ayudar a entenderlos y a trabajar con ellos.....

Como puedo hacer que una aplicacion que levante un desktop aparezca en este nuevo desktop y en el que se pone detras???.. es decir, que despues de cerrar el desktop creado la aplicacion aparezca en el segundo?!?
__________________
Muchas Gracias...
Responder Con Cita
  #2  
Antiguo 18-10-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
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
  #3  
Antiguo 18-10-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por Lepe
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,
Sí, pero empiezo a dudar que usen la técnica de los objetos Desktop. Pero ya que posees una tarjeta NVidia capaz de hacer esto podrías probar la aplicación que adjunto para listar los escritorios creados y ver si NVidia realmente está haciendo esto.

// Saludos
Archivos Adjuntos
Tipo de Archivo: zip EnumDesktops.zip (1,7 KB, 64 visitas)
Responder Con Cita
  #4  
Antiguo 18-10-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Parece que Nvidia TNT2 Geforce de 32 MB, sigue otra técnica, los escritorios que crea Nvidia, tienen barra de tareas, iconos en el escritorio, y todos los programas que estan en el área de notificación de windows, es decir, la barra de tareas se comparte entre todos los escritorios; la imagen del escritorio, puede personalizarse en cada escritorio.

cuando se añade un escritorio, aparece por defecto una dll NvShell.dll, que supongo sirve de punto de entrada para crearlos.

La aplicación que has publicado enumera:
- LockDesktop (obviamente usandolo con tu MainApp)
- default
- Winlogon
- Disconnect

Ese "default", creía que tenía algo que ver con Nvidia, ya que en las opciones aparece un Perfil de escritorios "default", así que añadí un perfil nuevo con otro nombre y lo activé desde la Nvidia, pero no he obtenido resultados. el "default" de EnumDesktops, aparece tanto si está activado los escritorios de Nvidia como si no.

Para que te hagas una idea, la configuración de escritorios (Nview Desktop Manager) es un PageControl con 11 pestañas, y no hay un hueco libre para poner un TLabel .

Además es multiPantalla, es decir, teniendo varios monitores puedes asignar un escritorio a un monitor determinado. Así como enviar aplicaciones concretas a un determinado escritorio.

No sé que más añadir, si tienes alguna pregunta, dispara.

saludos

Yo he usado
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #5  
Antiguo 18-10-2005
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Cita:
Empezado por bustio
Como puedo hacer que una aplicacion que levante un desktop aparezca en este nuevo desktop y en el que se pone detras???.. es decir, que despues de cerrar el desktop creado la aplicacion aparezca en el segundo?!?
Solo de metido, aquí hay un ejemplo: http://www.clubdelphi.com/foros/show...05&postcount=6
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.

Última edición por delphi.com.ar fecha: 18-10-2005 a las 14:02:43. Razón: Agregué la cita
Responder Con Cita
  #6  
Antiguo 18-10-2005
bustio bustio is offline
Miembro
 
Registrado: oct 2003
Posts: 231
Poder: 21
bustio Va por buen camino
Hola LEPE y compannia:

Tengo que expresar mi profunda gratitud a todos los que se han tomado el trabajo de tratar de iluminar mi ignorancia. Todos los comentarios al respecto del hilo que sucribi hace unos dias ha demostrado que existen pesonas con muchos conocimientos y que estyan dispuestos a compartirlos; ha demostrado que existe la solidaridad y ha demostrado que este foro es lo maximo. A todos uds muchisimas gracias...

Ahora este es mas especifico, tu dijiste:

Cita:
Empezado por Lepe
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 .
Pues esto es precisamente lo que necesito: que la aplicacion se inicie en el desktop de windows, el default; y que una vez que se cree el desktop virtual pues que la aplicacion "se pase" al virtual..... y que cuando termine todas las cosas que deseo cierre el virtual y se vuelva a pasar al default. Acaso eso no se podra hacer??????? Yo espero que si, pues hay un programa, que se llama DoubleDesktop que hace algo parecido y ese es el efecto que yo deseo.
Una vez mas les piedo disculpas por mi ignorancia, y espero que una vez mas puedan ayudarme.
__________________
Muchas Gracias...
Responder Con Cita
  #7  
Antiguo 18-10-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Empieza por aqui:

Virtual Desktop 1.0
Will create new desktops for you and let you to switch between desks and windows quick and easy. This project consist in two applications: one NT service which manage desktops and another wich create desktops. Service requires 2MB ram. With Delphi sourcecode.

http://www.free-soft.ro/
http://virtual-desktop.sourceforge.net/

Y parece que el kit de la cuestion está aqui:
Código Delphi [-]
function TThreadDesktop.CreateDesktop(DesktopName: String): HDESK;
var Desk: HDESK;
begin
  Desk := Windows.CreateDesktop(PChar(DesktopName), nil, nil, 0, MAXIMUM_ALLOWED, nil);
  List_Desktops.Insert(0, DesktopName);
  result := Desk;
end;

funcionan igual que los escritorios de la nvidia. Delphi.com.ar y Roman no iban desencaminados

Instalado el programa por defecto en:

c:\Archivos de programa\Free-Soft\Virtual Desktop\

tienes un archivo llamado: Sources.zip\

PD: mira el Readme.html

saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #8  
Antiguo 18-10-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por Lepe
funcionan igual que los escritorios de la nvidia. Delphi.com.ar y Roman no iban desencaminados
Este es el punto en el que no estaría tan seguro. Ayer estuve revisando tanto el Virtual Desktop 1.0, como el ejemplo de Federico y el mío propio. Los tres, me parece, van en la misma dirección, pero ninguno de ellos- que me corrija Federico si no estoy en lo cierto, permite iniciar una aplicación y posteriormente pasarla a otro escritorio. Poner la barra de herramientas y los iconos del escritorio es, hasta donde recuerdo, sencillo; basta iniciar explorer.exe en el nuevo escritorio. Pero pasar aplicaciones de una escritorio a otro es lo que no he visto cómo.

En tu prueba con NVidia, sólo un escritorio me es extraño: el Disconnect, aunque dudo que sea el que da la funcionalidad. El WinLogon es el que aparece cuando oprimes Ctr-Alt-Del y aparece la ventana de login y Default es el escritorio de siempre.

En las búsquedas que hice ayer en los foros de Borland, sólo vi referencias a: no puedes pasar una aplicación a otro escritorio si ya tiene ventanas creadas.

// Saludos
Responder Con Cita
  #9  
Antiguo 18-10-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por bustio
Pues esto es precisamente lo que necesito: que la aplicacion se inicie en el desktop de windows, el default; y que una vez que se cree el desktop virtual pues que la aplicacion "se pase" al virtual..... y que cuando termine todas las cosas que deseo cierre el virtual y se vuelva a pasar al default.
Esta insistencia es la parte que no entiendo. ¿Por qué no, como en mi ejemplo, simplemente inicias una segunda aplicación desde la principal que, esa sí, corra en el escritorio alterno?

// Saludos
Responder Con Cita
  #10  
Antiguo 19-10-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Cita:
Empezado por Lepe
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.
Tambien puedes mandarle un parámetro para que el programa se abra en unas coordenadas de pantalla concretas, abra tal o cual ventana, etc, simulando el mismo estado que se encontraba en el otro escritorio.

¿es viable?

saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #11  
Antiguo 19-10-2005
bustio bustio is offline
Miembro
 
Registrado: oct 2003
Posts: 231
Poder: 21
bustio Va por buen camino
Respondiendo a la duda con HDESK

Hola a todos aquellos amigos que se han tomado el trabajo de responder a mi duda:

Me parece justo que explique el por que de HDESK y debido al interes que sucito. VEran.
Como loes contaba, estaba desarrollando una aplicacion que permitiera el registro de estudiantes a los labs de mi universidad. La cosa, es que cuando el Sist. Op. levantara, entre uno de los procesos que primero se ejecutara fuese esta aplicacion(Register la llame). Cuando Register se ejecutara no deberia permitir que el usuario pudiese hacer nada en la computadora hasta que este no entrara su numero de ID y fuese comprobado que ese ID existiera en la BD y fuese registrado. Ahi es donde viene lo de los desktops virtuales y por default, pues si Register al ejecutarse en el desktop default creara uno virtual y luego se pasara al virtual me quitaba la opcion de tener que hacer una aplicacion que creara el desktop virtual y mandara a ejecutar a Register. A la larga eso fue lo que hice, pues no hay manera de hacer este pase de un desktop a otro. Luego, una vez el usuario registrado la aplicacion debera minimizarse y ponerse al lado del reloj de Windows. Ahhi viene la segunda duda, de como evitar que el usuario pudiese cerrar mi Register desde el Task Manager, que dicho sea de paso, no he encontrado solucion al no ser inhabilitar el Task Manager, lo que me parece una chapuceria y no valida.. pero por el momento no hay otra. Si alguien tiene una sol. mejor pues con gusto agradeceria conocerla. CUando Register se minimise el usuario podra utilizar la PC y todos sus recursos de manera normal, y al terminar de trabajar el usuario debera cerrar su sesion desde el Register, donde en ese momento quedra registrado en la BD la hora de salida del usuario. Es por eso que me hacia falta pasar de un desktop a otro a Register: para que pueda registrarse y desregistrarse sin tebner que crear varias aplicaciones para ello.
Debido a que no se puede hacer esto, lo solucione de la siguiente manera:

Cree un aplicacion que sera la que se levantara cuando el Windows se inicie. Esta aplicacion es La MainApp de Roman. Esta aplicacion llama a Register y a otra que se encargara de cerrar la sesion, que por ahora no tiene nombre. MainApp crea el desktop virtual y llama a Register. Register permite entrar al usuario y cuando el tipo es almacenado en la BD genera un fichero con los datos del registro y se cierra, cerrando tambien el desktop virtual y regresando al default, donde ya estara la aplicacion que cerrara la sesion ejecutandose, dando la impresion de ser una misma aplicacion. Luego, al cerrar la sesion loque se hace es que le aplicacion encargada de este fin lee el fichero generado por Register, consulta la BD y pone la hora de salida, y se cierra la sesion de Windows tambien para garantizar que el proximo usuario pueda registrarse.

Y listo. No creo que tantas aplicaciones sean correctas, pero en vista de que no hay otra manera.... me parece acertada la idea. Y me gustaria que me criticaran lo que les expongo para saber si lo que hice es lo mejor.

Reiterarle las gracias otra vez por el interes que sucito mi duda y decirles qu le sestoy sumamente agradecidos.
__________________
Muchas Gracias...
Responder Con Cita
  #12  
Antiguo 19-10-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por bustio
Ahhi viene la segunda duda, de como evitar que el usuario pudiese cerrar mi Register desde el Task Manager, que dicho sea de paso, no he encontrado solucion al no ser inhabilitar el Task Manager, lo que me parece una chapuceria y no valida.
Por el contrario, a mi me parece que la chapucería es tratar de evitar que te cierren la aplicación desde el TaskManager.

El TaskManager es una herramienta que proporciona el sistema para manejo de tareas, entre las cuales está el cerrar aplicaciones. Es decisión del administrador dar o no acceso a tal herramienta y por ello mismo proporciona las formas de inhibirla.

Pero al margen de esto, te comento que eso de los escritorios yo lo comencé a estudiar cuando estaba programando el acceso a las computadoras en una sala de cómputo. La idea básica era la misma:

Presentar un cuadro de autentificación en donde se validan los datos contra una base propia y sólo si son correctos se da el acceso al sistema. Se registra además la hora de entrada y de salida e igualmente cuando el usuario termina se cierra la sesión de Windows.

Después de varias pruebas me convencí de que los objetos Desktop no eran el camino a seguir, o por lo menos, no eran realmente necesarios para el objetivo en cuestión.

En el hilo http://www.clubdelphi.com/foros/showthread.php?t=25992 podrás ver una explicación un poco más detallada de lo que hice. Hasta la fecha me ha funcionado muy bien. Si te decides por ese camino y tienes más dudas con gusto te puedo echar la mano o incluso proporcionarte el código fuente para que lo examines.

EDITO:

La descripción comienza en el mensaje 6 y continúa en el 8.

// Saludos

Última edición por roman fecha: 19-10-2005 a las 17:10:20.
Responder Con Cita
  #13  
Antiguo 21-10-2005
bustio bustio is offline
Miembro
 
Registrado: oct 2003
Posts: 231
Poder: 21
bustio Va por buen camino
Exactamente lo que dice Roman

Wao Roman: Ya veo que las cosas que pienso hacer no son en lo absoluto nuevas para nada. Acabo de ver el hilo que me enviaste en tu respuesta y exactamente eso que tu hiciste es lo que trate de hacer yo. Segun la forma en que lo tengo hecho hasta ahora me parece una buena solucion, ya en mi intervencion anterior la explique; pero la tuya me parece mas eficiente y mas tecnica...lo que conllevaria a que tendria que volver a empezar desde el principio. Pienso dejar mi aplicacion por el momento ejecutandose para probarla y si me gustaria ver los codigos que me propusiste. Si lo deseas tambien puedo enviarte a ti o a cualquier otro que se interese en realizar alguna aplicacion parecida y no atraviese por los mismos problemas que nosotros los codigos para que los vean y para que los instalen si lo desean tambien.
Basandome en este hilo:

http://www.clubdelphi.com/foros/showthread.php?t=25992

Asi, leyendo tu respuesta me surgen algunas dudas:
Evidentemente, y como habras visto ya, no estoy muy relacionado con el uso de las APIs de Windows, y que por demas.... creo que ese es un eror enorme mio. Ahora, todo el trabajo que me hablas en el registro, lo de insertar llaves y demas, no se podrian hacer desde una aplicacion "Instaladora", que su finalidad seria instalar mi Register.Exe en el sist op. y a la vez evitar que el mal trabajo sobre el registro nos traigan concecuencias peores? Como podria hacer esta aplicacion "instaladora"?
Me gustaria tambien que me explicaras mas detalladamente el funcionamiento de tu aplicacion; y bueno... tal vez de la mezcla entre la tuya y la mia surja algo muy bueno!!!!

El unico detalle que no he podido solucionar es el del Task Manager. No creo que inhabilitarlo sea una buena opcion por que a lo mejor alguna aplicacion se ejcuta mal, afecta todo el funcionamiento del sistema y no quedaria mas remedio que resetear el equipo.... sin contar los inconvenientes que esto trae.. como por ejemplo, un documento de word no salvado a tiempo. Es por eso que pense en dos soluciones:

1.- Hacer algo para que no se pueda cerrar este proceso en el Task Manager; de lo que no tengo ni idea de como hacerlo...
2.- Crear una aplicacion que pretenda simular al Task Manager, que muestre todos los procesos igual que el TM excepto mi aplicacion.. y que por supuesto, pueda cerrar a los demas procesos y mostrarse al presionar CTRL+Shift+Esc, o al presionar sobre el boton Task Manager cuando damos CTRL+Alt+Del... lo cual tampoco se como lograr que se active.

Espero que alguien pueda orientarme en este aspecto......(en especial Roman, qie se va mostrando como el Dios de los principiantes en este foro!)

NOTA:
En especial, me gustaria ver el disenno de la base de datos que utilizas para ver que tan bien esta la mia o no.. y en especial, el tratamiento respecto a lo de las sesiones de tu sistema... pues en eso me di unos cuantos golpes... referente a que si un estudiante le da por elvantarse de la PC y llega otro detras, pues continuara con la sesion del primero; y eso no deberia suceder. Me gustaria saber de que manera resolviste eso; pues no es logico suponer que todos haran lo que les corresponde.. aunque sea lo que se debe hacer.
__________________
Muchas Gracias...

Última edición por bustio fecha: 21-10-2005 a las 22:31:21. Razón: Mas informacion
Responder Con Cita
  #14  
Antiguo 22-10-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por bustio
Ahora, todo el trabajo que me hablas en el registro, lo de insertar llaves y demas, no se podrian hacer desde una aplicacion "Instaladora", que su finalidad seria instalar mi Register.Exe en el sist op. y a la vez evitar que el mal trabajo sobre el registro nos traigan concecuencias peores? Como podria hacer esta aplicacion "instaladora"?
Supongo que sí se puede. En principio sólo tienes que escribir esa entrada en el registro. El punto aquí es que tienes que hacer la instalación iniciando sesión como el usuario que va a usar la aplicación ya que HKCU es la clave para el usuario actual.

Yo comencé a hacer el instalador y por alguna razón que ahora no recuerdo nunca lo terminé. Había un problema pero no recuerdo si estaba relacionado con el registro.

Cita:
Empezado por bustio
Me gustaria tambien que me explicaras mas detalladamente el funcionamiento de tu aplicacion; y bueno... tal vez de la mezcla entre la tuya y la mia surja algo muy bueno!!!!
El funcionamiento es básicamnete el que ya describí. Hay algunos puntos a considerar pero que son más específicos:

Por ejemplo, en mi sistema había que impedir que un usuario usara dos pc al mismo tiempo.

Claro que al ingresar yo agrego una entrada en la tabla de sesiones de la base marcando la hora de entrada y al terminar de usar la pc marco la hora de salida.

En principio entonces, cuando un usuario intenta iniciar sesión, debo checar que no tenga una sesión ya activa (que el campo de hora de salida no sea null, por ejemplo).

El problema es que si por alguna causa la pc de un usuario se congela y hay que apagarla a la brava, nunca se marca la hora de salida y por ende no pude iniciar sesión en ninguna pc.

Para solventar eso lo que opté por hacer fue que la aplicación en cada pc manda una señal cada x segundos o minutos, según prefieras, actualizando con la hora actual un campo llamado ultimo_acceso.

Entonces, doy un intervalo máximo de espera. Si la diferencia entre la hora actual y la del último acceso es mayor que es intervalo, considero que la sesión ya terminó y le perimto iniciar una nueva.

Cita:
Empezado por bustio
El unico detalle que no he podido solucionar es el del Task Manager. No creo que inhabilitarlo sea una buena opcion por que a lo mejor alguna aplicacion se ejcuta mal, afecta todo el funcionamiento del sistema y no quedaria mas remedio que resetear el equipo.... sin contar los inconvenientes que esto trae.. como por ejemplo, un documento de word no salvado a tiempo.
Yo sigo sin ver el problema. Si algo falla y debes apagar el equipo pues simplemente guardas todo antes de hacerlo. Y si el equipo se quedó colgado, de cualquier forma el administrador de tareas no va a ser de gran ayuda.

Por otra parte, si buscas el taskman.exe en el explorador y das click derecho, verás que aparece la opción "Ejecutar como...' que te permite ejecutar la aplicación como otro usuario. No lo he probado pero imagino que si la intentas ejecutar como Administrador, que no tiene la restricción, lo podrás hacer.

Cita:
Empezado por bustio
si un estudiante le da por elvantarse de la PC y llega otro detras, pues continuara con la sesion del primero; y eso no deberia suceder. Me gustaria saber de que manera resolviste eso; pues no es logico suponer que todos haran lo que les corresponde.. aunque sea lo que se debe hacer.
Pues no lo resolví de ninguna manera, no soy mago. Si deben cerrar la sesión y no lo hacen ¿qué puede hacer una aplicación para impedir que el señorito se levante de la silla y se vaya?

Y si el nuevo usuario debe cerrar la sesión anterior en caso de que alguna esté abierta y no se le da la gana hacer, pues como no tengas un detector de huellas digitales o de iris, no veo la forma de impedirlo.

Por lo demás, habrá un afectado (quien no cerró la sesión) y un ganón que podrá hacer lo que se le antoje en nombre del primero.

A lo sumo podrías medir el tiempo de inactividad y cerrar automáticamente la sesión luego de un tiempo de espera.

En cuanto al diseño de las tablas, pues ya depende de las necesidades en particular. Como mínimo necesitas una tabla de usuarios y una de sesiones:

usuarios = (id, nombre, contraseña)
sesiones = (id, usuario_id, entrada, salida, ultimo_acceso

En mi caso también tengo una tabla de actividades

actividades = (id, sesion_id, texto)

donde se supone que el usuario anota las actividades realizadas durante la sesión. Muchos no ponen nada o escriben cualquier estupidez pero bueno, tampoco se supone que sea un sistema restrictivo.

// Saludos
Responder Con Cita
  #15  
Antiguo 22-10-2005
bustio bustio is offline
Miembro
 
Registrado: oct 2003
Posts: 231
Poder: 21
bustio Va por buen camino
Todo me parece perfecto...

Hola Roman:
Y gracias nuevamente. Al fin, y con tus sugerencias he podido casiq euterminar mi aplicacion y esta ya casi lista para entrar en funcionamiento.. cosa que ocurrira mannana en la mannana. Y a pesar de todo, me gustaria hecharle un vistazo a los fuentes de la aplicacion semejante que hiciste y que me dijiste arriba que con gusto me mostrarias, pues estoy pensando en una version superior segun se comporte esta de la que te he estado hablando por mas de una semana.

Muchisimas gracias otra vez a ti a este maravilloso foro....
__________________
Muchas Gracias...
Responder Con Cita
Respuesta



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 15:03:41.


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