Bueno.....esto me ha costado algo
. Aquí dejo un código realizado por mi para detectar la conexión, desconexión, cierre y apertura del msn. Lo he intentado dejar algo comentado. Si dudas en algo me lo dices. Espero que te sirva a ti y a quien le interese. Si veis errores o alguna mejora me lo comentais. Tampoco me he matado optimizandolo
.
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Dim Msn As Messenger
Private Sub Form_Load()
Set Msn = New Messenger
Timer1.Interval = 500
End Sub
Private Sub Timer1_Timer()
On Error GoTo CerrarMsn 'Esto ignora el error producido al cerrarse
Static Desconectado As Boolean, Conectado As Boolean, VariableError As Boolean
If Msn.MyStatus = MISTATUS_OFFLINE Then 'Te dice si esta desconectado
Desconectado = False
If Conectado = False Then
Conectado = True
MsgBox "Esta desconectado", vbCritical
End If
Else
' Te dice si estas conectado. Lo averigua comparando todos los estados posibles de conexion del Msn.
If Msn.MyStatus = MISTATUS_AWAY Or Msn.MyStatus = MISTATUS_BE_RIGHT_BACK Or Msn.MyStatus = MISTATUS_BUSY Or Msn.MyStatus = MISTATUS_IDLE Or Msn.MyStatus = MISTATUS_INVISIBLE Or Msn.MyStatus = MISTATUS_ON_THE_PHONE Or Msn.MyStatus = MISTATUS_ONLINE Or Msn.MyStatus = MISTATUS_OUT_TO_LUNCH Then
Conectado = False
If Desconectado = False Then
Desconectado = True
MsgBox "Esta conectado", vbInformation
End If
End If
End If
VariableError = False
Exit Sub
CerrarMsn: 'Se introduce aqui cuando se produce un error. Este error se produce cuando cierras el Msn
If VariableError = falso Then 'Te indica que el Msn se ha cerrado.
Set Msn = Nothing 'Descargo el objeto, para poder cargarlo luego si se abre de nuevo, y así salga del error.
VariableError = True
Desconectado = False
Conectado = False
MsgBox "El messenger se ha cerrado", vbCritical
Else
Dim CargadoMsn As Long, MsnAbierto As Boolean
CargadoMsn = FindWindow("msnhiddenwindowclass", vbNullString) 'Revisa si esta cagada la clase del Msn Live.
If CargadoMsn <> 0 And MsnAbierto = False Then
Set Msn = New Messenger 'Si esta la clase, carga de nuevo el objeto. Tambien te dice que se ha abierto el Msn
MsgBox "El messenger se ha abierto", vbInformation
MsnAbierto = True
End If
End If
End Sub
Una última cosa. La clase que he puesto en la función FindWindow para detectar la apertura del msn es la de mi versión msn live 8.1 (supongo que valga para todas la Live). Si no es Live tendreis que poner la clase apropiada. Buscarla con el Spy++ del VB6.
Saludos.