예제 #1
0
        /// <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);
        }
예제 #2
0
 /// <summary>
 /// Send a command to MPC-HC
 /// </summary>
 /// <param name="nCmd">Command to send.</param>
 private void SendData(MPCAPI_SENDCOMMAND nCmd)
 {
     SendData(nCmd, String.Empty);
 }