Página 1 de 1

Cerrar windows desde Xailer

Publicado: Mié Oct 05, 2005 8:57 pm
por jasm.nospam
Hola,
¿Como puedo cerrar windows desde Xailer?
Saludos
Jose A. Suarez

Cerrar windows desde Xailer

Publicado: Mié Oct 05, 2005 9:08 pm
por jfgimenez
José Alfonso,
> ¿Como puedo cerrar windows desde Xailer?
Tendrás que usar la función ExitWindowsEx() del API, pero tienes que hacer
el wrapper o llamarla desde C. También puedes usar la función de Xailer
SHExitWindowsDlg() que muestra el diálogo del sistema de cerrar windows.
--
Un saludo,
José F. Giménez

Cerrar windows desde Xailer

Publicado: Jue Oct 06, 2005 9:41 am
por jasm.nospam
Jose,
He estado probando con SHExitWindowsDlg() y en Windows 2000, aunque saca
el diálogo de cerrar, no se cierra windows.
¿Hay que pasar algún parámetro? ¿Donde encuentro informacion? ¿Cual es
la correspondiente del API?
Saludos,
Jose A. Suarez
Jose F. Gimenez escribió:
> José Alfonso,
>
>
>>¿Como puedo cerrar windows desde Xailer?
>
>
> Tendrás que usar la función ExitWindowsEx() del API, pero tienes que hacer
> el wrapper o llamarla desde C. También puedes usar la función de Xailer
> SHExitWindowsDlg() que muestra el diálogo del sistema de cerrar windows.
>

Cerrar windows desde Xailer

Publicado: Jue Oct 06, 2005 11:38 am
por jfgimenez
José Alfonso,
> He estado probando con SHExitWindowsDlg() y en Windows 2000, aunque saca
> el diálogo de cerrar, no se cierra windows.
Acabo de probar tanto en XP Home como en W98 y funciona bien. Se muestra el
diálogo y si escojo apagar o reiniciar lo hace.
Quizás el problema sea que estás con un usuario que no tiene permisos.
> ¿Hay que pasar algún parámetro? ¿Donde encuentro informacion? ¿Cual es la
> correspondiente del API?
El único parámetro que acepta es el formulario padre, pero puedes no
pasarlo. La documentación está en xailerdocShellApiDlg.txt.
No hay ninguna función del API; se está ejecutando directamente el diálogo
que está en una DLL de windows.
--
Un saludo,
José F. Giménez

Cerrar windows desde Xailer

Publicado: Jue Oct 06, 2005 11:52 am
por jasm.nospam
Jose,
Jose F. Gimenez escribió:
> José Alfonso,
>
>
>>He estado probando con SHExitWindowsDlg() y en Windows 2000, aunque saca
>>el diálogo de cerrar, no se cierra windows.
>
>
> Acabo de probar tanto en XP Home como en W98 y funciona bien. Se muestra el
> diálogo y si escojo apagar o reiniciar lo hace.
>
> Quizás el problema sea que estás con un usuario que no tiene permisos.
Es el usuario administrador.
>
>
>
>>¿Hay que pasar algún parámetro? ¿Donde encuentro informacion? ¿Cual es la
>>correspondiente del API?
>
>
> El único parámetro que acepta es el formulario padre, pero puedes no
> pasarlo. La documentación está en xailerdocShellApiDlg.txt.
>
> No hay ninguna función del API; se está ejecutando directamente el diálogo
> que está en una DLL de windows.
>
Ok.
Saludos
Jose A. Suarez

Cerrar windows desde Xailer

Publicado: Jue Oct 06, 2005 11:53 am
por jlalin
Jose Alfonso,
aparte de lo que dice Jose F., también puedes utilizar las API nativas
InitiateSystemShutdown y InitiateSystemShutdownEx.
En caso de que falle SHExitWindowsDlg() puede deberse a que no tienes
suficientes privilegios para hacerlo o que alguna aplicación no responda
correctamente a la petición.
Saludos,
José Lalí­n

Cerrar windows desde Xailer

Publicado: Jue Oct 06, 2005 7:53 pm
por jasm.nospam
Jose,
En XP tampoco se cierra si hay algun programa abierto.
Saludos
Jose A. Suarez
José Lalí­n escribió:
>
> Jose Alfonso,
>
> aparte de lo que dice Jose F., también puedes utilizar las API nativas
> InitiateSystemShutdown y InitiateSystemShutdownEx.
>
> En caso de que falle SHExitWindowsDlg() puede deberse a que no tienes
> suficientes privilegios para hacerlo o que alguna aplicación no responda
> correctamente a la petición.
>
> Saludos,
> José Lalí­n
>

Cerrar windows desde Xailer

Publicado: Jue Oct 06, 2005 10:28 pm
por jlalin
Jose Alfonso,
> En XP tampoco se cierra si hay algun programa abierto.
Entiendo que si no hay ninguno entonces si funciona, ¿ no ?
Si tienes el Spy++ mira si la aplicación que tengas abierta está
procesando el mensaje WM_ENDSESSION.
Saludos,
José Lalí­n

Cerrar windows desde Xailer

