Todas as informações de associação de extensão de arquivo são armazenadas no registro. E se você fizer uma pequena navegação, não será muito difícil descobrir como as coisas funcionam. Para associações de toda a máquina, tudo acontece na raiz de HKEY_CLASSES_ROOT . A edição manual dessas coisas lhe dá o poder final sobre suas extensões de arquivo (embora tediosas). Basta criar um backup caso você estrague tudo e queira reverter.
Cada associação de arquivo tem uma subchave chamada .xyz , em que xyz é a extensão do seu arquivo. O valor (Padrão) para essa chave é definido como uma string arbitrária. A maioria dos aplicativos que registram extensões de arquivo o definem como algo legível por humanos. Por exemplo, .pdf no meu sistema está definido como FoxitReader.Document . Existem muitos outros valores nessa chave, mas nada é obrigatório, exceto o valor (Padrão).
Para qualquer que seja o valor (Padrão) definido como, haverá uma subchave correspondente com o mesmo nome também na raiz de HKEY_CLASSES_ROOT. O valor (padrão) da chave this é essencialmente o "nome amigável" do tipo de arquivo. Essa chave também pode ter muitas subchaves, mas as únicas em que estamos interessados são DefaultIcon e Shell .
DefaultIcon como você provavelmente adivinhou controla o ícone para esse tipo de arquivo. O valor (Padrão) para essa chave deve ser definido para o caminho do arquivo de ícone. Ou, se o ícone estiver em um arquivo .exe, defina-o como o caminho do arquivo .exe e inclua uma vírgula e o índice de ícones no final do caminho. Por exemplo, o FoxitReader.Document DefaultIcon é definido como
C:\PROGRA~1\FOXITS~1\FOXITR~1\FOXITR~1.EXE,1
Shell é onde você configura todas as "ações" para esse tipo de arquivo. Para cada ação que você deseja definir, crie uma subchave denominada como você deseja nomear a ação. A maioria dos tipos tem pelo menos uma ação chamada aberta . Na subchave dessa nova ação, crie uma subchave chamada Command . O valor (Padrão) desta tecla de comando é basicamente a linha de comando que é executada quando esta ação é clicada / executada. Por exemplo, o comando aberto em um FoxitReader.Document é
"C:\PROGRA~1\FOXITS~1\FOXITR~1\FOXITR~1.EXE" "%1"
O argumento "% 1" é definido para o caminho do arquivo do qual você executou a ação.
Se você tiver apenas uma ação definida para um determinado tipo de arquivo, acredito que seja a ação padrão executada se o arquivo for clicado duas vezes. Se houver várias ações possíveis, você poderá definir qual delas será o padrão, modificando o valor (Padrão) da chave Shell . Basta configurá-lo para o nome da ação que você quer que seja o padrão.
Com tudo isso dito, não é muito eficiente fazer tudo do zero. É provavelmente mais fácil usar as ferramentas internas para obter a maior parte do caminho e, em seguida, apenas ajustar as coisas manualmente que as ferramentas não permitem que você faça. Eu também devo mencionar que todas essas informações são baseadas no XP, mas estou quase certo de que nenhuma delas mudou para o Vista ou o Win7.