ShellExecuteA,但我不知道扩展名


std::string str1 = "C:\Users\user\Desktop\Notes";
ShellExecuteA(NULL, "open", str1.c_str(), NULL, NULL, SW_SHOWNORMAL);

代码不值钱。

我在DJ程序中有一个.mp3。在其中一个标签中,它保存了相关视频的文件名。所有的视频都是.mpeg

使用DJ软件的API,我可以抓取标签。我知道视频文件在哪里(都在一个文件夹里)。我可以打开视频与ShellExecuteA(),因为虽然标签可能不包含完整的filename+extension,我知道扩展。

现在的问题-我想开始使用.avi.h254或任何东西。我不知道扩展名了,ShellExecuteA()需要一个扩展名。

我能做什么?

我的猜测是:

  • 如果ShellExecuteA()返回一个错误(不确定它做),如果它可以暴力破解它;是.mpeg吗?是.avi吗?是.h264吗?等等…

  • 在文件名缺少扩展名的已知位置进行搜索,然后用它找到的任何内容获取完整的文件名(所有文件名都是唯一的,甚至不包括扩展名)。

我知道我可以在.mp3标签中添加扩展名,但是我宁愿不这样做的原因。

ShellExecute不需要扩展。它需要确切的文件名。如果扩展隐藏在Windows资源管理器-使他们可见。如果你因为其他原因不知道扩展名,使用FindFirst和通配符*(Notes*)来查找全名。

findfirst得到了我想要的结果显然有比sstream更直接的方法但是还有其他对实际问题不重要的东西

std::stringstream sstrm1, sstrm2;
sstrm1 << "C:\Users\user\Desktop\";
sstrm2 << sstrm1.str() << "Notes.*";
HANDLE hFind;
WIN32_FIND_DATAA data;
hFind = FindFirstFileA(sstrm2.str().c_str(), &data);
sstrm1 << data.cFileName;
ShellExecuteA(NULL, "open", sstrm1.str().c_str(), NULL, NULL, SW_SHOWNORMAL);

相关内容

最新更新