Não quero fazer engenharia reversa no jogo.
Pense em jogos tipo RPG com tarefas repetitivas, do tipo construir um item para ganhar XP. Você pode deixar o personagem craftando as coisas por um período de tempo, mas não infinitamente porque vai precisar comprar mais material para isso.
Então, pela quantidade de material que tenho no estoque, sei que o personagem vai conseguir manufaturar X ou Y peças. A cada vez que o personagem termina a ação de manufatura (craft), o jogo emite um som.
Devido a fatores internos que estão além da minha capacidade de prevê-los, não posso afirmar quanto tempo a ação irá levar; mas sei que executará um determinado som X vezes.
Essas tarefas não influenciam o andamento do jogo, servem apenas para contagem. Por isso eu poderia deixar o computador ligado e ir dormir, enquanto ele trabalha nisso. E quando o som fosse executado, significaria que chegou ao ponto de encerrar.
Se ele encerra e não tem mais tarefas, não preciso deixar o computador ligado, gastando energia. Por isso, então, o computador seria desligado.
Sem engenharia reversa, sem abrir código de outra pessoa.
Eu não chamaria de cheat, mas a ideia é simples assim, como você colocou: ao receber um barulho indicativo de tarefa, ele vai executar a ação de encerrar e desligar.
Obrigado! Vou dar uma olhada.
Pelo que eu estava vendo, eu poderia talvez tentar capturar um áudio com AudioInputStream a cada X segundos, cortar silêncios ou sons em baixo volume com Clip e depois comparar com outro AudioInputStream (do arquivo em lide).
Não é uma solução elegante, ou simples como analisar a memória, mas me parece uma alternativa que talvez possa funcionar.
Inclusive esse tipo de código pode até ser útil em tarefas de escritório, para coisas que precisam de atenção imediata.
(só não vale recriar aquele alerta do MSN que tremia a tela)