我有以下代码:

var
  sciezkaDysk : string;
begin
  sciezkaDysk :='/c  ffmpeg.exe MORE_COMMANDS_HERE -f flv "E:\ół test\test.flv"'
  ShellExecute(0, nil, 'cmd.exe', PWideChar(sciezkaDysk), '', SW_HIDE);
end;


问题出在目录名“ółtest”上,当目录名不包含非英文字符时,一切正常。请帮忙。谢谢。

最佳答案

问题不在Delphi代码中。您的ffmpeg可执行文件很可能使用GetCommandLineA而不是GetCommandLineW来读取命令行,并且从UTF-16到ANSI的转换失败。

有多种选择,但我怀疑最简单的方法是将新进程的工作目录指定为包含文件的目录。这样,ffmpeg无需查看麻烦的字符– ShellExecuteW处理它们:

ShellExecute(
    0,
    nil,
    'ffmpeg.exe',
    'MORE_COMMANDS_HERE -f flv test.flv',
    'E:\ół test',
    SW_HIDE
);


也就是说,我建议CreateProcess是启动外部进程的更好方法。这样您将获得更多控制。您可以更干净地确保未显示控制台窗口。

关于delphi - Delphi XE5 Shell执行非英文字符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20705390/

10-15 17:24