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,  5000 this .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等等,就不一一列举了,多查查资料就行了: )       


转载:http://www.cnblogs.com/over140/archive/2009/04/04/1429298.html

目录
相关文章
|
2月前
|
SQL 数据库连接 应用服务中间件
C#WinForm基础编程(三)
C#WinForm基础编程
77 0
|
2月前
C#WinForm基础编程(二)
C#WinForm基础编程
58 0
|
2月前
|
C# 数据安全/隐私保护
C#WinForm基础编程(一)
C#WinForm基础编程
62 0
|
4月前
|
小程序 C#
C#WinForm实现Loading等待界面
上篇博客中解决了程序加载时屏幕闪烁的问题。 但是,加载的过程变得很缓慢。 这个给用户的体验也不是很好,我这里想加一个Loading的进度条。 项目启动的时候,加载进度条,界面UI加载完毕,进度条消失。
124 0
|
6月前
|
关系型数据库 MySQL C#
C# winform 一个窗体需要调用自定义用户控件的控件名称
给用户控件ucQRCode增加属性: //二维码图片 private PictureBox _pictureBoxFSHLQrCode; public PictureBox PictureBoxFSHLQrCode {   get { return _pictureBoxFSHLQrCode; }   set { this.pictureBoxFSHLQrCode = value; } } 在Form1窗体直接调用即可: ucQRCode uQRCode=new ucQRCode(); ucQRCode.PictureBoxFSHLQrCode.属性= 要复制或传给用户控件上的控件的值
37 0
|
1月前
|
C# 开发者
35.c#:winform窗口
35.c#:winform窗口
12 1
|
2月前
|
C#
C# Winform 选择文件夹和选择文件
C# Winform 选择文件夹和选择文件
44 0
|
7月前
|
程序员 C# 索引
C#之二十 Win Form对话框
C#之二十 Win Form对话框
40 0
|
7月前
|
Java C# 索引
C#之 十九 使用WinForm控件
C#之 十九 使用WinForm控件
114 0
|
6月前
|
C#
C#之四十一 在Winform中从外部拖动节点到树形结构
C#之四十一 在Winform中从外部拖动节点到树形结构
42 0