以下のソースでiniファイルから取得した値とcsSTingに格納された値を結合したが、
CreateProcess(NULL,(LPTSTR)p,NULL,NULL,FALSE,NORMAL_PRIORITY_CLASS,NULL,NULL,&si,&pi);
で機能してくれません。
PROCESS_INFORMATION pi;
STARTUPINFO si;
memset(&si,0,sizeof(si));
si.cb = sizeof(si);
si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = SW_SHOW;
const char * p = NULL;
char buff[1024];
DWORD dwLen = GetModuleFileName(NULL, buff, sizeof(buff));
CString csModulePath(buff);
int iPos = csModulePath.ReverseFind('\\');
CString csModuleDir = csModulePath.Left(iPos);
CString csIniFileName = csModuleDir + "\\Alarm.ini";
CString csIniTitle = "AlarmData";
CString csIniFilePath = "FilePath";
CString csPath = "C:\\Program Files\\Windows Media Player\\wmplayer.exe ";
char CFilePath[256];
GetPrivateProfileString(csIniTitle,csIniFilePath,NULL,CFilePath,sizeof(CFilePath),csIniFileName);
CString csTest;
csTest.Format("%s%s",csPath,CFilePath);
p = csTest;
csPath += CFilePath;
CreateProcess(NULL,(LPTSTR)p,NULL,NULL,FALSE,NORMAL_PRIORITY_CLASS,NULL,NULL,&si,&pi);
MessageBox("アラーム時刻です。","アラーム",MB_OK);
}
環境
使用OS (WindowsXP Pro SP2)
使用コンパイラ (Visual C++ 6.0 Enter SP6)
プロジェクトの種類 (MFC Application SDI)
擬似的に
p = "C:\\Program Files\\Windows Media Player\\wmplayer.exe C:\\test\\sound.MID";
と p の値を入れると音楽が再生してくれます。
なぜ音楽が再生されなくなるのでしょうか?
結合の仕方がだめなのでしょうか?
とりあえずデバッグしてみましょう。
適当なところにブレイクポイントを入れて、pの値をウォッチで確認してみましょう。
# HNは大切です。1回で捨てるようなHNをつけてはいけないと思います。
わかりました。
初心に帰ってC言語の本を読んでました。
するとまたエスケープシーケンスでひっかっかっていました。
csTest.Format("%s%s",csPath,CFilePath);
を
csPath.Format("\"%s\"\"%s\"",csFilePath,CFilePath);
にするとできました。
お騒がせしました。
Blueさん。ありがとうございます。
ツイート | ![]() |