Pues mira, para apagar la pc, necesitas de una función de API, se llama InitiateSystemShutdown. Para comprobar la hora en que se puede apagar, puedes usar un timer, para que cada segundo compruebe si ya se debe apagar la pc o no.
Declaración de la función
-   
- 'Esta declaración copiala a un modulo bas 
- Declare Function InitiateSystemShutdown Lib "advapi32.dll" Alias "InitiateSystemShutdownA" _ 
-     (ByVal lpMachineName As String, ByVal lpMessage As String, _ 
-     ByVal dwTimeout As Long, ByVal bForceAppsClosed As Long, _ 
-     ByVal bRebootAfterShutdown As Long) As Long 
-   
-   
Comprobación de la hora de apagado, con el evento timer del control timer
-   
- Private Sub Timer1_Timer() 
-     Dim nombrePC As String 
-     Dim horaActual As String, horaApagado As String 
-     horaActual = Format(Time, "hh:mm:ss AM/PM") 
-     horaApagado = Format(Text1.Text, "hh:mm:ss AM/PM")'La hora de apagado está en un text 
-     nombrePC = "\\192.168.1.102" 'Aki debes poner la IP o nombre de la computadora 
-    'Si ya pasó la hora de apagado, psss apagala 
-     If horaActual >= horaApagado Then 
-         'Llamo a la función de apagado, para que se apague en 10 segundos 
-         InitiateSystemShutdown nombrePC, "El sistema se está apagando", 10, True, False 
-         Timer1.Enabled = False'Deshabilito el timer 
-     End If 
- End Sub 
-   
-   
Espero te sirva, aqui debes poner tu manualmente, la ip, o el nombre de la maquina. Pero con el control winsock puedes extraer la IP de tu maquina.  
