zoukankan      html  css  js  c++  java
  • C# 视频监控系列(15):总结贴——可能用到的C# WinForm技术小结

    前言

         本章主要把可能用到的C# WinForm 功能性代码在这里汇总一下,以备实现其他功能来满足客户的其他需求,或者方便自己开发。

    注意

         本系列文章限于学习交流,注重过程,由于涉及公司,所以不提供源代码下载,非常抱歉!!但是请大家放心,核心、实现以及其他能够贴出来的代码我都会贴出来,并且争取尽所能的回答留言里的每一个问题,感谢大家关注,欢迎交流 :)

    系列

         1.     C# 视频监控系列(1):准备

         2.     C# 视频监控系列(2):客户端——封装API

         3.     C# 视频监控系列(3):客户端——连接服务器

         4.     C# 视频监控系列(4):客户端——音频接收和抓图

         5.     C# 视频监控系列(5):客户端——给服务器端发送字符串和录像(数据捕获)

         6.     C# 视频监控系列(6):服务器端——封装API(上) [HikServer.dll]

         7.     C# 视频监控系列(7):服务器端——封装API(下) [DS40xxSDK.dll]

         8.     C# 视频监控系列(8):服务器端——预览和可被客户端连接

         9.     C# 视频监控系列(9):服务器端——数据捕获(抓图 + 录像)

         10.     C# 视频监控系列(10):服务器端——验证、设置画面质量、字幕叠加、板卡序列号

         11.     C# 视频监控系列(11):H264播放器——封装API[HikPlayM4.dll]

         12.     C# 视频监控系列(12):H264播放器——播放录像文件

         13.     C# 视频监控系列(13):H264播放器——控制播放和截图 

         14.     C# 视频监控系列(14):总结贴——VC++代码转成C#小结 

         15.     C# 视频监控系列(15):总结贴——可能用到的C# WinForm技术小结 

    正文

         1.     IntPtr转换成byte[]

            public byte[] ConvertToBytes(IntPtr dataBuf, int length)
            {
                
    byte[] byteBuf = new byte[length];
                Marshal.Copy(dataBuf, byteBuf, 
    0, length);
                
    return byteBuf;
            }

         2.     读写INI文件

              一般用于读写配置文件

        /// <summary>
        
    /// 读写INI文件
        
    /// </summary>
        public class IniFile
        {
            
    /// <summary>
            
    /// 文件INI名称
            
    /// </summary>
            public string Path;

            
    /// <summary>
            
    /// 声明读写INI文件的API函数 
            
    /// </summary>
            
    /// <param name="section"></param>
            
    /// <param name="key"></param>
            
    /// <param name="val"></param>
            
    /// <param name="filePath"></param>
            
    /// <returns></returns>
            [DllImport("kernel32")]
            
    private static extern long WritePrivateProfileString(string section, string key, string val, string filePath);


            [DllImport(
    "kernel32")]
            
    private static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retVal, int size, string filePath);

            
    /// <summary>
            
    /// 类的构造函数,传递INI文件名
            
    /// </summary>
            
    /// <param name="inipath"></param>
            public IniFile(string inipath)
            {
                
    //
                
    // TODO: Add constructor logic here
                
    //
                Path = inipath;
            }

            
    /// <summary>
            
    /// 写INI文件
            
    /// </summary>
            
    /// <param name="Section"></param>
            
    /// <param name="Key"></param>
            
    /// <param name="Value"></param>
            public void IniWriteValue(string Section, string Key, string Value)
            {
                WritePrivateProfileString(Section, Key, Value, 
    this.Path);

            }

            
    /// <summary>
            
    /// 读取INI文件指定
            
    /// </summary>
            
    /// <param name="Section"></param>
            
    /// <param name="Key"></param>
            
    /// <returns></returns>
            public string IniReadValue(string Section, string Key)
            {
                StringBuilder temp 
    = new StringBuilder(5000);
                
    int i = GetPrivateProfileString(Section, Key, "", temp, 5000this.Path);
                
    return temp.ToString();

            }
        }

         3.     获取网卡号

              可用于软件加密

            /// <summary>
            
    /// 获得网卡号
            
    /// </summary>
            
    /// <returns></returns>
            public static string GetNetCardMacAddress()
            {
                ManagementClass mc 
    = new ManagementClass("Win32_NetworkAdapterConfiguration");
                ManagementObjectCollection moc 
    = mc.GetInstances();
                
    string str = "";
                
    foreach (ManagementObject mo in moc)
                {
                    
    if ((bool)mo["IPEnabled"== true)
                        str 
    = mo["MacAddress"].ToString();
                }
                
    return str;
            }

         4.     获取采集卡序列化

              可用于软件加密绑定,注意结构体DS_BOARD_DETAIL.sn是16位的,但是实际只有12位,VC++源码也只取了12位,后门都是0。

            /// <summary>
            
    /// 获取板卡序号
            
    /// </summary>
            
    /// <returns></returns>
            public static string GetBoardSN()
            {
                
    uint boardCount = HikVisionSDK.GetBoardCount();
                StringBuilder sn 
    = new StringBuilder();
                
    for (uint i = 0; i < boardCount; )
                {
                    DS_BOARD_DETAIL boardDetail 
    = new DS_BOARD_DETAIL();
                    HikVisionSDK.GetBoardDetail(i, 
    ref boardDetail);
                    
    for (int j = 0; j < 12; j++)
                    {
                        sn.Append((
    char)(boardDetail.sn[j] + 0x30));
                    }
                    
    break;
                }
                
    return sn.ToString();
            }

         5.     全屏显示视频窗口

            /// <summary>
            
    /// 全屏
            
    /// </summary>
            
    /// <param name="tsmFullScreen">右键</param>
            
    /// <param name="pVideo">显示视频的窗口</param>
            
    /// <param name="cs">视频连接成功返回的值</param>
            private void FullScreen(ToolStripMenuItem tsmFullScreen, Panel pVideo, int cs)
            {
                
    if (this.WindowState == System.Windows.Forms.FormWindowState.Maximized)
                {
                    tsmFullScreen.Text 
    = "全屏窗口";
                    
    this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
                    
    this.WindowState = System.Windows.Forms.FormWindowState.Normal;
                    
    this.TopMost = false;
                    pVideo.Width 
    = pre_Width;
                    pVideo.Height 
    = pre_Height;
                    pVideo.Top 
    = pre_Top;
                    pVideo.Left 
    = pre_Left;

                    
    //隐藏其他控件
                    HideOtherControls(pVideo, true);

                    minPanel(pVideo, cs);
                }
                
    else
                {
                    tsmFullScreen.Text 
    = "关闭全屏";
                    
    this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
                    
    this.WindowState = System.Windows.Forms.FormWindowState.Maximized;
                    
    this.TopMost = true;

                    pre_Width 
    = pVideo.Width;
                    pre_Height 
    = pVideo.Height;
                    pre_Top 
    = pVideo.Top;
                    pre_Left 
    = pVideo.Left;

                    pVideo.Width 
    = this.Width;
                    pVideo.Height 
    = this.Height;
                    pVideo.Top 
    = 0;
                    pVideo.Left 
    = 0;

                    
    //显示其他控件
                    HideOtherControls(pVideo, false);
                }
            }

         6.     其他代码

            //判断是不是IP地址
            public bool IsIPAddress(string ip)
            {
                
    return Regex.IsMatch(ip, @"^((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)$");
            }
            
    /// <summary>
            
    /// 是否是无符号整数(正数)
            
    /// </summary>
            
    /// <param name="value"></param>
            
    /// <returns></returns>
            public bool IsUInt(string value)
            {
                
    return Regex.IsMatch(value, @"^\d*$");
            }

    结束

         实际开发中远不只这么多,基本上也是有一个这样的功能需求就去GOOGLE一段代码出来,还有其他如delegate和event在窗体之间使用,分屏也是简单的采用了4个Panel,当放大时就分别隐藏其他Panel等等,就不一一列举了,多查查资料就行了: )       

  • 相关阅读:
    Java中接口对象实现回调
    推荐算法之计算相似度
    mahout入门实例2-Mahout单机开发环境介绍(参考粉丝日志)
    mahout入门实例-基于 Apache Mahout 构建社会化推荐引擎-实战(参考IBM)
    windows下gvim使用及常见命令
    一道C语言的问题(转)
    android开发手记一
    数据结构之有关图的算法(图的邻接表示法)
    Week of Code:GG
    HDU 5587:Array
  • 原文地址:https://www.cnblogs.com/over140/p/1429298.html
Copyright © 2011-2022 走看看