15,471
社区成员
发帖
与我相关
我的任务
分享
CString strFileName = TEXT("E:/1(2017).avi");
strFileName.Replace(TEXT("("), TEXT("\"(")); // 添加了这一行
CString strCmdLine = TEXT("cmd.exe /c \"") + strFileName + TEXT("\"");
添加了中间一行之后,问题解决。
根据测试只有左括号影响,但右括号不影响,所以这里只处理左括号,右括号没管CString strFileName = TEXT("E:/1(2017).avi");
CString strCmdLine = TEXT("cmd.exe /c \"") + strFileName + TEXT("\"");
SECURITY_ATTRIBUTES sa;
memset(&sa, 0, sizeof(sa));
sa.nLength = sizeof(sa);
STARTUPINFO si;
memset(&si, 0, sizeof(si));
si.cb = sizeof(si);
PROCESS_INFORMATION pi;
BOOL cpRet = CreateProcess(NULL, strCmdLine.GetBuffer(), &sa, &sa, FALSE,
NORMAL_PRIORITY_CLASS | CREATE_NO_WINDOW, NULL, NULL, &si, &pi);
这样修改之后,对于没有括号的可以直接播放,即不会出现那个dos窗口了,如果有括号的,则没有任何反应。直接调用_tsystem()如果不能播放,则是dos窗口闪一下消失,如果能播放,则先出现dos窗口然后弹出播放器窗口,接着dos窗口消失。
再次试了一下,如果带有左括号“(”就不行,只有右括号“)”就没有问题。调用CreateProcess()和_tsystem()都是一样的结果。