我是一名新成员,并在加入本网站后加入了这个网站,当时我遇到了一些编程问题。我想为我的大学项目编写一个媒体播放器(Win32 SDK VC++ 6.0),并且我被卡住了。我搜索了各种论坛和msdn,最后登陆了函数GetShortPathName,它使我能够通过名称中有空格的文件夹和文件进行播放。我会在这里粘贴代码,这样我就可以更清楚地知道我正在做什么。通过打开的对话框接受它们后播放文件
case IDM_FILE_OPEN :
ZeroMemory(&ofn, sizeof(ofn));
ofn.lStructSize = sizeof(ofn);
ofn.hwndOwner = hwnd;
ofn.lpstrFilter = "Media Files (All Supported Types)\0*.avi;*.mpg;*.mpeg;*.asf;*.wmv;*.mp2;*.mp3\0"
"Movie File (*.avi;*.mpg;*.mpeg)\0*.avi;*.mpg;*.mpeg\0"
"Windows Media File (*.asf;*.wmv)\0*.asf;*.wmv\0"
"Audio File (*.mp2;*.mp3)\0*.mp2;*.mp3\0"
"All Files(*.*)\0*.*\0";
ofn.lpstrFile = szFileName;
ofn.nMaxFile = MAX_PATH;
ofn.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY | OFN_ALLOWMULTISELECT | OFN_CREATEPROMPT;
ofn.lpstrDefExt = "mp3";
if(GetOpenFileName(&ofn))
{
length = GetShortPathName(szFileName, NULL, 0);
buffer = (TCHAR *) malloc (sizeof(length));
length = GetShortPathName(szFileName, buffer, length);
for(i = 0 ; i < MAX_PATH ; i++)
{
if(buffer[i] == '\\')
buffer[i] = '/';
}
SendMessage(hList,LB_ADDSTRING,0,(LPARAM)buffer);
mciSendString("open buffer alias myFile", NULL, 0, NULL);
mciSendString("play buffer", NULL, 0, NULL);
}
return 0;
使用GetShortPathName功能我得到的路径为:d:/Mp3z/DEEPBL~1/03SLEE~1.mp3 直接播放按钮的情况下把这个路径
mciSendString("open D:/Mp3jh/DEEPBL~1/03SLEE~1.mp3 alias myFile", NULL, 0, NULL);
mciSendString("play myFile", NULL, 0, NULL);
文件打开并打得很好。但只要我尝试通过打开的文件对话框打开并播放,就没有任何反应。任何输入赞赏。
为什么你认为你需要一个简短的路径名? – 2012-02-13 09:17:40
请勿使用短名称。只需通过在文件名中添加引号来避免名称中的空格:''open \“path/to/file/with space in.mp3 \”alias myFile“' – 2012-02-13 09:49:51