Se fosse em modo gráfico para Windows, diria que é muito mais simples. Mas como trata-se de aplicativo feito em Clipper, você vai precisar criar uma bat para gerenciar tudo isso. Essa BAT irá chamar um aplicativo externo que verificará se a sessão DOS estiver aberta. Isso é feito pelo título que aparece (em modo janelado é possível visualizar) o nome. Então faça um teste, chame tal executável na linha de comando e observe qual é o título da janela. Tendo o título você utilizaria um outro aplicativo externo que ao ser chamado com o parâmetro entre aspas (quando o titulo contiver espaços) com o nome do título. Ai o aplicativo irá verificar e criar alguns arquivos temporários. Se a sessão já estiver em execução com tal aplicativo, irá simplesmente chamá-lo trazendo no foco a frente na tela e se não estiver sendo rodado, simplesmente sai para ser carregado a nova sessão. Mas este recurso de chamar a janela e trazer pra frente, funciona bem quando está em modo janelado.
Existe outro aplicativo/biblioteca WAPI feito pelo Maligno que também tem a mesma função de identificar os nomes dos executáveis. Maiores detalhes sobre isso, você encontra neste tópico:
https://pctoledo.org/forum/viewto ... 303#p21303 aqui falo justamente desses recursos.
Tem mais um detalhe, se esse título não estiver com definição fixa, isto é, que o usuário venha a mudar de nome, seria conveniente utilizar outro aplicativo para que fixe o nome da sessão.
Também tem um modo muito mais simples, porém não tão seguro.
Aqui tem um exemplo e
aqui outro. Alguns colegas já comentaram aqui no fórum e exemplificaram. Trata-se de cada vez que chamar o aplicativo, você deve criar um arquivo temporário e depois mandar executar o seu aplicativo externo, mas antes verifique com a CONDIÇÃO se já não existia o arquivo temporário. E depois que sair do aplicativo, exclua o arquivo. Mas o problema disto é que se nessa execução o computador for desligado ou o programa sair inesperadamente, irá ficar o arquivo em aberto ou existente.
Outra coisa que é muito importante é a utilização do BLINKER ao invés do RTLINK para estas questões de execução de aplicatvos externos. Ai ao invés de executar
RUN você deve executar o
SWPRUNCMD.