/// <summary>
/// Send a command to MPC-HC
/// </summary>
/// <param name="nCmd">Command to send.</param>
/// <param name="strCmd">Some commands require a parameter.</param>
private void SendData(MPCAPI_SENDCOMMAND nCmd, string strCmd)
{
WinAPI.COPYDATASTRUCT nCDS;
if (nCmd == MPCAPI_SENDCOMMAND.CMD_OSDSHOWMESSAGE)
{
MPC_OSDDATA osdData = new MPC_OSDDATA
{
nMsgPos = (int)m_OSDMSGPos,
nDurationMS = m_OSDMSGDur,
strMsg = strCmd
};
nCDS = new WinAPI.COPYDATASTRUCT
{
dwData = (IntPtr)(int)nCmd,
cbData = Marshal.SizeOf(osdData)
};
nCDS.lpData = Marshal.AllocCoTaskMem(nCDS.cbData);
Marshal.StructureToPtr(osdData, nCDS.lpData, false);
}
else
{
nCDS = new WinAPI.COPYDATASTRUCT
{
dwData = (IntPtr)(int)nCmd,
cbData = (strCmd.Length + 1) * 2,
lpData = Marshal.StringToCoTaskMemUni(strCmd)
};
}
IntPtr cdsPtr = Marshal.AllocCoTaskMem(Marshal.SizeOf(nCDS));
Marshal.StructureToPtr(nCDS, cdsPtr, false);
WinAPI.SendMessage(m_hWndMPC, WinAPI.WM_COPYDATA, m_hWnd, cdsPtr);
Marshal.FreeCoTaskMem(cdsPtr);
Marshal.FreeCoTaskMem(nCDS.lpData);
}