私は新しいメンバーです。私はいくつかのプログラミング上の問題を抱えていました。私は大学のプロジェクトのためにメディアプレーヤー(Win32 SDK VC++ 6.0)をコーディングしようとしています。私は様々なフォーラムとmsdnを検索し、最終的にGetShortPathName関数に着いた。これは、名前に空白があるフォルダやファイルを再生できるようにする。ここにコードを貼り付けて、私がやろうとしていることについて、はるかに明確になるでしょう。開いているダイアログボックスを使ってファイルを受け入れた後にファイルを再生する
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;
として私はパスを取得:ファイルが開い/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);
をこのパスを置く:Dうまくいく。しかし、開いているファイルのダイアログボックスを開いて再生しようとすると、何も起こりません。すべての入力を高く評価しました。
なぜ、短いパス名が必要だと思いますか? –
短い名前は使用しないでください。ファイル名に引用符を追加するだけで、名前のスペースをエスケープすることができます: '' open \ "path/to/file /スペースin.mp3 \" alias myFile " –