コード例 #1
0
        /// <summary>
        /// 获取开窗
        /// </summary>
        /// <param name="info">窗口操作信息</param>
        /// <param name="struWinCfg">窗口信息</param>
        /// <param name="struWinParamCfg">窗口其他信息</param>
        /// <returns>TRUE:成功 FALSE:失败</returns>
        public static bool WallGetWinCfg(ref WinCtrlInfo info, ref NET_DVR_VIDEOWALLWINDOWPOSITION struWinCfg, ref NET_DVR_WALLWINPARAM struWinParamCfg)
        {
            uint m_dwWallNo = info.WallNo;
            uint m_dwRes    = 0;
            uint m_dwWinNo  = info.WinNo;

            //窗口号(组合):1字节电视墙号+1字节保留+2字节窗口号
            uint dwWinNum = ((m_dwWallNo & 0xff) << 24) + ((m_dwRes & 0xff) << 16) + (m_dwWinNo & 0xff);

            IntPtr lpInBuffer = Marshal.AllocHGlobal(4);

            Marshal.StructureToPtr(dwWinNum, lpInBuffer, false);

            //窗口参数
            struWinCfg = new NET_DVR_VIDEOWALLWINDOWPOSITION();
            Int32  nSize       = Marshal.SizeOf(struWinCfg);
            IntPtr lpOutBuffer = Marshal.AllocHGlobal(nSize);

            Marshal.StructureToPtr(struWinCfg, lpOutBuffer, false);

            //状态参数
            UInt32 dwStatusList = 0;
            IntPtr lpStatusList = Marshal.AllocHGlobal(4);

            Marshal.StructureToPtr(dwStatusList, lpStatusList, false);
            bool b = false;

            if (!NET_DVR_GetDeviceConfig(info.UserId, NET_DVR_GET_VIDEOWALLWINDOWPOSITION, 1, lpInBuffer, 4, lpStatusList, lpOutBuffer, (UInt32)nSize))
            {
                iLastErr = NET_DVR_GetLastError();
                strErr   = "NET_DVR_WALLWIN_GET failed, error code= " + iLastErr;
                //获取窗口参数失败,输出错误号 Failed to set the window parameters of device and output the error code
                return(false);
            }
            else
            {
                struWinCfg = (NET_DVR_VIDEOWALLWINDOWPOSITION)Marshal.PtrToStructure(lpOutBuffer, typeof(NET_DVR_VIDEOWALLWINDOWPOSITION));
                //窗口在电视墙上的坐标位置
                b = WallGetWinParam(ref info, ref struWinParamCfg);
            }
            Marshal.FreeHGlobal(lpInBuffer);
            Marshal.FreeHGlobal(lpOutBuffer);
            Marshal.FreeHGlobal(lpStatusList);
            return(b);
        }
コード例 #2
0
        /// <summary>
        /// 获取所有窗口号
        /// </summary>
        /// <param name="lUserID">用户id</param>
        /// <param name="byWallNo">电视墙号</param>
        /// <param name="dwWinNo">输出分屏数量</param>
        /// <returns>返回窗口信息数组</returns>
        public static NET_DVR_VIDEOWALLWINDOWPOSITION[] GetAllWinInfo(int lUserID, int byWallNo, ref uint[] dwWinNo)
        {
            dwWinNo = new uint[MAX_VM_WIN_NUM * 16];
            int iWinCount = 0;
            int iRet      = 0;
            NET_DVR_VIDEOWALLWINDOWPOSITION pTemp = new NET_DVR_VIDEOWALLWINDOWPOSITION();//[MAX_WALL_WIN_COUNT * Marshal.SizeOf(new NET_DVR_VIDEOWALLWINDOWPOSITION())];
            Int32  nSize       = 4 + Marshal.SizeOf(pTemp);
            IntPtr lpOutBuffer = Marshal.AllocHGlobal(nSize);

            Marshal.StructureToPtr(pTemp, lpOutBuffer, false);
            IntPtr pt       = new IntPtr();
            uint   dwCount  = (uint)(4 + MAX_WALL_WIN_COUNT * Marshal.SizeOf(new NET_DVR_VIDEOWALLWINDOWPOSITION()));
            int    dwWallNo = byWallNo;

            dwWallNo <<= 24;
            if (!NET_DVR_GetDeviceConfig(lUserID, NET_DVR_GET_VIDEOWALLWINDOWPOSITION, 0xffffffff, (IntPtr)dwWallNo, 4, IntPtr.Zero, lpOutBuffer, (UInt32)nSize))
            {
                iRet = HikOperate.GetLastError();
                return(new NET_DVR_VIDEOWALLWINDOWPOSITION[0]);
            }
            else
            {
                NET_DVR_VIDEOWALLWINDOWPOSITION   lpWinPos1 = (NET_DVR_VIDEOWALLWINDOWPOSITION)Marshal.PtrToStructure(lpOutBuffer, typeof(NET_DVR_VIDEOWALLWINDOWPOSITION));
                NET_DVR_VIDEOWALLWINDOWPOSITION[] lpWinPos  = (NET_DVR_VIDEOWALLWINDOWPOSITION[])Marshal.PtrToStructure(pt, typeof(NET_DVR_VIDEOWALLWINDOWPOSITION[]));
                int dwWinCount = lpWinPos.Length;
                //= pt;
                for (int i = 0; i < dwWinCount; i++)
                {
                    int iSubMode = GetSubWinInfo(lUserID, lpWinPos[i].dwWindowNo);
                    if (iSubMode == -1)
                    {
                        dwWinNo[iWinCount++] = lpWinPos[i].dwWindowNo;
                        continue;
                    }
                    for (int j = 0; j < iSubMode; j++)
                    {
                        dwWinNo[iWinCount++] = (uint)(((j + 1) << 16) + lpWinPos[i].dwWindowNo);
                    }
                    ;
                }
                iRet = iWinCount;
            }
            return(null);
        }
コード例 #3
0
        /// <summary>
        /// 开窗设置
        /// </summary>
        /// <param name="info">窗口操作信息</param>
        /// <returns>TRUE:成功 FALSE:失败</returns>
        public static bool WallSetWinCfg(WinCtrlInfo info)
        {
            NET_DVR_VIDEOWALLWINDOWPOSITION m_struWinCfg = new NET_DVR_VIDEOWALLWINDOWPOSITION();

            uint m_dwWallNo = info.WallNo;
            uint m_dwRes    = 0;
            uint m_dwWinNo  = info.WinNo;

            //窗口号(组合):1字节电视墙号+1字节保留+2字节窗口号
            uint dwWinNum = ((m_dwWallNo & 0xff) << 24) + ((m_dwRes & 0xff) << 16) + (m_dwWinNo & 0xff);

            ///////////////////////////////////////////////////////////////////////////////
            //输入参数
            NET_DVR_IN_PARAM struInputParam = new NET_DVR_IN_PARAM();
            IntPtr           lpBuf          = Marshal.AllocHGlobal(4);

            Marshal.StructureToPtr(dwWinNum, lpBuf, false);
            struInputParam.struCondBuf.pBuf = lpBuf; //输入参数缓冲区,开窗的电视墙号,窗口号由设备自动分配
            struInputParam.struCondBuf.nLen = 4;

            //窗口参数,包括使能、位置坐标等
            m_struWinCfg.dwSize   = (uint)Marshal.SizeOf(m_struWinCfg);
            m_struWinCfg.byEnable = info.IsEnable;
            m_struWinCfg.struRect.dwXCoordinate = ushort.Parse((info.IndexX * winBaseX).ToString());
            m_struWinCfg.struRect.dwYCoordinate = ushort.Parse((info.IndexY * winBaseY).ToString());
            m_struWinCfg.struRect.dwWidth       = winBaseX;
            m_struWinCfg.struRect.dwHeight      = winBaseY;

            Int32  nSize   = Marshal.SizeOf(m_struWinCfg);
            IntPtr lpInBuf = Marshal.AllocHGlobal(nSize);

            Marshal.StructureToPtr(m_struWinCfg, lpInBuf, false);
            struInputParam.struInParamBuf.pBuf = lpInBuf; //输入参数缓冲区,开窗的窗口参数
            struInputParam.struInParamBuf.nLen = (uint)nSize;
            struInputParam.dwRecvTimeOut       = 0;       //数据接收超时时间,0表示接口默认超时

            /////////////////////////////////////////////////////////////////////////////
            //输出参数
            NET_DVR_OUT_PARAM struOutParam = new NET_DVR_OUT_PARAM();
            //输出参数缓冲区,dwCount个窗口号(组合),dwCount为0
            IntPtr lpOutBuf = Marshal.AllocHGlobal(4);

            Marshal.StructureToPtr(dwWinNum, lpOutBuf, false);
            struOutParam.struOutBuf.pBuf = lpOutBuf;
            struOutParam.struOutBuf.nLen = 4;

            //状态参数
            UInt32 dwStatusList = 0;
            IntPtr lpStatusList = Marshal.AllocHGlobal(4);

            Marshal.StructureToPtr(dwStatusList, lpStatusList, false);
            bool b = NET_DVR_SetDeviceConfigEx(info.UserId, NET_DVR_SET_VIDEOWALLWINDOWPOSITION, 1, ref struInputParam, ref struOutParam);

            if (!b)
            {
                iLastErr = NET_DVR_GetLastError();
                strErr   = "NET_DVR_SET_VIDEOWALLWINDOWPOSITION failed, error code= " + iLastErr;
                //设置窗口参数失败,输出错误号 Failed to set the window parameters of device and output the error code
            }
            Marshal.FreeHGlobal(lpBuf);
            Marshal.FreeHGlobal(lpInBuf);
            Marshal.FreeHGlobal(lpOutBuf);
            Marshal.FreeHGlobal(lpStatusList);
            return(b);
        }