Publicado: Jue Oct 06, 2005 10:38 pm
por jasm.nospam
Acabo de conseguir que funcione bien.
El tema esta que que no puedo controlar si el usuario ha pulsado
"cancelar" si no quiere cerrar Windows.
Hacia lo siguiente:
IF !SHExitWindowsDlg()
Application:Terminate()
END IF
Pues bien, eso no funciona correctamente. Si pulsa cancelar la
aplicacion Xailer se cierra, hasta aqui correcto, pero si dice "apagar",
"reiniciar" o "suspender" no funciona por que hay instrucciones del
programa Xailer sin procesarse.
Al final he tenido que montar un pequeño invento con un programa a parte
para que se pueda cerrar la maquina táctil cuando tiene la barra de
herramientar oculta. Adjunto programita.
Saludos
Jose A. Suarez
José Lalí­n escribió:
>
> Jose Alfonso,
>
>> En XP tampoco se cierra si hay algun programa abierto.
>
>
> Entiendo que si no hay ninguno entonces si funciona, ¿ no ?
>
> Si tienes el Spy++ mira si la aplicación que tengas abierta está
> procesando el mensaje WM_ENDSESSION.
>
> Saludos,
> José Lalí­n
--

Cerrar windows desde Xailer

Publicado: Jue Oct 06, 2005 10:48 pm
por jlalin
Jose Alfonso,
> Pues bien, eso no funciona correctamente. Si pulsa cancelar la
> aplicacion Xailer se cierra, hasta aqui correcto, pero si dice "apagar",
> "reiniciar" o "suspender" no funciona por que hay instrucciones del
> programa Xailer sin procesarse.
puedes probar a añadir este método en tu form principal para controlar
el cierre de la aplicación.
METHOD WMEndSession() CLASS ...
LogDebug( "voy a cerrar" )
RETURN 1
Si Xailer llama a este método correctamente supongo que desde ahí­
podrí­as hacer el :Terminate(). No lo he probado pero deberí­a funcionar.
Saludos,
José Lalí­n

Cerrar windows desde Xailer

Publicado: Vie Oct 07, 2005 9:32 am
por jfgimenez
José Alfonso,
> El tema esta que que no puedo controlar si el usuario ha pulsado
> "cancelar" si no quiere cerrar Windows.
>
> Hacia lo siguiente:
>
> IF !SHExitWindowsDlg()
> Application:Terminate()
> END IF
Esa función devuelve simplemente si se ha ejecutado correctamente, no si el
usuario ha escogido cerrar windows. Cuando yo lo probé por la mañana, la
llamé directamente y funcionó a la primera. Es más, había ejecutado el
programa de prueba desde el IDE y me lo cerró todo.
> Pues bien, eso no funciona correctamente. Si pulsa cancelar la
> aplicacion Xailer se cierra, hasta aqui correcto, pero si dice "apagar",
> "reiniciar" o "suspender" no funciona por que hay instrucciones del
> programa Xailer sin procesarse.
Eso no debería ser problema. El proceso de cierre de windows se produce de
forma asíncrona, es decir, que cuando el usuario escoge cerrar windows, la
función retorna y tu programa puede continuar; simultaneamente se inicia el
proceso de cierre, que como ya sabes puede llegar a durar hasta varios
minutos.
--
Un saludo,
José F. Giménez

Cerrar windows desde Xailer

Publicado: Vie Oct 07, 2005 10:06 am
por jasm.nospam
Jose,
Prueba el ejemplo que deje y dale cancelar....
El programa Xailer no se cierra.
Saludos
Jose A. Suarez
Jose F. Gimenez escribió:
> José Alfonso,
>
>
>>El tema esta que que no puedo controlar si el usuario ha pulsado
>>"cancelar" si no quiere cerrar Windows.
>>
>>Hacia lo siguiente:
>>
>>IF !SHExitWindowsDlg()
>> Application:Terminate()
>>END IF
>
>
> Esa función devuelve simplemente si se ha ejecutado correctamente, no si el
> usuario ha escogido cerrar windows. Cuando yo lo probé por la mañana, la
> llamé directamente y funcionó a la primera. Es más, habí­a ejecutado el
> programa de prueba desde el IDE y me lo cerró todo.
>
>
>
>>Pues bien, eso no funciona correctamente. Si pulsa cancelar la
>>aplicacion Xailer se cierra, hasta aqui correcto, pero si dice "apagar",
>>"reiniciar" o "suspender" no funciona por que hay instrucciones del
>>programa Xailer sin procesarse.
>
>
> Eso no deberí­a ser problema. El proceso de cierre de windows se produce de
> forma así­ncrona, es decir, que cuando el usuario escoge cerrar windows, la
> función retorna y tu programa puede continuar; simultaneamente se inicia el
> proceso de cierre, que como ya sabes puede llegar a durar hasta varios
> minutos.
>

Cerrar windows desde Xailer

Publicado: Vie Oct 07, 2005 11:23 am
por jfgimenez
José Alfonso,
acabo de hacer la prueba con el ejemplo que has puesto, pero además poniendo
lo que decías que no funcionaba:
IF !SHExitWindowsDlg()
Application:Terminate()
END IF
Cuando lo he ejecutado tenía corriendo:
- Outlook Express
- Ventana de consola (símbolo del sistema)
- Ventana del explorador de windows
- XEdit con un proyecto
- Xailer con el projecto de ejemplo abierto y ejecutándose
- El programa de ejemplo
Además de otros programas que se están ejecutando como servicios o en
background (2 cortafuegos, [email=seti@home]seti@home[/email], soft para CD-RW, etc.).
Pues bien... he seleccionado "Apagar" y se ha apagado correctamente. Hasta
me ha parecido que se ha apagado más rápido de lo habitual.
No sé que te puede estar pasando, pero quizás sea algo que tengas por ahí
rodando y que bloquee el proceso de apagado.
--
Un saludo,
José F. Giménez