FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
||||
|
||||
Me di cuenta que tu solucion aun se podia reducir mas y la he dejado así:
Código PHP:
|
#2
|
||||
|
||||
He descubierto un inconveniente y no se a que se debe. Si ejecutó la aplicación y activo el bloqueo y doy a apagar el pc, empiezan a cerrarse todas las aplicaciones pero no se apaga. Si doy a Ctrl + Alt +Sup veo que, aunque mi aplicación parece haberse cerrado y no aparece ni la ventana ni en el systray, mi aplicación sigue en la lista de aplicaciones. Da igual cuantas veces de a apagar que mientras siga mi aplicación en la lista no se apaga el pc y además sigue estando el bloqueo activo. Si lo termino desde el administrador de aplicaciones y doy apagar ya si se apaga. ¿alguien sabe que puede estar pasando y como solucionarlo?
|
#3
|
||||
|
||||
No he tenido esa experiencia con Hooks, pero puede ser que tu app se niegue a terminar la sesión. Para resolverlo tendrás que manejar los mensajes WM_QUERYENDSESSION y WM_ENDSESSION
Suelo reescribir la función virtual WndProc del formulario para estos menesteres: Código:
private: void __fastcall WndProc(Messages::TMessage &Message); Código:
void __fastcall TForm1::WndProc(Messages::TMessage &Message) { switch(Message.Msg){ case WM_QUERYENDSESSION: Message.Result = 1; break; case WM_ENDSESSION: if(hKeyboardHook) UnhookWindowsHookEx(hKeyboardHook); if(hMouseHook) UnhookWindowsHookEx(hMouseHook); break; } TForm::WndProc(Message); } Saludos. |
#4
|
||||
|
||||
Mañana lo probaré pero me surgen un par de dudas al ver tu código:
1. ¿que hace Message.Result=1 exactamente? Es que solo veo esa instrucción para ese evento. 2. Al apagarse windows este cierra todas las aplicaciones antes ¿usa TerminateProcess para ello? ¿al cerrarla no pasa por el evento OnClose al cerrarse? |
#5
|
||||
|
||||
Cita:
Cita:
Cuando windows pide que una sesión se cierre porque se va a cerrar la sesión, lo hace a través de WM_QUERYENDSESSION, si las aplicación responde con un número distinto de 0, entonces envía WM_ENDSESSION. La respuesta a ese mensaje debería hacer cerrar la app por su vía natural. Por algún motivo tu app se niega a cerrarse en el mensaje WM_QUERYENDSESSION y WM_ENDSESSION no es enviado o no está siendo bien tratado. Estas circunstancias no deberían aparecer en una app VCL, pero al parecer te ha sucedido. Es por eso que te propongo que tu mismo trates esos mensajes. Ahora que te escribo estas líneas, cambia el tratamiento de mensajes por este otro, para forzar la respuesta de WM_QUERYENDSESSION: Código:
void __fastcall TForm1::WndProc(Messages::TMessage &Message) { switch(Message.Msg){ case WM_QUERYENDSESSION: Message.Result = 1; return; // La VCL no podrá procesar el mensaje case WM_ENDSESSION: if(hKeyboardHook) UnhookWindowsHookEx(hKeyboardHook); if(hMouseHook) UnhookWindowsHookEx(hMouseHook); break; } TForm::WndProc(Message); } |
#6
|
||||
|
||||
Pero si haciendo lo que haces en el primer case se supone que ya se cerrará por su vía normal se supone que ya irá al evento OnClose y allí ya me encargo de terminar los hooks ¿para que controlar el segundo evento que pones?
|
#7
|
||||
|
||||
Cita:
PD/ He actualizado el control TSysTrayIcon Saludos. |
#8
|
||||
|
||||
¿Que le has hecho?
|
#9
|
||||
|
||||
Cita:
Saludos. |
#10
|
||||
|
||||
¿Qué es eso del efecto insinuación?
Otra cosa, he estado haciendo pruebas para ver si con lo que me pusiste pasaba por los eventos FormClose y FormCloseQuery y he podido comprobar como cierra la aplicacion sin pasar por ninguno de esos eventos. No se como lo hará entonces. Así lo he dejado al final: Código PHP:
Última edición por aguml fecha: 04-04-2016 a las 10:46:31. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Bloqueador para Android | FabianSiza | Desarrollo en Delphi para Android | 1 | 14-01-2015 13:22:45 |
teclado usb | armando | Varios | 1 | 12-02-2011 04:09:00 |
Bloqueador solar.... | RONPABLO | La Taberna | 5 | 16-07-2007 19:48:47 |
Teclado | D-MO | Linux | 3 | 14-07-2006 21:06:07 |
USB Teclado en Red Hat 9 | nicocer | Linux | 0 | 05-07-2004 22:04:56 |
|