首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

C# 視訊監控系列(15):WinForm 實用技術總結與常用程式碼片段集錦

     編輯:關於C#

本文為系列最終篇,彙整開發視訊監控系統時常用的 C# WinForm 技術細節與可直接復用的程式碼片段,涵蓋非受控記憶體操作、INI 設定檔讀寫、硬體資訊取得、全螢幕切換、常用驗證等實戰技巧。

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 設定檔讀寫封裝類


public class IniFile
{
    public string Path { get; set; }

    [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);

    public IniFile(string inipath) => Path = inipath;

    public void IniWriteValue(string section, string key, string value)
        => WritePrivateProfileString(section, key, value, Path);

    public string IniReadValue(string section, string key)
    {
        StringBuilder temp = new StringBuilder(5000);
        GetPrivateProfileString(section, key, "", temp, 5000, Path);
        return temp.ToString();
    }
}

3. 取得網卡 MAC 位址(可用於軟體授權綁定)


public static string GetNetCardMacAddress()
{
    ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
    ManagementObjectCollection moc = mc.GetInstances();
    string mac = "";
    foreach (ManagementObject mo in moc)
    {
        if ((bool)mo["IPEnabled"] == true)
            mac = mo["MacAddress"].ToString();
    }
    return mac;
}

4. 取得擷取卡序列號(海康 SDK 專用)


public static string GetBoardSN()
{
    uint boardCount = HikVisionSDK.GetBoardCount();
    StringBuilder sn = new StringBuilder();
    for (uint i = 0; i < boardCount; i++)
    {
        DS_BOARD_DETAIL detail = new DS_BOARD_DETAIL();
        HikVisionSDK.GetBoardDetail(i, ref detail);
        for (int j = 0; j < 12; j++)
            sn.Append((char)(detail.sn[j] + 0x30));
        break; // 只取第一張卡
    }
    return sn.ToString();
}

5. 視訊視窗全螢幕切換


private void FullScreen(ToolStripMenuItem menuItem, Panel videoPanel, int cs)
{
    if (this.WindowState == FormWindowState.Maximized)
    {
        menuItem.Text = "全螢幕視窗";
        this.FormBorderStyle = FormBorderStyle.FixedSingle;
        this.WindowState = FormWindowState.Normal;
        this.TopMost = false;
        videoPanel.Width = pre_Width;
        videoPanel.Height = pre_Height;
        videoPanel.Top = pre_Top;
        videoPanel.Left = pre_Left;
        HideOtherControls(videoPanel, true);
        minPanel(videoPanel, cs);
    }
    else
    {
        menuItem.Text = "關閉全螢幕";
        this.FormBorderStyle = FormBorderStyle.None;
        this.WindowState = FormWindowState.Maximized;
        this.TopMost = true;
        pre_Width = videoPanel.Width;
        pre_Height = videoPanel.Height;
        pre_Top = videoPanel.Top;
        pre_Left = videoPanel.Left;
        videoPanel.Width = this.Width;
        videoPanel.Height = this.Height;
        videoPanel.Top = 0;
        videoPanel.Left = 0;
        HideOtherControls(videoPanel, false);
    }
}

6. 常用驗證方法


// IP 位址格式驗證
public bool IsIPAddress(string ip)
    => Regex.IsMatch(ip, @"^((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)$");

// 無符號整數(正整數)驗證
public bool IsUInt(string value)
    => Regex.IsMatch(value, @"^\d*$");

結語

實際開發中還會用到委派跨表單通訊、多畫面分割、事件處理等技巧,建議開發者根據專案需求靈活組合,善用搜尋引擎與官方文件快速解決問題。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved