所以我最后使用了jiggunjer的生成批处理文件的建议。我正在编程的软件旨在通过加载 vlc 电影播放器的外部实例(或可以使用任何其他电影播放器)以编程方式播放电影。
此代码位于 PlayMovie(char* MovieFileName) 函数中。
这将使用一行代码创建批处理文件,然后执行批处理文件,然后从 Movies// 文件夹中生成的 ini 文件中获取发布的数据。
//Create batch file
FILE * pFile;
//char* movieinfowritebuffer = "ffprobe -v quiet -print_format ini -show_format -show_streams Movies/Kai.mp4 > Movies/Kai.mp4.ini";
//Minf_wrBuffer = Minf_finalpath
char* Minf_wrBuffer = &Minf_finalpath[0u];
pFile = fopen ("MPlayer_MovieInfo.bat", "wb+");
fwrite (Minf_wrBuffer,strlen(Minf_wrBuffer),1, pFile);
fclose (pFile);
Sleep(250);
//MessageBox(NULL,"Next, we use ShellExecuteA to launch the .bat file.","LAUNCHER",NULL);
//Run batch file to create mp4 info ini
ShellExecuteA(NULL,"open","MPlayer_MovieInfo.bat",NULL,NULL,SW_HIDE);
Sleep(250);
//MessageBox(NULL,"Now, we grab the duration of the movie file from the ini file using GetPrivateProfileString.","LAUNCHER",NULL);
//Get duration from ini file
//Get the filename to create...
std::string iniFileToCreate = "Movies\\" + Minf_MovieName + ".ini";
char MovieDurationBuffer[256];
GetPrivateProfileString("streams.stream.1",
"duration",
"Default",
MovieDurationBuffer,
256,
iniFileToCreate.c_str());
float MovieDuration = atof(MovieDurationBuffer);
//Now play with MovieDuration
float MovieDurationTruncated = MovieDuration;
int tmp = MovieDurationTruncated * 100000; // 44.8 truncated to 44
MovieDurationTruncated = tmp / 100.0; // 4.4
char MovieDurationChar[20]; sprintf(MovieDurationChar, "%1.0f", MovieDurationTruncated-3);
int MovieDurationInt;
sscanf(MovieDurationChar, "%d", &MovieDurationInt);