设置 shell 扩展的代码页

设置 shell 扩展的代码页

我需要为 Windows 注册一个 Shell 扩展,它应该能够处理任何语言名称的文件和文件夹。

不幸的是,Windows 似乎通过命令提示符运行其 shell 扩展,因此参数不是以 Unicode 传输的,而是以命令提示符的代码页传输的,这几乎总是不好的。我知道 Windows 有一个 API 函数GetCommandLineW,但由于所讨论的程序是用 Java 编写的,因此使用它需要笨重的 JNA/JNI 代码,而我正试图避免这种情况。

为整个操作系统设置默认代码页似乎不是一个可行的选择,因为我发现的唯一选项是设置HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage\OEMCP,据报道这会导致系统拒绝启动——这是一个大忌,因为我们正在谈论生产机器。

我尝试将 shell 扩展设置command为类似

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

或有或没有的变化等%SystemRoot%> nul但所有的结果都相同 - 执行 shell 扩展时,命令提示符窗口闪烁,但我的程序从未被调用。

下一步是创建一个简单的批处理文件:

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

并将 shell 扩展命令更改为:

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

但每当我尝试运行它时,我都会收到一条错误消息

系统无法从指定设备读取

这使我相信该参数在到达批处理文件之前已被 shell 扩展执行弄乱,此时无法保存。

所以我的问题是 - 运行 shell 扩展时,是否有一种合理的方法要求 Windows 以 Unicode(或任何其他代码页)传递参数?或​​者唯一的选择是使用 提供的本机 API GetCommandLineW

相关内容