using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;

using System.Text;

using System.Runtime.InteropServices;

namespace MCI_test_mciSendString
{
    /// <summary>
    /// Summary description for Form1.
    /// </summary>
    public class Form1 : System.Windows.Forms.Form
    {

    //    MCIERROR mciSendString(
    //        LPCTSTR lpszCommand,  
    //        LPTSTR lpszReturnString,  
    //        UINT cchReturn,       
    //        HANDLE hwndCallback   
    //        );

        [DllImport("winmm.dll")]
        public static extern int mciSendString(
            string lpszCommand,  
            StringBuilder lpszReturnString,  
            int cchReturn,       
            IntPtr hwndCallback   
            );

//        BOOL mciGetErrorString(
//            DWORD fdwError,        
//            LPTSTR lpszErrorText,  
//            UINT cchErrorText      
//            );

        [DllImport("winmm.dll")]
        public static extern int mciGetErrorString(
            int fdwError,  
            StringBuilder lpszErrorText,
            int cchErrorText         
            );

        private System.Windows.Forms.Label label1;
        private System.Windows.Forms.TextBox textCmdString;
        private System.Windows.Forms.Button buttonDoIt;
        private System.Windows.Forms.Label label2;
        private System.Windows.Forms.Label labelErrorString;
        private System.Windows.Forms.Label labelReturnString;
        private System.Windows.Forms.Label label4;
        /// <summary>
        /// Required designer variable.
        /// </summary>
        private System.ComponentModel.Container components = null;

        public Form1()
        {
            //
            // Required for Windows Form Designer support
            //
            InitializeComponent();

            //
            // TODO: Add any constructor code after InitializeComponent call
            //
        }

        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        protected override void Dispose( bool disposing )
        {
            if( disposing )
            {
                if (components != null)
                {
                    components.Dispose();
                }
            }
            base.Dispose( disposing );
        }

        #region Windows Form Designer generated code
        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            this.label1 = new System.Windows.Forms.Label();
            this.textCmdString = new System.Windows.Forms.TextBox();
            this.buttonDoIt = new System.Windows.Forms.Button();
            this.label2 = new System.Windows.Forms.Label();
            this.labelErrorString = new System.Windows.Forms.Label();
            this.labelReturnString = new System.Windows.Forms.Label();
            this.label4 = new System.Windows.Forms.Label();
            this.SuspendLayout();
            //
            // label1
            //
            this.label1.Location = new System.Drawing.Point(48, 16);
            this.label1.Name = "label1";
            this.label1.Size = new System.Drawing.Size(488, 23);
            this.label1.TabIndex = 0;
            this.label1.Text = "Enter Command String";
            //
            // textCmdString
            //
            this.textCmdString.Location = new System.Drawing.Point(40, 48);
            this.textCmdString.Name = "textCmdString";
            this.textCmdString.Size = new System.Drawing.Size(480, 20);
            this.textCmdString.TabIndex = 1;
            this.textCmdString.Text = "";
            //
            // buttonDoIt
            //
            this.buttonDoIt.Location = new System.Drawing.Point(208, 88);
            this.buttonDoIt.Name = "buttonDoIt";
            this.buttonDoIt.Size = new System.Drawing.Size(128, 23);
            this.buttonDoIt.TabIndex = 0;
            this.buttonDoIt.Text = "Execute Command";
            this.buttonDoIt.Click += new System.EventHandler(this.buttonDoIt_Click);
            //
            // label2
            //
            this.label2.Location = new System.Drawing.Point(40, 232);
            this.label2.Name = "label2";
            this.label2.TabIndex = 3;
            this.label2.Text = "Error String";
            //
            // labelErrorString
            //
            this.labelErrorString.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
            this.labelErrorString.Location = new System.Drawing.Point(40, 264);
            this.labelErrorString.Name = "labelErrorString";
            this.labelErrorString.Size = new System.Drawing.Size(480, 48);
            this.labelErrorString.TabIndex = 4;
            //
            // labelReturnString
            //
            this.labelReturnString.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
            this.labelReturnString.Location = new System.Drawing.Point(40, 160);
            this.labelReturnString.Name = "labelReturnString";
            this.labelReturnString.Size = new System.Drawing.Size(480, 48);
            this.labelReturnString.TabIndex = 5;
            //
            // label4
            //
            this.label4.Location = new System.Drawing.Point(40, 128);
            this.label4.Name = "label4";
            this.label4.TabIndex = 6;
            this.label4.Text = "Return String:";
            //
            // Form1
            //
            this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
            this.ClientSize = new System.Drawing.Size(640, 325);
            this.Controls.AddRange(new System.Windows.Forms.Control[] {
                                                                          this.label4,
                                                                          this.labelReturnString,
                                                                          this.labelErrorString,
                                                                          this.label2,
                                                                          this.buttonDoIt,
                                                                          this.textCmdString,
                                                                          this.label1});
            this.Name = "Form1";
            this.Text = "Test MCI Command Strings";
            this.ResumeLayout(false);

        }
        #endregion

        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.Run(new Form1());
        }

        private void buttonDoIt_Click(object sender, System.EventArgs e)
        {
            string sCmd = textCmdString.Text;
            StringBuilder sbErr = new StringBuilder(256);
            StringBuilder sbRet = new StringBuilder(256);
            int error = mciSendString(sCmd, sbRet, 256, IntPtr.Zero);
            mciGetErrorString(error, sbErr, 256);
            string sRet = sbRet.ToString();
            labelReturnString.Text = sRet;
            string sErr = sbErr.ToString();
            labelErrorString.Text = sErr;
            textCmdString.Text = "";
            textCmdString.Focus();
        }

    }
}