日韩精品 中文字幕 动漫,91亚洲午夜一区,在线不卡日本v一区v二区丶,久久九九国产精品自在现拍

正文

家庭視頻監(jiān)控系統(tǒng)(14)

C#項(xiàng)目開發(fā)案例全程實(shí)錄(第2版) 作者:明日科技


例如,下面的代碼使用SerialPort類向COM1端口中寫入數(shù)據(jù),并進(jìn)行異步讀取。

using System.IO.Ports;

using System.Threading;

//實(shí)例化串口對(duì)象(默認(rèn):COM1,9600,e,8,1)

SerialPort SPort = new SerialPort();

private void Form1_Load(object sender, EventArgs e)

{

//更改參數(shù)

SPort.PortName = "COM1";

SPort.BaudRate = 9600;

SPort.Parity = Parity.None;

SPort.DataBits = 8;

SPort.StopBits = StopBits.One;

SPort.ReadBufferSize = 4096;

}

//發(fā)送并接收串口信息

private void button1_Click(object sender, EventArgs e)

{

//打開串口

if (SPort.IsOpen == false)

{

SPort.Open();

}

byte[] bytesSend = System.Text.Encoding.Default.GetBytes(richTextBox1.Text);

SPort.Write(bytesSend, 0, bytesSend.Length);

MessageBox.Show("發(fā)送串口信息成功");

ReceiveData(SPort);

}

//異步讀取

private void AsyReceiveData(object serialPortobj)

{

SerialPort serialport = (SerialPort)serialPortobj;

System.Threading.Thread.Sleep(1000);

MessageBox.Show(serialport.ReadExisting());

serialport.Close();

}

//開啟接收數(shù)據(jù)線程

private void ReceiveData(SerialPort serialPort)

{

//異步接收數(shù)據(jù)線程

Thread threadReceiveSub = new Thread(new ParameterizedThreadStart(AsyReceiveData));

threadReceiveSub.Start(serialPort);

}

1.6.3 視頻監(jiān)控模塊實(shí)現(xiàn)過程

視頻監(jiān)控模塊的具體實(shí)現(xiàn)步驟如下:

(1)新建一個(gè)Windows窗體,命名為frmMain.cs,主要用于實(shí)現(xiàn)視頻監(jiān)控功能及各種監(jiān)控控制。該窗體用到的主要控件如表1.16所示。

(2)frmMain.cs代碼文件中,首先實(shí)例化公共類PelcoD和SoftReg的兩個(gè)對(duì)象,以便調(diào)用其中的方法,然后實(shí)例化一個(gè)SerialPort類對(duì)象,用來向云臺(tái)發(fā)送串口消息,聲明一個(gè)int類型的變量、兩個(gè)byte類型的變量和一個(gè)byte類型的數(shù)組,分別用來獲取視頻采集卡的路數(shù)、存儲(chǔ)Pelco-D協(xié)議中的地址碼、數(shù)據(jù)碼和要向云臺(tái)傳送的串口消息。關(guān)鍵代碼如下:

例程15  代碼位置:光盤\TM\01\VWMS\VWMS\frmMain.cs

PelcoD pelcod = new PelcoD();

SoftReg softreg = new SoftReg();

SerialPort serialPort = new SerialPort("COM1", 2400, Parity.None, 8);       //實(shí)例化串口信息類,指定串口號(hào)

int m_dwDevNum = 0;                                             //存儲(chǔ)視頻路數(shù)

byte addressin = Byte.Parse(Convert.ToString(0x01));                    //Pelco-D協(xié)議中的第一地址碼

byte speedin = Byte.Parse(Convert.ToString(0xff));                      //Pelco-D協(xié)議中的第二地址碼

byte[] messagesend;                                              //存儲(chǔ)要發(fā)送的串口消息

frmMain.cs代碼文件中,自定義了兩個(gè)方法startMonitor()和stopMove()。其中,startMonitor()方法用來實(shí)現(xiàn)開始監(jiān)控功能,其實(shí)現(xiàn)代碼如下:

例程16  代碼位置:光盤\TM\01\VWMS\VWMS\frmMain.cs

//開始監(jiān)控

protected void startMonitor()

{

   if (VideoOperate.VCAInitSdk(this.Handle, VideoOperate.DISPLAYTRANSTYPE.PCI_MEMORY_VIDEOMEMORY, false))

    {

u  m_dwDevNum = VideoOperate.VCAGetDevNum();

        if (m_dwDevNum == 0)

        {

            MessageBox.Show("VC404卡驅(qū)動(dòng)程序沒有安裝");

        }

        else

        {

            for (int i = 0; i < m_dwDevNum; i++)

            {

v            VideoOperate.VCAOpenDevice(i, plVideo1.Handle);

w            VideoOperate.VCAStartVideoPreview(i);

            }

        }

    }

}

