Uma solução simples seria escrever um programa AutoIt que tenta fazer o ping do resolvedor de DNS do seu provedor de serviços de Internet. Esta é a única maneira verdadeira de detectar se você está "conectado" à internet ou não, já que nem sempre é confiável fazer ping em sites de terceiros.
Eu configuro para fazer ping a cada minuto, e se nenhuma resposta for recebida por 5 minutos, desligue o computador (ou configure-o para entrar no modo de suspensão). Felizmente, a AutoIt tem um Ping()
e Sleep()
funções.
O script simples ficaria parecido com o seguinte:
Local $i = 0
While $i < 5 ; Looping until we hit 5 attempts...
If Ping("12.34.56.78", 10000) == 0 Then ; If we couldn't ping...
$i = $i + 1 ; Increment the counter.
Else ; Else, if we could,
$i = 0 ; Reset the counter.
EndIf
Sleep(60000) ; Finally, loop every minute.
WEnd
; If the script gets here, we missed 5 pings - take action.
Shutdown(32) ; See the Shutdown() documentation, this makes the PC sleep.
; http://autoitscript.com/autoit3/docs/functions/Shutdown.htm
Antes de executar o computador durante a noite, você pode simplesmente executar o script acima. Para continuar usando seu computador normalmente, basta fechar o script.
Disclaimer: Eu não testei este código (eu escrevi rapidamente no Notepad + +), mas parece viável.