Menu de contexto WinRAR e detecção de tipo de arquivo do Windows

5

Até agora, sei que o menu de contexto de exibição do Windows é baseado na extensão do arquivo, e não no tipo de arquivo. Acabei de testar com arquivo de texto vazio com extensão mp3 com winamp e o resultado está abaixo:

DamesmaformaqueeutesteioarquivovaziocomextensãoexeeoWindowsmeforneceomenudecontextocomo"Executar como Administrador" e assim.

Masseeucriarumarquivosfxquetenhaamesmaextensãoexe,comooWindowsmedáumíconediferenteeoWinRARmeofereceummenudecontextoespecialcomo"Extrair aqui" como mostrado na figura abaixo?

Minha pergunta é o cabeçalho do arquivo de leitores do Windows e representa dados relevantes ou o WinRAR tem algum esquema especial de detecção de arquivos? Eu duvido que o segundo, desde que durante a criação do menu de contexto o WinRAR não invocou.

Outra questão é se é por causa do comportamento do Windows ler cabeçalhos (como criar miniaturas para fotos ou vídeos), agora a extensão tem menos importância? Eles não têm influência no menu de contexto?

    
por Jones 22.02.2013 / 07:25

2 respostas

6

Os manipuladores de menu de contexto do Windows podem ser estáticos , bem como dinâmicos . Se você estiver interessado em aprofundar ainda mais, eu aconselho você a ler o Artigo de atalhos (Contextos) e manipuladores de menus de atalho , especialmente Escolhendo um Método de Menu de Atalho Estático ou Dinâmico e Personalizando um menu de atalho usando verbos dinâmicos .

Citando esta Visual Basic Programação da Shell trecho do livro :

Dynamic Context Menus

Static context menus are limited because they are the same for every file object of a given type. Also, the number of files that can be processed through a static menu is limited by the program that is used to carry out the command. What if you need to process 20 files? What if you need different processing options based on the state of the file itself? There are also situations where you might need one context menu for a group of files and another for a single file. This is where dynamic context menus come into play.

...

You might want different menu items displayed based on whether one or multiple files have been selected. Since the number of files selected can be determined in IShellExtInit::Initialize, this becomes a trivial matter. You also have the ability to base the menu item on the file itself. In addition to the number of files selected, you would also already know the filenames in question. This means you could open the file, retrieve information, and base the menu item on actual data. Or you could examine some other attribute of the file (such as its creation date, its size, or its read-only status) and base the menu item on that information as well.

Finalmente, se você quiser provar que o arquivo está sendo realmente lido pela DLL de extensão do shell do WinRAR (já que você parece duvidar), aqui estão as várias chamadas ReadFile registradas por Monitor de Processos simplesmente clicando com o botão direito do mouse em um WinRAR SFX:

(Onomedoprocessoéexibidocomoexplorer.exeenãocomorarext.dll,porqueomanipuladordomenudecontextoéumobjetoCOM"em processo" que o shell carrega diretamente no espaço de memória do explorer.exe para execução.)

Como você pode ver, ele lê os primeiros 7 bytes para confirmar que é um EXE:

Depoisdelermaisdados(semdúvidaparaobtereanalisarocabeçalho),elelê7bytesdodeslocamento101.376paraconfirmarqueéumWinRARSFXenãoapenasqualquerEXEantigo:

Isso solicita a inclusão de várias entradas do menu de contexto, como Abrir com o WinRAR, Extrair com o WinRAR e assim por diante, que não são adicionadas para EXEs "normais".

Além disso, na caixa de diálogo Configurações do WinRAR há uma opção chamada Onde verificar arquivos SFX :

Vejaoqueoarquivodeajudatemadizersobreisso:

"Where to check for SFX archives" options control processing of SFX archives in context menus. Checking contents of executable file and detecting if it is a self-extracting (SFX) archive introduces some delay when right clicking every ".exe" file, because WinRAR needs to read and analyze file data to find out if it is SFX. While such delay is negligible for fast local hard drives, it can be noticeable in case of slow network disks. This group of options allows to enable or disable SFX processing for local hard disks, network disks and other disks like CD-ROM and USB separately. If you turn these options off, you will not see all SFX related context menu items when right clicking SFX archive. So disable these options only if you really experience delays when right clicking ".exe" files.

Espero que isso coloque suas dúvidas em paz. :) Quanto à sua segunda pergunta sobre se as extensões têm "menos importância" agora e não têm "qualquer influência no menu de contexto [s]", não entendo o que você quer dizer. Mesmo as miniaturas de imagem / vídeo são geradas pelos manipuladores de extensão do shell (DLLs). Uma lista de diferentes manipuladores pode ser encontrada aqui . Como você pode ver, é possível ter manipuladores de extensão de shell personalizados para tudo, desde menus de atalho, arrastar & operações de soltar, ícones, sobreposições de ícones, folhas de propriedades, miniaturas, infotips, metadados, colunas do Explorer, diálogos de cópia / movimentação / exclusão / renomeação, pesquisa ...

Editar: Coincidentemente, Raymond Chen postou um artigo sobre extensões de shell hoje também (não se esqueça de ler o anterior também.

    
por 22.02.2013 / 09:00
0

O Windows Explorer não lê cabeçalhos.

Inicialmente formado menu para qualquer extensão com base nas chaves do registro, eles podem ser considerados chaves de inicialização para o Windows Explorer:

HKLM\SOFTWARE\Classes\Protocols\Filter
HKLM\Software\Microsoft\Windows\CurrentVersion\Explorer\ShellExecuteHooks           
HKLM\Software\Classes\*\ShellEx\ContextMenuHandlers         
HKLM\Software\Classes\Directory\ShellEx\ContextMenuHandlers
HKLM\Software\Classes\Directory\Shellex\DragDropHandlers
HKLM\Software\Wow6432Node\Classes\Directory\Shellex\DragDropHandlers
HKLM\Software\Classes\Directory\Shellex\CopyHookHandlers
HKLM\Software\Classes\Directory\Background\ShellEx\ContextMenuHandlers
HKLM\Software\Classes\Folder\Shellex\ColumnHandlers
HKLM\Software\Wow6432Node\Classes\Folder\Shellex\ColumnHandlers
HKLM\Software\Classes\Folder\ShellEx\ContextMenuHandlers    
HKLM\Software\Classes\Folder\ShellEx\DragDropHandlers       
HKLM\Software\Classes\Folder\ShellEx\PropertySheetHandlers  
HKLM\Software\Microsoft\Windows\CurrentVersion\Explorer\ShellIconOverlayIdentifiers 
HKLM\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Explorer\ShellIconOverlayIdentifiers 

HKCU\Software\Classes\*\ShellEx\ContextMenuHandlers 
HKCU\Software\Classes\Directory\Background\ShellEx\ContextMenuHandlers

Há uma pesquisa por extensão de arquivo em HKEY_LOCAL_MACHINE\Software\Classes e HKEY_CURRENT_USER\Software\Classes , se a extensão do arquivo for encontrada, execute manipuladores de arquivos designados.

    
por 22.02.2013 / 08:35