Obtenha o Windows para tratar os arquivos com a mesma extensão de forma diferente

10

Vários programas usam a mesma extensão de arquivo, mas os formatos são totalmente diferentes e incompatíveis. Por exemplo, eu tenho .sch arquivos no meu computador que estão em pelo menos 5 formatos diferentes (TINA, PSpice, PADS, Protel e Eagle). Existe uma maneira de fazer com que o Windows os trate de maneira diferente, de modo que clicar duas vezes em um desses arquivos o abra no programa em que ele deve ser aberto?

O Linux usa números mágicos nos próprios arquivos para diferenciá-los e usa apenas extensões de arquivos como plano de fallback. (Todos os arquivos PNG começam com os bytes 89 50 4E 47 0D 0A 1A 0A , por exemplo, independentemente do que você nomeá-los.) Seria bom se o Windows pudesse suportar isso, mas provavelmente muito difícil de implementar. Talvez algo mais simples como uma extensão de segundo nível, como filename.program1.sch e filename.program2.sch ? Talvez algum tipo de filtro que renomeie arquivos na hora?

Melhor idéia: associar a extensão ambígua a um pré-processador (arquivo .bat ou aplicativo dedicado) que verifica uma extensão de segundo nível ou vai para o arquivo em si e procura o número mágico e, em seguida, inicia o programa apropriado?

    
por endolith 02.08.2011 / 03:17

5 respostas

8

Eu mesmo resolvi:

Eu fiz um script em Python que lê os primeiros bytes de um arquivo e os compara a um dicionário, depois lança o programa apropriado baseado nos números mágicos.

import sys
import subprocess

magic_numbers = {
'OB': r'C:\Program Files (x86)\DesignSoft\Tina 9 - TI\TINA.EXE', # TINA
'*v': r'C:\Program Files (x86)\Orcad\Capture\Capture.exe', #PSpice
'DP': r'C:\Program Files (x86)\Design Explorer 99 SE\Client99SE.exe', #Protel
'\x00\xFE': r'C:\MentorGraphics.0PADS\SDD_HOME\Programs\powerlogic.exe', #PADS Logic
'\x10\x80': r'C:\Program Files (x86)\EAGLE-5.11.0\bin\eagle.exe', # Eagle
}

filename = sys.argv[1]
f = open(filename, 'rb')
# Read just enough bytes to match the keys
magic_n = f.read(len(max(magic_numbers.keys())))

subprocess.call([magic_numbers[magic_n], filename])

A última versão estará aqui: Lançar arquivos ambíguos no programa apropriado

Eu tentei associar a extensão do arquivo a esse script, mas o Windows 7 não me permitiu. Ele apenas o associava ao Python, então entrei no registro e adicionei o nome do script manualmente.

Espaçoparamelhorias,masfunciona.Eupossoclicarduasvezesemarquivosdiferentescomamesmaextensão.scheelessãoabertosemaplicativosdiferentes.

Atualização:Euoconvertiemum.exeusandoocx_freeze,comumarquivodeconfiguraçãoYAMLexterno,eéfácilassociá-lo.Vejatambém esta proposta libmagic . Não tenho certeza se devo transformá-lo em um "lançador de libmagic completo para o Windows" ou se é melhor lidar com apenas uma extensão de arquivo com um .exe e um arquivo YAML simples.

    
por 02.08.2011 / 05:52
9

O Windows não lança arquivos baseados em qualquer informação do arquivo - criar um banco de dados para isso exigiria uma quantidade incrível de trabalho e programação. A única maneira verdadeira de identificar um arquivo é pelas assinaturas binárias no arquivo, se o arquivo o tiver, e isso depende do autor do software implementar.

No Windows, os arquivos são passados para o programa que você especifica para uma extensão de arquivo específica. O Windows determina a extensão de um arquivo como a subsequência que segue a última ocorrência de um período, portanto, não é possível com os nomes de arquivo que você publicou.

É necessário renomear os arquivos (e fornecer extensões de arquivo exclusivas) ou gravar um arquivo em lotes para iniciar o aplicativo apropriado para você. Para mais detalhes, consulte este artigo da Technet .

    
por 02.08.2011 / 03:23
3

Para começar, você pode renomear um dos tipos de arquivos para ter uma nova extensão e usar a caixa de diálogo "abrir com" para definir um programa padrão para abrir esses tipos de arquivos.

Isso não lida com o problema de renomeação. Mas você simplifica as coisas fazendo uma pasta específica onde você coloca todos os arquivos de um dos programas. Em seguida, você pode escrever um script para renomear automaticamente os arquivos dessa pasta para a nova extensão de arquivo.

Você pode ter problemas com um diálogo "Abrir arquivo" em seu programa, dependendo de como ele está configurado. Mas se você tem uma única pasta onde todos os seus arquivos são, você deve ser capaz de usar isso.

Uma maneira mais complicada, mas potencialmente melhor, seria criar um programa de proxy. Mantenha todas as extensões de arquivo, mas faça com que elas sejam abertas pelo programa de proxy. Peça ao seu programa para examinar o binário e escolher o tipo de arquivo e qual programa iniciar. Isso exigirá que você passe algum tempo escrevendo seu programa, o que pode ou não valer a pena para você.

    
por 02.08.2011 / 04:00
2

O Microsoft Visual Studio implementa sua última ideia. Quando você inicia um arquivo .sln, um pequeno stub verifica o número da versão da solução e lança a versão correta do Visual Studio (se você tiver várias versões instaladas).

Naturalmente, a coordenação aqui é um pouco mais fácil, já que (A) o formato do arquivo é projetado para isso e (B) são todas versões do mesmo software, do mesmo fabricante.

    
por 02.08.2011 / 12:33
1

Uma solução rápida é adicionar entradas de contexto adicionais ao menu de contexto do explorador. Ou para usar a entrada de contexto "abrir com". O primeiro é mais confortável, pois é possível adicionar parâmetros de chamada e especificar nomes "informativos". Também permite abrir um arquivo com diferentes versões do mesmo programa (se instalado em paralelo).

É claro que essa abordagem não é automática. É preciso conhecer a aplicação correta. Mas para tipos de arquivo em que a detecção baseada em banco de dados falharia (por exemplo, arquivos de texto ou outros arquivos sem um "número mágico"), você sempre tem a escolha.

BTW: O SO menos conhecido 'GEOS' (que era um concorrente do Win3 em seu tempo e muito à frente) tinha um cabeçalho fixo de 256 bytes para todos os arquivos onde o aplicativo de criação, ícone de avisos de direitos autorais foram armazenados (junto campo livre para notas próprias). Como isso fazia parte do arquivo e não do sistema de arquivos ou de um dicionário do sistema operacional, era transparente quando os arquivos eram movidos entre sistemas de arquivos ou até mesmo para um sistema operacional diferente (havia uma extensão do explorador para o W95).

    
por 22.10.2018 / 16:40