我有以下代码:
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/