怎样使用MFC 调用windows系统程序 windows media player

背景:我需要一个函数,启动windows系统中的程序 windows media player ,用于播放我所指定的音频文件;

问题:百度网上的大多数用法,都是在mfc中插入 windows media player的控件,进行相关操作,对于此种用法我不多做介绍。但是我的程序是无界面的,所以上述行为对于我来说并不适用,而且我对于player的应用比较单一:指定播放、停止关闭。

环境:windows 7 的64位操作系统,VS2008的开发环境。

代码实现:

BOOL PalySoundsWindows(const CString &strVoiceFile, CString &sError);

/******************************************************************
* 函数名称:  PalySoundsWindows
* 函数说明:  启动系统windows media player程序,播放指定音频文件
* 参    数:  strVoiceFile, 音频文件全路径;sError,错误代码;
* 返 回 值:  BOOL
* 作 者:      XXXXXXXXX
* 日 期:  2015/10/28 
*******************************************************************/
BOOL CCommonFun::PalySoundsWindows(const CString &strVoiceFile, CString &sError)
{
    //获取系统安装目录
CHAR szPath[MAX_PATH] = {0};   
SHGetSpecialFolderPath(NULL, szPath,CSIDL_PROGRAM_FILES, FALSE);

CString sWMPlayerPath = "";
sWMPlayerPath.Format(_T("%s\\Windows Media Player\\wmplayer.exe"), szPath);
CString sVoicePath = strVoiceFile;


HINSTANCE hNewExe = ShellExecute(NULL,NULL, sWMPlayerPath, sVoicePath,NULL,SW_SHOW);


if ((DWORD)hNewExe <= 32)
{
CString sFormat;
sFormat.Format("return value:%d\n", (DWORD)hNewExe);
sError = sFormat;
return FALSE;
}
return TRUE;
}


//下面是停止windows media player程序的代码

if (CCommonFun::IsRunProcess(_T("wmplayer.exe")))

{
CCommonFun::TerminateProcessEx(_T("wmplayer.exe"));
}

/******************************************************************
* 函数介绍:结束指定进程名称
* 输入参数:
* 输出参数:
* 返回值  :
*******************************************************************/
void  CCommonFun::TerminateProcessEx(const CString &sProcessName)
{

HANDLE handle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
PROCESSENTRY32 info; 
info.dwSize = sizeof(PROCESSENTRY32); 

Process32First(handle, &info); 
while(Process32Next(handle, &info)!=FALSE) 
{   
if (sProcessName.CompareNoCase(info.szExeFile) == 0)   
{   
if (HANDLE hProcess = OpenProcess(PROCESS_TERMINATE,FALSE, info.th32ProcessID))
{
BOOL bOk = TerminateProcess(hProcess,0);    
bOk = CloseHandle(hProcess);
}
}   



CloseHandle(handle);
}


/******************************************************************
* 函数介绍:判断指定进程是否在运行中
* 输入参数:
* 输出参数:
* 返回值  :
*******************************************************************/
BOOL CCommonFun::IsRunProcess( const CString &sProcessName )
{
DWORD th32ProcessID = 0;//
return FindProcess(sProcessName, th32ProcessID);
}


/******************************************************************
* 函数介绍:查找进程
* 输入参数:
* 输出参数:
* 返回值  :
*******************************************************************/
BOOL CCommonFun::FindProcess(const CString &sProcessName, DWORD &th32ProcessID)
{
BOOL bResult = FALSE;
HANDLE handle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);//
//PROCESSENTRY32 *info = new PROCESSENTRY32; 
//info->dwSize=sizeof(PROCESSENTRY32); 


PROCESSENTRY32 info; 
info.dwSize = sizeof(PROCESSENTRY32); 
Process32First(handle, &info); 
while (Process32Next(handle, &info) != FALSE) 
{   
if (sProcessName.CompareNoCase(info.szExeFile) == 0)   
{   
bResult = TRUE;
th32ProcessID = info.th32ProcessID;
break;
}   

CloseHandle(handle);


return bResult;
}


你可能感兴趣的:(C++)