U 代碼貼士

u VCAGetDevNum():該方法用來返回系統(tǒng)中卡號(hào)數(shù)量,即為SAA7134硬件數(shù)目。

v VCAOpenDevice():該方法用來打開指定卡號(hào)的設(shè)備,并分配相應(yīng)的系統(tǒng)資源。

w VCAStartVideoPreview():該方法用來開始視頻預(yù)覽。

stopMove()方法用來實(shí)現(xiàn)停止移動(dòng)視頻監(jiān)控畫面功能,其實(shí)現(xiàn)代碼如下:

例程17  代碼位置:光盤\TM\01\VWMS\VWMS\frmMain.cs

//停止移動(dòng)

protected void stopMove()

{

    messagesend = pelcod.CameraStop(addressin);

u   serialPort.Open();

v   serialPort.Write(messagesend, 0, 7);

w   serialPort.Close();

}

U 代碼貼士

u Open():該方法用來打開一個(gè)新的串行端口連接。

v Write():該方法用來將數(shù)據(jù)寫入串行端口輸出緩沖區(qū)。

w Close():該方法用來關(guān)閉端口連接。

frmMain窗體在加載時(shí),首先從注冊(cè)表中提取注冊(cè)信息,以判斷該軟件是否注冊(cè),如果已經(jīng)注冊(cè),則在窗體標(biāo)題欄中顯示“已注冊(cè)”字樣,同時(shí)開始視頻監(jiān)控;否則,在窗體標(biāo)題欄中顯示“未注冊(cè)”字樣,并提示用戶已試用次數(shù)。frmMain窗體的Load事件的代碼如下:

例程18  代碼位置:光盤\TM\01\VWMS\VWMS\frmMain.cs

//窗體加載時(shí),初始化視頻卡,并開始預(yù)覽視頻

private void frmMain_Load(object sender, EventArgs e)

{

    RegistryKey retkey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("software", true).CreateSubKey ("wxk").CreateSubKey("wxk.INI"); 

    foreach (string strRNum in retkey.GetSubKeyNames()) //判斷是否注冊(cè)

    {

        if (strRNum == softreg.getRNum())

        {

            this.Text = "家庭視頻監(jiān)控系統(tǒng)(已注冊(cè))";

            btnReg.Enabled = false;

            startMonitor();

            return;

        }

    }

    this.Text = "家庭視頻監(jiān)控系統(tǒng)(未注冊(cè))";

    btnReg.Enabled = true;

    btnSetMonitor.Enabled = btnAutoMonitor.Enabled = false;

    startMonitor();

    MessageBox.Show("您現(xiàn)在使用的是試用版,該軟件可以免費(fèi)試用30次!","提示", MessageBoxButtons.OK, MessageBoxIcon.Information);

    Int32 tLong;

    try

    {

        //獲取注冊(cè)表值

        tLong = (Int32)Registry.GetValue("HKEY_LOCAL_MACHINE\\SOFTWARE\\angel", "UseTimes", 0);

        MessageBox.Show("感謝您已使用了" + tLong + "次", "提示", MessageBoxButtons.OK, MessageBoxIcon. Information);

    }

    catch

    {

        //寫入注冊(cè)表信息

        Registry.SetValue("HKEY_LOCAL_MACHINE\\SOFTWARE\\angel", "UseTimes", 0, RegistryValueKind. DWord);

        MessageBox.Show("歡迎新用戶使用本軟件", "提示", MessageBoxButtons.OK, MessageBoxIcon. Information);

    }

    tLong = (Int32)Registry.GetValue("HKEY_LOCAL_MACHINE\\SOFTWARE\\angel", "UseTimes", 0);

    if (tLong < 30)

    {

        int Times = tLong + 1;

        //將軟件使用次數(shù)寫入注冊(cè)表

        Registry.SetValue("HKEY_LOCAL_MACHINE\\SOFTWARE\\angel", "UseTimes", Times);

    }

    else

    {

        MessageBox.Show("試用次數(shù)已到", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);

        Application.Exit();

    }

}

 


上一章目錄下一章

Copyright ? 讀書網(wǎng) rgspecialties.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號(hào) 鄂公網(wǎng)安備 42010302001612號(hào)