O Starcraft II me impede de executar várias instâncias, mas se eu executar a segunda instância na área restrita no Sandboxie , ela funcionará. O que pode explicar isso?
Como posso replicar esse comportamento para meus próprios jogos?
O Starcraft II me impede de executar várias instâncias, mas se eu executar a segunda instância na área restrita no Sandboxie , ela funcionará. O que pode explicar isso?
Como posso replicar esse comportamento para meus próprios jogos?
Respostas:
Além do Starcraft 2, a resposta geral é: Adquira (e bloqueie, se a aquisição em si já não for equivalente a bloquear) um recurso específico do sistema operacional. Saia do jogo se a aquisição / bloqueio falhar. Exemplos de tais recursos são:
No topo, o mais problemático para o cliente, o hardware especializado que (às vezes necessariamente como alguns componentes de controle robótico) pode ser usado exclusivamente exclusivamente por um único encadeamento também pode ser usado dessa maneira.
Eu recomendo a abordagem mutex, mas:
Outro método frequentemente usado é simplesmente verificar se outro processo com o mesmo nome está em execução.
A vantagem é que é ridiculamente fácil - você não precisa se preocupar com permissões de arquivo ou saber o que é um mutex. A desvantagem é que você receberá um falso positivo se um programa diferente chamado starcraft2.exe
estiver em execução na máquina.
Se você estiver usando C ++ e a API do Windows, é possível, usando uma maneira FindWindow
, transmitir parâmetros como o nome da classe e / ou o nome da janela. Então, se você encontrar uma correspondência, basta sair do seu programa antes mesmo de carregar ou criar uma janela.