Я новый участник и присоединился к этому сайту после того, как много раз обращался к нему, когда у меня возникали проблемы с программированием. Я пытаюсь закодировать медиаплеер (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 Помещая этот путь непосредственно в случай с кнопкой Play
mciSendString("open D:/Mp3jh/DEEPBL~1/03SLEE~1.mp3 alias myFile", NULL, 0, NULL);
mciSendString("play myFile", NULL, 0, NULL);
файл открывается и воспроизводится нормально. Но как только я пытаюсь открыть и воспроизвести его через диалоговое окно открытия файла, ничего не происходит. Любой вклад приветствуется.
"open \"path/to/file/with spaces in.mp3\" alias myFile"
- person David Heffernan   schedule 13.02.2012