Установить кодовую страницу для расширения оболочки
Мне нужно зарегистрировать расширение 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
?