Foros del Web » Programación para mayores de 30 ;) » .NET »

Problema al cerrar Windows con mi aplicación ejecutándose

Estas en el tema de Problema al cerrar Windows con mi aplicación ejecutándose en el foro de .NET en Foros del Web. Hola a tod@s!! Tengo un pequeño problema con mi aplicación, normalmente se ejecuta minimizada al lado del reloj porque lleva a cabo operaciones de forma ...
  #1 (permalink)  
Antiguo 04/03/2005, 07:10
 
Fecha de Ingreso: marzo-2004
Ubicación: Valencia
Mensajes: 367
Antigüedad: 20 años, 1 mes
Puntos: 1
Problema al cerrar Windows con mi aplicación ejecutándose

Hola a tod@s!!
Tengo un pequeño problema con mi aplicación, normalmente se ejecuta minimizada al lado del reloj porque lleva a cabo operaciones de forma automática cada cierto tiempo. Para iconizar la aplicación utilizo el siguiente código
Código:
Private Sub Aplicacion_Closing(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing
 
         Dim respuesta As MsgBoxResult
         Dim msg As String= "¿Desea cerrar la aplicación? (Para iconizarla seleccione ""No"")"
        Dim estilo As MsgBoxStyle = MsgBoxStyle.DefaultButton1 Or MsgBoxStyle.Question Or MsgBoxStyle.YesNoCancel
        Dim titulo As String = "Cerrar o iconizar"

        respuesta = MsgBox(msg, estilo, titulo)
        If respuesta = MsgBoxResult.Yes Then
            Application.Exit()
        ElseIf respuesta = MsgBoxResult.No Then
            e.Cancel = True
            NotifyIcon.Visible = True
            Me.Visible = False
        Else
            e.Cancel = True
        End If

    End Sub
así cuando la intentan cerrar aparece el cuadro de diálogo para dar la posibilidad de iconizar.
El problema viene al cerrar sesión Windows o al apagarlo si la aplicación está funcionando porque sale el cartel para dar la posibilidad de iconizar en vez de cerrar el programa y al rato intenta finalizar la aplicación con el típico cartel ese de "Finalizando" y la barra de progreso, el que sale cuando algo se ha colgado; bueno, la cosa es que queda muy mal y es una lata que te aparezca eso cada vez que cierras Windows o sesión. Me gustaría tener el programa ejecutádose iconizado como hasta ahora y que al cerrar Windows no pase nada, que no moleste al usuario para nada.

Qué podría hacer?? Un saludo y gracias
  #2 (permalink)  
Antiguo 05/03/2005, 02:37
 
Fecha de Ingreso: marzo-2004
Ubicación: Valencia
Mensajes: 367
Antigüedad: 20 años, 1 mes
Puntos: 1
Y hay alguna forma de saber si la aplicación se intenta cerrar porque se ha pulsado la "X" de la ventana o por otro motivo? quizá así podría arreglarlo.

O poniendo un botón al lado del de minimizar para iconizar la aplicación, algo como lo que tiene el emule... ... Alguien sabe algo de esto? mejor de lo primero que parece más fácil, pero es que no sé por donde cogerlo.

Saludos y gracias
  #3 (permalink)  
Antiguo 05/03/2005, 18:16
Avatar de xknown  
Fecha de Ingreso: diciembre-2004
Ubicación: Cusco - Perú
Mensajes: 2.248
Antigüedad: 19 años, 4 meses
Puntos: 7
La idea es reconocer quien envía el mensaje para cerrar la ventana, si es resultado de la acción del usuario o del sistema operativo. Aquí hay una forma de hacerlo:
Código:
Private Sub frmMain_Closing(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing
        Dim O As System.Diagnostics.StackTrace = New System.Diagnostics.StackTrace(True)
        Dim F As System.Diagnostics.StackFrame

        F = O.GetFrame(7)

        Select Case F.GetMethod.Name.ToString
            Case "SendMessage"
                'MsgBox("Closing because of call in code.")
                ntiTray.Visible = False
            Case "CallWindowProc"
                'MsgBox("Closing because of system menu click.")
                e.Cancel = True
                Me.Hide()
            Case "DispatchMessageW"
                'MsgBox("Closing because of Task Manager.")
                ntiTray.Visible = False
            Case Else
                'MsgBox("Don't Know why I'm closing!!??")
                ntiTray.Visible = False
        End Select
    End Sub
Referencia: http://vbcity.com/forums/topic.asp?tid=12221&#RID84157
__________________
Alex Concha
Buayacorp - Programación y Diseño
  #4 (permalink)  
Antiguo 05/03/2005, 20:47
 
Fecha de Ingreso: enero-2005
Ubicación: españa, madrid y galicia
Mensajes: 91
Antigüedad: 19 años, 3 meses
Puntos: 0
Creo que te metes muy dentro

Pues esto. Si es un program pequeno, de uso para ti, pues te vale esto, si es uno comercial, no creo que es bien usar este codigo.

Alternativas creo que hay, una que me viene ahora es WMI. Se que es un nivelo mas, pero la technica de usar los nombres de los funcciones del Win32 guardadas por alli no me parece bien.

Lo que creo que era bien es que ellos hacian este test dentro del Framework.
  #5 (permalink)  
Antiguo 07/03/2005, 02:03
 
Fecha de Ingreso: marzo-2004
Ubicación: Valencia
Mensajes: 367
Antigüedad: 20 años, 1 mes
Puntos: 1
No me acaba de funcionar xknown, tanto si cierro la aplicación dándole a la "X" como si se intenta cerrar al cerrar Windows o cerrar sesión siempre me entra en Case "CallWindowProc" :(

Gracias de todas formas. Saludos!!!!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:45.