博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# WinFrom一些技术小结
阅读量:5896 次
发布时间:2019-06-19

本文共 4024 字,大约阅读时间需要 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*$");
        }

转载于:https://www.cnblogs.com/lailewei/p/4061797.html

你可能感兴趣的文章
在使用AngularJS的过程中了解Promise(二)
查看>>
ArrayList源码解析
查看>>
基于SpringMVC、Maven以及Mybatis的环境搭建
查看>>
可见面判别算法---区域细分算法
查看>>
清理恢复文本框的默认值
查看>>
【原创】如何在vim中使用tab进行python代码补全
查看>>
Struts秘籍之起式:第1.3式:迁移至Struts 1.1
查看>>
绿色PLSQL/Developer搭配Oracle精简客户端使用
查看>>
ViewPager Banner(广告墙)
查看>>
Spring Cloud 入门教程(二): 服务消费者(rest+ribbon)(Greenwich.RELEASE)
查看>>
iOS开发20:Navigation Bar的简单设置
查看>>
iOS开发24:使用SQLite3存储和读取数据
查看>>
GMF树形布局 2 实现展开/折叠
查看>>
Cocos2dx 2.0x Touch事件
查看>>
php判断是否登录
查看>>
Yii2 Unable to verify your data submission 错误-CSRF
查看>>
angularjs-paste-upload
查看>>
hadoop学习笔记
查看>>
解除 Linux 系统的最大进程数和最大文件打开数限制
查看>>
在 Linux 中删除超大文件的技巧
查看>>