Definir página de código para extensão do shell

0

Eu preciso registrar um Shell Extension para Windows, que deve ser capaz de processar arquivos e pastas com nomes em qualquer idioma.

Infelizmente, o Windows parece executar suas extensões de shell por meio de um prompt de comando e, assim, os parâmetros são transferidos não em Unicode, mas na página de códigos do prompt de comando, que quase sempre é ruim. Eu sei que o Windows tem uma função de API GetCommandLineW , mas como o programa em questão é escrito em Java, usá-lo exigiria um desajeitado código JNA / JNI, que estou tentando evitar.

Definir a página de código padrão para todo o sistema operacional não parece ser uma opção viável, pois a única opção que encontrei foi definir HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage\OEMCP , que supostamente pode fazer o sistema recusar a inicialização - um grande não-não, como estamos falando de máquinas de produção.

Eu tentei definir minhas extensões do shell command para algo como

chcp 65001 & "C:\path\to\java\javaw.exe" -jar "C:\path\to\program\program.jar" "%1"  

ou variações com ou sem %SystemRoot% , > nul etc. mas todos resultam no mesmo - ao executar a extensão do shell, uma janela de prompt de comando pisca, mas meu programa nunca é chamado.

O próximo passo foi criar um arquivo de lote simples:

chcp 65001 
"C:\path\to\java\javaw.exe" -jar "C:\path\to\program\program.jar" "%1"

e alterando o comando da extensão do shell para:

"C:\path\to\program\batch.bat" "%1"  

Mas sempre que tentei executar isso, recebi uma mensagem de erro

The system could not read from the specified device

O que me leva a crer que o parâmetro foi distorcido pela execução da extensão do shell antes de chegar ao arquivo de lote, quando não foi possível salvá-lo.

Então, minha pergunta é: existe uma maneira sã de pedir ao Windows para passar argumentos em Unicode (ou qualquer outra página de código) ao executar uma extensão do shell? Ou é a única opção para usar a API nativa fornecida por GetCommandLineW ?

    
por Itai 07.07.2016 / 22:15

0 respostas