Resumindo: você cria sua própria extensão de arquivo aplicando as letras que quiser no final do nome do arquivo. Você o executa dizendo ao seu sistema operacional qual programa deve ser chamado quando você clica duas vezes nele.
Explicação completa:
Uma extensão de arquivo é, na verdade, apenas as letras após o arquivo, não há nada de mágico na extensão. Um monte de arquivos que eu fiz quando estou em minhas máquinas Linux eu esqueci de colocar a extensão do arquivo.
Dito isto, no Windows, a extensão do arquivo é como o Windows determina qual é o arquivo. Se você alterar a extensão de um arquivo .mp3, por exemplo, para um .png, o Windows pensará que é uma imagem quando tentar abri-lo. O que o Windows faz é verificar a extensão e enviar o arquivo para um programa apropriado relacionado a esse arquivo. Assim, o .mp3 é enviado para o iTunes, o .png é enviado para o Paint, o .html é enviado para o Firefox / Chrome e o docx é enviado para o Word.
Em termos de criação desses arquivos, eles se enquadram em duas categorias. Existem arquivos de texto simples (.html, .txt, .java, .py, .cpp, .config, .xml) e, em seguida, há arquivos de dados binários (.exe, .mp3, .png) (bem, e depois há são misturas de texto binário e simples como .docx, mas elas podem ser tratadas como arquivos binários). Quando você está lidando com arquivos de texto simples (é texto puro se o Bloco de Notas puder abri-lo), é muito fácil de fazer. Dependendo da sua linguagem de programação, você basicamente abre um arquivo e lê / grava strings no arquivo. Com arquivos binários fica um pouco mais complicado, mas o princípio permanece o mesmo, você está lendo / escrevendo bytes de um arquivo.
Para que você possa executar esse tipo de arquivo ao clicar duas vezes, é provavelmente o passo mais difícil, dependendo da sua linguagem de programação. Se é C ou C ++, você simplesmente aponta o Windows para o seu .exe e o Windows envia o arquivo que você deseja abrir como o segundo argumento em args para o método principal do seu programa. Em Java ou Python ainda é factível, mas você terá que trabalhar em algum tipo de solução alternativa para fazer com que o Windows abra o ambiente de tempo de execução ou o interpretador e envie o argumento de arquivo para o programa.