Установить кодовую страницу для расширения оболочки

Мне нужно зарегистрировать расширение Shell для Windows, которое должно обрабатывать файлы и папки с именами на любом языке.

К сожалению, похоже, что Windows запускает свои расширения оболочки через командную строку, и, таким образом, параметры передаются не в Юникоде, а в кодовой странице командной строки, что почти всегда плохо. Я знаю, что в Windows есть функция API GetCommandLineW, но поскольку рассматриваемая программа написана на Java, для ее использования потребовался бы неуклюжий код JNA/JNI, которого я стараюсь избегать.

Задание кодовой страницы по умолчанию для всей ОС не представляется приемлемым вариантом, так как я нашел только один вариант: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage\OEMCPчто, как сообщается, может заставить систему отказаться от загрузки - большое нет-нет, поскольку мы говорим о производственных машинах.

Я попытался установить мои расширения оболочки command что-то вроде

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

или варианты с или без %SystemRoot%, > nul и т. д., но все приводят к одному и тому же - при выполнении расширения оболочки мигает окно командной строки, но моя программа никогда не вызывается.

Следующим шагом было создание простого командного файла:

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

и изменив команду расширения оболочки на:

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

Но всякий раз, когда я пытался запустить это, я получал сообщение об ошибке

Системе не удалось прочитать с указанного устройства

Это заставляет меня поверить, что параметр был искажен выполнением расширения оболочки до достижения командного файла, и в этот момент его нельзя было сохранить.

Итак, мой вопрос - есть ли разумный способ попросить Windows передавать аргументы в Unicode (или любой другой кодовой странице) при запуске расширения оболочки? Или это единственный вариант использовать собственный API, предоставляемый GetCommandLineW?

0 ответов

Другие вопросы по тегам