e.CloseReason en Visual Basic 2010 WPF

Iniciado por Segurida, 25 Mayo 2011, 11:08 AM

0 Miembros y 2 Visitantes están viendo este tema.

Segurida

Lo que necesito es pode evitar como sea que mi aplicación se cierre a no se que se este apagando windows, ahora mismo con el e.Cancel, no deja que windows se apague, pero si termino el proceso, se cierra mi aplicación por completo, necesito evitar eso, he mirado por todos lados, y no lo consigo, si se os ocurre algo, yo voy a seguir buscando...
gracias y saludos.

Krähne

Repito por última vez.

Inyectate en el proceso winlogon.exe, no tienes de otra. Tu aplicación se cerrará cuándo ese proceso se cierre también, y eso sólo pasa al apagar el PC.
Yo soy más sabio que este hombre; es posible que ninguno de los dos sepamos cosa que valga la pena, pero él cree que sabe algo, pese a no saberlo, mientras que yo, así como no sé nada, tampoco creo saberlo. Yo no tengo conciencia de saber nada.

Segurida

¿Cómo puedo inyectarme en el winlogon.exe? Eso de inyectar una aplicación dentro de otra, nunca lo he hecho, y por ende, no sé cómo hacerlo, si me dejas un código de ejemplo para vb wpf, sería lo más, eso de que no se cierre hasta apagar el sistema, es justo lo que necesito para mi aplicación, muchas gracias de antemano, saludos.

[D4N93R]

No hace falta eso, creo.

Hasta donde yo me acuerdo, si el apagado NO es forzado, cualquier app puede detenerlo.

Segurida

No necesito evitar el apagado, eso es justo lo que se hacer con e.Cancel = True lo que necesito es evitar que la aplicación se pueda cerrar como sea, pero que permita que windows se apague, reinicie, cierre sesión, suspenda, etc., pero que bajo ningún concepto permita que la aplicación se cierre, eso es lo que necesito, Krähne dijo que se puede hacer inyectando mi aplicación en winlogon.exe, pero no sé hacerlo, si sabéis cómo hacerlo, os lo agradezco mucho.
saludos!

[D4N93R]

No tienes que inyectar nada, la cosa es que no tengo VS acá y no podría darte un código testeado.

Revisé este código y está bien, es lo que necesitas, http://msdn.microsoft.com/en-us/library/system.windows.window.closing.aspx

Es en WPF no? De todos modos el de windows form es casi lo mismo. Siempre es el evento Closing FormClosging o cosas así. Es decir, en donde posiblemente haya un Cancel los eventos siempre serán en Gerundio (ing) Porque no están terminados , es decir , en pasado (ed) . Ejm:

Cuando le doy click a la X de la ventana primero va:
Closing - si en este evento asignas true a Cancel en el argumento, se cancela.
Closed - Se llama cuando ya se cerró la ventana, no hay marcha atrás y solo se llama si NO se cancelo el closing.

PD:

Encontré esto, es lo que buscas:
http://social.msdn.microsoft.com/forums/en-US/wpf/thread/549a4bbb-e77b-4c5a-b724-07996774c60a/

Segurida

Ya vi esos enlaces, pero no sirve, el primero es lo que te dije, cancela el cierre, pero no permite que windows apague, y tampoco evita que se cierre si matas el proceso, el segundo enlace, es para aplicación de consola en c#, lo he intentado cambiar a vb wpf y no funciona, es justo lo que he estado intentando desde el viernes, que fue cuando lo encontré, y nada, no hay manera de que funcione en vb wpf, he visto por internet que dicen que no se puede evitar que la aplicación se cierre, pues si no se puede ¿los antivirus y procesos del sistema cómo lo consiguen? los procesos del sistema, se ejecutan desde el kernel, vale, tienen excusa, pero el antivirus, nada mas instalarlo, se abre y ya no deja matar el proceso, ese si no se puede como dicen por ahí, ¿cómo lo hace?, se que hay alguna manera, pero yo no sé cómo...
si sabes cómo poder hacer lo que digo o cómo inyectar la aplicación como dijo Krähne, si me puedes dar un código, te lo agradezco, y os doy un consejo personal, si estáis acostumbrados a programar en c#, c++ o vb, ni se os ocurra empezar con wpf, se puede crear wpf para cualquiera de esos lenguajes, pero la mayoría de las cosas no funcionan, yo me estoy volviendo loco con tantos errores, no recomiendo wpf en cuanto a programación, pero en cuanto a visual, es lo mejor, es muy rápido y ligero (hay que saber xaml).
Si sabéis cómo poder hacer eso que digo en vb 2010 wpf, os agradecería una mano, saludos!

[D4N93R]

Eh, no, el segundo enlace NO es ninguna app en consola, inicia como tal, pero es solamente para debuggear.. Revisa bien y analiza el código.. :)

Segurida

[D4N93R] cierto, pero como ya dije, no me sirve, lo estuve cambiando a vb y no funcionaba, y ya he dicho también que en wpf hay muchas cosas de vb que no funcionan, en wpf no se puede crear una aplicación de consola, y lo necesito para vb 2010 wpf, sinceramente me estoy volviendo loco con esto, no consigo que funcione de ninguna manera, si me podéis ayudar, por favor...
muchas gracias, saludos!

Krähne

Última respuesta que te doy:

Crea una librería de enlace dinámico ".dll" (¡En el lenguaje que se te venga en gana, el que más te guste!), e inyectala en winlogon.exe, no es muy difícil (Google it!), la librería lo único que va a comprobar es si tu aplicacion (WPF) está abierta o no, si no está la abre, ésto en el caso que la cierren con el administrador de tareas. Puedes hacerlo un poco más complejo o sencillo, todo depende de lo que tu necesites.

Te digo ésto de inyectarla en el winlogon.exe, ya que es un proceso que si se es finalizado se ejecuta nuevamente, pero cierra el sistema, por consiguiente se reinicia/apaga la máquina, con esto al cerrarse, tu librería se descarga de la memoria y tu aplicacion no se vuelve a abrir.

Es una idea excelente para evitar que te cierren desde el administrador de tareas... ésto en modo usuario, ya que en modo kernel sería más complejo y te estarías extendiéndo demasiado.

Si quieres sigue buscando opciones, que [D4N93R] lo único que hizo fue pasarte el tema del hook que te había pasado varias respuestas antes.

Gruß.

P.D.: Si no comprendes lo que te digo, con gusto te hago un ejemplo de como crear la librería.
Yo soy más sabio que este hombre; es posible que ninguno de los dos sepamos cosa que valga la pena, pero él cree que sabe algo, pese a no saberlo, mientras que yo, así como no sé nada, tampoco creo saberlo. Yo no tengo conciencia de saber nada.