博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# 视频监控系列(15):总结贴——可能用到的C# WinForm技术小结
阅读量:6646 次
发布时间:2019-06-25

本文共 4096 字,大约阅读时间需要 13 分钟。

 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*$
"
);
        }

 本文转自博客园农民伯伯的博客,原文链接:,如需转载请自行联系原博主。

你可能感兴趣的文章
4个Linux下最好的命令行下载管理器/加速器
查看>>
阿里电商架构演变之路
查看>>
老企业业绩齐增 光伏行业上半年重迎好时光
查看>>
开发漫谈:我爱编程语言的四大原因
查看>>
防火墙迁移:提高安全弹性与可用性的5种方法
查看>>
Teledyne DALSA推出面向工业视觉应用的红外相机系列
查看>>
车联网市场现状及未来趋势解析
查看>>
不把网民权益当回事 网络安全早晚出大事
查看>>
解锁时弹出LiveChat在线聊天的恶意勒索软件PadCrypt出现
查看>>
AliSQL 5.6.32 vs MySQL 5.7.15抢鲜测试
查看>>
快速增长的网络犯罪将成为数据中心业务中断主因
查看>>
Infocomm前瞻:迪威视讯重推120吋激光触控屏
查看>>
摩洛哥建新型光伏电站 太阳能转换率达30%
查看>>
云存储行业呈现新特征,将成公有云发展核心动力
查看>>
宁津县大数据中心建成 属“智慧宁津”子项目
查看>>
Python实战案例分享:爬取当当网商品数据
查看>>
路透社:美国金融公司因使用云服务省了数十亿美元
查看>>
瑞士UMB公司为两家新客户提供数据中心服务
查看>>
移动CRM正快读应用于企业内部
查看>>
独立显卡市场分析:AMD东山再
查看>>