Así deberias poder evitar que se cambie de tarea o se cierre el programa si no es cerrando el sistema:
Configura el form de tu programa con borderstyle=fixeddialog y usa estas líneas:
Código vb:
Ver originalPrivate Declare Function SetWindowPos Lib "user32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
'Hacemos el form "Siempre visible"
Private Sub Form_Load()
Const conHwndTopmost = -1
Const conHwndNoTopmost = -2
Const conSwpNoSize = &H1
Const conSwpNoMove = &H2
Const conSwpNoActivate = &H10
Const conSwpShowWindow = &H40
SetWindowPos Me.hWnd, conHwndTopmost, 0, 0, 0, 0, conSwpNoActivate Or conSwpNoMove Or conSwpNoSize
End Sub
Código vb:
Ver original'Lo maximizamos
Private Sub Form_Resize()
Me.WindowState=vbMaximized
End Sub
Código vb:
Ver original' Evitamos que se pueda cerrar
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
If UnloadMode = vbFormControlMenu Then Cancel = 1
End Sub
Y despues añades un timer
Código vb:
Ver originalPrivate Sub Timer1_Timer()
' enfocamos el programa cada x milisegundos
Me.SetFocus
End Sub
Saludos
PD: Ya lo tuve que reescribir porque no era del todo correcto el código que puse antes, y me vuelvo a encontrar igual. El timer con el setfocus puede impedir usar los botones del form, y si lo pongo en el evento LostFocus tampoco parece hacer efecto. Hay que buscar otro modo de recuperar el foco si se pierde, o calcular un interval que permita trabajar con el programa.
De todas formas si pones un interval no muy bajo (>=250) parece que permite trabajar.