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);