In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.

Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.

Cerrar windows desde Xailer

Foro de Xailer profesional en español
Responder
jasm.nospam
Mensajes: 203
Registrado: Vie Abr 01, 2005 9:05 am

Cerrar windows desde Xailer

Mensaje por jasm.nospam »

Hola,
¿Como puedo cerrar windows desde Xailer?
Saludos
Jose A. Suarez
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5718
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

Cerrar windows desde Xailer

Mensaje 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
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
jasm.nospam
Mensajes: 203
Registrado: Vie Abr 01, 2005 9:05 am

Cerrar windows desde Xailer

Mensaje 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.
>
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5718
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

Cerrar windows desde Xailer

Mensaje 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
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
jasm.nospam
Mensajes: 203
Registrado: Vie Abr 01, 2005 9:05 am

Cerrar windows desde Xailer

Mensaje 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
jlalin
Mensajes: 926
Registrado: Sab Dic 25, 2010 11:10 pm

Cerrar windows desde Xailer

Mensaje 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
jasm.nospam
Mensajes: 203
Registrado: Vie Abr 01, 2005 9:05 am

Cerrar windows desde Xailer

Mensaje 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
>
jlalin
Mensajes: 926
Registrado: Sab Dic 25, 2010 11:10 pm

Cerrar windows desde Xailer

Mensaje 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
jasm.nospam
Mensajes: 203
Registrado: Vie Abr 01, 2005 9:05 am

Cerrar windows desde Xailer

Mensaje 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
--
jlalin
Mensajes: 926
Registrado: Sab Dic 25, 2010 11:10 pm

Cerrar windows desde Xailer

Mensaje 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
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5718
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

Cerrar windows desde Xailer

Mensaje 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
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
jasm.nospam
Mensajes: 203
Registrado: Vie Abr 01, 2005 9:05 am

Cerrar windows desde Xailer

Mensaje 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.
>
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5718
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

Cerrar windows desde Xailer

Mensaje 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
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
Responder