1 Win7下使用mciSendCommand播放音樂的代碼
/* 2 MCI方式播放音樂 */
if (!m_Mp3FilePath.empty())
{
m_MciOpen.lpstrDeviceType = "mpegvideo"; //要操作的文件類型
m_MciOpen.lpstrElementName = m_Mp3FilePath.c_str(); //要操作的文件路徑
MCIERROR mcierror = mciSendCommand(0, MCI_OPEN, MCI_OPEN_TYPE | MCI_OPEN_ELEMENT, (DWORD)&m_MciOpen); //打開文件命令
if (mcierror)
{
}
else
{
m_MciPlay.dwCallback = (DWORD)NULL;
m_MciPlay.dwFrom = (DWORD)0; //播放起始位置ms爲單位
mciSendCommand(m_MciOpen.wDeviceID, MCI_PLAY, MCI_NOTIFY | MCI_FROM, (DWORD)&m_MciPlay);
}
}
最先從網上抄的這段很酸爽的代碼,在win7開發打包運行都沒事,然後一把程序發佈到Win10上運行一下子就崩潰。
2 Win10下使用mciSendCommand播放音樂的正確代碼代碼
認真查看了微軟的文檔的之後發現,
MCIERROR mcierror = mciSendCommand(0, MCI_OPEN, MCI_OPEN_TYPE | MCI_OPEN_ELEMENT, (DWORD)&m_MciOpen);
中使用的是DWORD_PTR,而不是DWORD。
然後就把代碼改成下面這樣的:
/* 2 MCI方式播放音樂 */
if (!m_Mp3FilePath.empty())
{
m_MciOpen.lpstrDeviceType = "mpegvideo"; //要操作的文件類型
m_MciOpen.lpstrElementName = m_Mp3FilePath.c_str(); //要操作的文件路徑
MCIERROR mcierror = mciSendCommand(0, MCI_OPEN, MCI_OPEN_TYPE | MCI_OPEN_ELEMENT, (DWORD_PTR)&m_MciOpen); //打開文件命令
if (mcierror)
{
}
else
{
m_MciPlay.dwCallback = (DWORD)NULL;
m_MciPlay.dwFrom = (DWORD)0; //播放起始位置ms爲單位
mciSendCommand(m_MciOpen.wDeviceID, MCI_PLAY, MCI_NOTIFY | MCI_FROM, (DWORD_PTR)&m_MciPlay);
}
}
果然可以了。
3 循環播放音樂
將:
mciSendCommand(m_MciOpen.wDeviceID, MCI_PLAY, MCI_NOTIFY | MCI_FROM, (DWORD_PTR)&m_MciPlay);
修改爲
mciSendCommand(m_MciOpen.wDeviceID, MCI_PLAY, MCI_DGV_PLAY_REPEAT, (DWORD_PTR)&m_MciPlay); // 重複播放
大家有興趣可以訪問我的個站:www.stubbornhuang.com