C#Winform,Epplus,Excel,弹出输入框,打开导出文件夹并选中导出文件等

Epplus4.5.3.3不收费再高版本收费或声明用于非商业目的

第三方的弹出输入框用于密码登录

远程连接SqlServer在系统防火墙入方向开启1433端口

using OfficeOpenXml;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace 计算机配置信息采集上传
{
    public class ComputerMGT
    {
        public static readonly string connStr = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;
        public static int Insert(string name, string cpu, string memory, string diskInfo, string mb, string vga, string nic, string nicMac)
        {
            using (SqlConnection conn = new SqlConnection(connStr))
            {
                using (SqlCommand cmd = conn.CreateCommand())
                {
                    string sqlInsert = @"insert into ComputerInfo 
                            (Name, CPU, Memory, DiskInfo, Mb, VGA, Nic, NicMac) 
                            values 
                            (@Name, @CPU, @Memory, @DiskInfo, @Mb, @VGA, @Nic, @NicMac);";
                    SqlParameter[] paras = {
                        new SqlParameter("@Name",name),
                        new SqlParameter("@CPU",cpu),
                        new SqlParameter("@Memory",memory),
                        new SqlParameter("@DiskInfo",diskInfo),
                        new SqlParameter("@Mb",mb),
                        new SqlParameter("@VGA",vga),
                        new SqlParameter("@Nic",nic),
                        new SqlParameter("@NicMac",nicMac)
                    };
                    cmd.CommandText = sqlInsert;
                    cmd.Parameters.AddRange(paras);
                    conn.Open();
                    return cmd.ExecuteNonQuery();
                }
            }
        }
        public static int Update(string name, string cpu, string memory, string diskInfo, string mb, string vga, string nic, string nicMac)
        {
            using (SqlConnection conn = new SqlConnection(connStr))
            {
                using (SqlCommand cmd = conn.CreateCommand())
                {
                    string sqlUpdate = @"update ComputerInfo 
                            set Name=@Name, CPU=@CPU, Memory=@Memory, DiskInfo=@DiskInfo, Mb=@Mb, VGA=@VGA, Nic=@Nic 
                            where NicMac=@NicMac;";
                    SqlParameter[] paras = {
                        new SqlParameter("@Name",name),
                        new SqlParameter("@CPU",cpu),
                        new SqlParameter("@Memory",memory),
                        new SqlParameter("@DiskInfo",diskInfo),
                        new SqlParameter("@Mb",mb),
                        new SqlParameter("@VGA",vga),
                        new SqlParameter("@Nic",nic),
                        new SqlParameter("@NicMac",nicMac)
                    };
                    cmd.CommandText = sqlUpdate;
                    cmd.Parameters.AddRange(paras);
                    conn.Open();
                    return cmd.ExecuteNonQuery();
                }
            }
        }
        public static bool Exist(string nicMac)
        {
            using (SqlConnection conn = new SqlConnection(connStr))
            {
                using (SqlCommand cmd = conn.CreateCommand())
                {
                    string sql = "select count(*) from ComputerInfo where NicMac=@NicMac;";
                    SqlParameter para = new SqlParameter("@NicMac", nicMac);
                    cmd.Parameters.Add(para);
                    cmd.CommandText = sql;
                    conn.Open();
                    object obj = cmd.ExecuteScalar();
                    return Convert.ToInt32(obj) > 0;
                }
            }
        }
        public static DataTable GetDataTable()
        {
            using (SqlDataAdapter ad = new SqlDataAdapter("select * from ComputerInfo order by Id;", connStr))
            {
                DataTable dt = new DataTable();
                ad.Fill(dt);
                return dt;
            }
        }
        public static bool DataGridViewToExcel(DataGridView dgv, string fileName)
        {
            bool b = false;
            try
            {
                if (dgv == null || dgv.RowCount == 0)
                {
                    return b;
                }
                var excel = new ExcelPackage();
                var workSheet = excel.Workbook.Worksheets.Add("Sheet1");
                //添加标题
                for (int i = 0; i < dgv.ColumnCount; i++)
                {
                    workSheet.Cells[1, i + 1].Value = dgv.Columns[i].HeaderText;
                    workSheet.Cells[1, i + 1].Style.Font.Bold = true;
                }
                //添加数据
                for (int row = 0; row < dgv.RowCount; row++)
                {
                    for (int col = 0; col < dgv.ColumnCount; col++)
                    {
                        workSheet.Cells[row + 2, col + 1].Value = dgv[col, row].Value;
                    }
                }
                //调整列宽自适应
                workSheet.Cells[1, 1, dgv.RowCount + 1, dgv.ColumnCount].AutoFitColumns();
                excel.SaveAs(new System.IO.FileInfo(fileName));
                b = true;
            }
            catch (Exception ex)
            {
                string resStr = ex.Message;
            }
            return b;
        }
        /// <summary>
        /// 找开文件夹并选中导出的文件
        /// </summary>
        /// <param name="filePath">含全路径的文件名</param>
        public static void OpenFolder(string filePath)
        {
            if (string.IsNullOrEmpty(filePath))
            {
                throw new ArgumentException("文件路径不能为空");
            }

            string folderPath = System.IO.Path.GetDirectoryName(filePath);
            if (string.IsNullOrEmpty(folderPath))
            {
                throw new ArgumentException("无法获取文件夹路径");
            }

            Process.Start("explorer.exe", $"/select, \"{filePath}\"");
        }
    }
}
using System;
using System.Data;
using System.Windows.Forms;
using System.Management;
using Essy.Tools.InputBox;

namespace 计算机配置信息采集上传
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            this.textBox1.AppendText("========== 操作系统信息 ==========\r\n");
            ManagementObjectSearcher searcher3 = new ManagementObjectSearcher("SELECT Caption FROM Win32_OperatingSystem");
            foreach (ManagementObject os in searcher3.Get())
            {
                this.textBox1.AppendText("Caption: " + os["Caption"] + "\r\n"); // 这里会输出具体的操作系统名称,如"Microsoft Windows 10 Enterprise"等。
            }
            this.textBox1.AppendText("========== 电脑硬件信息 ==========\r\n");
            this.textBox1.AppendText(HardwareInfo.GetCPUInfo());
            this.textBox1.AppendText(HardwareInfo.GetMemoryInfo());
            this.textBox1.AppendText(HardwareInfo.GetDiskInfo());
            this.textBox1.AppendText(HardwareInfo.GetMotherboardInfo());
            this.textBox1.AppendText(HardwareInfo.GetGPUInfo());
            string nicMac;
            this.textBox1.AppendText(HardwareInfo.GetNicInfo(out nicMac));
            //this.textBox2.Text = nicMac;
            this.textBox1.AppendText("=================================");

            this.button2.Enabled = true;
            this.txtName.Enabled = true;
        }

        private void button2_Click_1(object sender, EventArgs e)
        {
            //Id, Name, CPU, Memory, DiskInfo, Mb, VGA, Nic,NicMac
            //name, cpu, memory, diskInfo, mb, vga, nic,nicMac
            string name = this.txtName.Text.Trim();
            string cpu = HardwareInfo.GetCPUInfo();
            string memory = HardwareInfo.GetMemoryInfo();
            string diskInfo = HardwareInfo.GetDiskInfo();
            string mb = HardwareInfo.GetMotherboardInfo();
            string vga = HardwareInfo.GetGPUInfo();
            string nicMac;
            string nic = HardwareInfo.GetNicInfo(out nicMac);
            #region insert不要了
            //string connStr = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;
            //
            //using (SqlConnection conn = new SqlConnection(connStr))
            //{
            //    using (SqlCommand cmd = conn.CreateCommand())
            //    {
            //        string sqlInsert = @"insert into ComputerInfo 
            //                (Name, CPU, Memory, DiskInfo, Mb, VGA, Nic, NicMac) 
            //                values 
            //                (@Name, @CPU, @Memory, @DiskInfo, @Mb, @VGA, @Nic, @NicMac);";
            //        SqlParameter[] paras = {
            //            new SqlParameter("@Name",name),
            //            new SqlParameter("@CPU",cpu),
            //            new SqlParameter("@Memory",memory),
            //            new SqlParameter("@DiskInfo",diskInfo),
            //            new SqlParameter("@Mb",mb),
            //            new SqlParameter("@VGA",vga),
            //            new SqlParameter("@Nic",nic),
            //            new SqlParameter("@NicMac",nicMac)
            //        };
            //        cmd.CommandText = sqlInsert;
            //        cmd.Parameters.AddRange(paras);
            //        conn.Open();
            //        if (cmd.ExecuteNonQuery() > 0)
            //        {
            //            MessageBox.Show("上传成功...");
            //        }
            //        else
            //        {
            //            MessageBox.Show("上传失败...");
            //        }
            //    }
            //}
            #endregion
            if (ComputerMGT.Exist(nicMac))
            {
                if (ComputerMGT.Update(name, cpu, memory, diskInfo, mb, vga, nic, nicMac) > 0)
                {
                    MessageBox.Show("上传并更新-->成功...");
                }
                else
                {
                    MessageBox.Show("上传并更新-->失败...");
                }
            }
            else
            {
                if (ComputerMGT.Insert(name, cpu, memory, diskInfo, mb, vga, nic, nicMac) > 0)
                {
                    MessageBox.Show("上传-->成功...");
                }
                else
                {
                    MessageBox.Show("上传-->失败...");
                }
            }

            this.textBox1.Text = "";
            this.txtName.Text = "";
            this.button2.Enabled = false;
            this.txtName.Enabled = false;

        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void button3_Click(object sender, EventArgs e)
        {
            DataTable dt = ComputerMGT.GetDataTable();
            this.dataGridView1.DataSource = dt;
        }

        private void button4_Click(object sender, EventArgs e)
        {
            string[] strs = DateTime.Now.ToString().Split('-', ' ', ':');
            string str = string.Join("", strs);
            string fileName = @"excel\" + str + ".xlsx";
            bool b = ComputerMGT.DataGridViewToExcel(dataGridView1, fileName);
            if (b)
            {
                MessageBox.Show("导出Excel成功...");
                ComputerMGT.OpenFolder(fileName);
            }
            else
            {
                MessageBox.Show("导出Excel失败...");
            }
        }
        //管理
        private void button5_Click(object sender, EventArgs e)
        {
            if (this.button5.Text == "管理")
            {
                string res = InputBox.ShowInputBox("请输入密码", true);
                //MessageBox.Show((res==null).ToString());//测试 OK或cancel的返回值 空白确定返回"" 取消返回null
                if (res == null)//点击取消了
                {
                    return;
                }
                if (res == "4023364")
                {
                    this.button1.Visible = false;
                    this.label1.Visible = false;
                    this.txtName.Visible = false;
                    this.button2.Visible = false;
                    this.textBox1.Visible = false;

                    this.dataGridView1.Visible = true;
                    this.button3.Visible = true;
                    this.button4.Visible = true;
                    this.button5.Text = "退出";
                }
                else
                {
                    MessageBox.Show("密码不对...");
                }
            }
            else//退出
            {
                this.button1.Visible = true;
                this.label1.Visible = true;
                this.txtName.Visible = true;
                this.button2.Visible = true;
                this.textBox1.Visible = true;

                this.dataGridView1.DataSource = null;
                this.dataGridView1.Visible = false;
                this.button3.Visible = false;
                this.button4.Visible = false;
                this.button5.Text = "管理";
            }

        }
    }
}
using System;
using System.Management;
using System.Net.NetworkInformation;
using System.Text;

namespace 计算机配置信息采集上传
{
    public class HardwareInfo
    {
        public static string GetCPUInfo()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("[CPU信息]\r\n");
            try
            {
                ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_Processor");
                foreach (ManagementObject mo in searcher.Get())
                {
                    sb.Append($"名称: {mo["Name"]}" + "\r\n");
                    sb.Append($"制造商: {mo["Manufacturer"]}" + "\r\n");
                    sb.Append($"核心数: {mo["NumberOfCores"]}");
                    sb.Append($"逻辑处理器数: {mo["NumberOfLogicalProcessors"]}" + "\r\n");
                    sb.Append($"当前时钟速度: {mo["CurrentClockSpeed"]} MHz" + "\r\n");
                    sb.Append($"最大时钟速度: {mo["MaxClockSpeed"]} MHz");
                    sb.Append($"L2缓存大小: {Convert.ToDouble(mo["L2CacheSize"]) / 1024} MB" + "\r\n");
                    sb.Append($"L3缓存大小: {Convert.ToDouble(mo["L3CacheSize"]) / 1024} MB" + "\r\n");
                    sb.Append($"序列号: {mo["ProcessorId"]}" + "\r\n");
                }
            }
            catch (Exception ex)
            {
                sb.Append($"获取CPU信息失败: {ex.Message}" + "\r\n");
            }
            sb.Append("[end...]" + "\r\n");
            return sb.ToString();
        }

        public static string GetMemoryInfo()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("[内存信息]\r\n");
            try
            {
                ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMemory");
                double totalMemoryGB = 0;
                int index = 1;
                foreach (ManagementObject mo in searcher.Get())
                {
                    double capacityGB = Convert.ToDouble(mo["Capacity"]) / (1024 * 1024 * 1024);
                    totalMemoryGB += capacityGB;
                    sb.Append($"内存条 {index++}:" + "\r\n");
                    sb.Append($"  容量: {capacityGB:F2} GB" + "\r\n");
                    sb.Append($"  制造商: {mo["Manufacturer"]}" + "\r\n");
                    sb.Append($"  速度: {mo["Speed"]} MHz" + "\r\n");
                    sb.Append($"  序列号: {mo["SerialNumber"]}" + "\r\n");
                }
                sb.Append($"\n总物理内存: {totalMemoryGB:F2} GB" + "\r\n");

                searcher = new ManagementObjectSearcher("SELECT * FROM Win32_OperatingSystem");
                foreach (ManagementObject mo in searcher.Get())
                {
                    double totalVisibleMemory = Convert.ToDouble(mo["TotalVisibleMemorySize"]) / 1024;
                    double freeMemory = Convert.ToDouble(mo["FreePhysicalMemory"]) / 1024;
                    sb.Append($"可用内存: {freeMemory:F2} GB / {totalVisibleMemory:F2} GB" + "\r\n");
                }
            }
            catch (Exception ex)
            {
                sb.Append($"获取内存信息失败: {ex.Message}" + "\r\n");
            }
            sb.Append("[end...]" + "\r\n");
            return sb.ToString();
        }

        public static string GetDiskInfo()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("[磁盘信息]\r\n");
            try
            {
                ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive");
                foreach (ManagementObject mo in searcher.Get())
                {
                    double sizeGB = Convert.ToDouble(mo["Size"]) / (1024 * 1024 * 1024);
                    sb.Append($"型号: {mo["Model"]}" + "\r\n");
                    sb.Append($"接口类型: {mo["InterfaceType"]}" + "\r\n");
                    sb.Append($"序列号: {mo["SerialNumber"]?.ToString().Trim()}" + "\r\n");
                    sb.Append($"容量: {sizeGB:F2} GB" + "\r\n");
                    sb.Append($"分区数: {mo["Partitions"]}" + "\r\n");
                }

                searcher = new ManagementObjectSearcher("SELECT * FROM Win32_LogicalDisk");
                foreach (ManagementObject mo in searcher.Get())
                {
                    if (mo["Size"] != null)
                    {
                        double sizeGB = Convert.ToDouble(mo["Size"]) / (1024 * 1024 * 1024);
                        double freeGB = Convert.ToDouble(mo["FreeSpace"]) / (1024 * 1024 * 1024);
                        sb.Append($"驱动器: {mo["DeviceID"]}" + "\r\n");
                        sb.Append($"  文件系统: {mo["FileSystem"]}" + "\r\n");
                        sb.Append($"  总大小: {sizeGB:F2} GB" + "\r\n");
                        sb.Append($"  可用空间: {freeGB:F2} GB" + "\r\n");
                    }
                }
            }
            catch (Exception ex)
            {
                sb.Append($"获取磁盘信息失败: {ex.Message}" + "\r\n");
            }
            sb.Append("[end...]" + "\r\n");
            return sb.ToString();
        }

        public static string GetMotherboardInfo()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("[主板信息]\r\n");
            try
            {
                ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_BaseBoard");
                foreach (ManagementObject mo in searcher.Get())
                {
                    sb.Append($"制造商: {mo["Manufacturer"]}" + "\r\n");
                    sb.Append($"型号: {mo["Product"]}" + "\r\n");
                    sb.Append($"序列号: {mo["SerialNumber"]}" + "\r\n");
                    sb.Append($"版本: {mo["Version"]}" + "\r\n");
                }
            }
            catch (Exception ex)
            {
                sb.Append($"获取主板信息失败: {ex.Message}" + "\r\n");
            }
            sb.Append("[end...]" + "\r\n");
            return sb.ToString();
        }

        public static string GetGPUInfo()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("[显卡信息]\r\n");
            try
            {
                ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_VideoController");
                foreach (ManagementObject mo in searcher.Get())
                {
                    sb.Append($"名称: {mo["Name"]}" + "\r\n");
                    sb.Append($"制造商: {mo["AdapterCompatibility"]}" + "\r\n");
                    sb.Append($"显存: {Convert.ToDouble(mo["AdapterRAM"]) / (1024 * 1024 * 1024):F2} GB" + "\r\n");
                    sb.Append($"当前分辨率: {mo["CurrentHorizontalResolution"]}x{mo["CurrentVerticalResolution"]}" + "\r\n");
                    sb.Append($"驱动版本: {mo["DriverVersion"]}" + "\r\n");
                }
            }
            catch (Exception ex)
            {
                sb.Append($"获取显卡信息失败: {ex.Message}" + "\r\n");
            }
            sb.Append("[end...]" + "\r\n");
            return sb.ToString();
        }
        public static string GetNicInfo(out string mac)
        {
            mac = "123456789012";
            StringBuilder sb = new StringBuilder();
            sb.Append("[网卡信息]\r\n");
            try
            {
                // 获取所有网络接口
                foreach (NetworkInterface ni in NetworkInterface.GetAllNetworkInterfaces())
                {
                    // 检查接口是否运行中,并且不是环回接口
                    if (ni.OperationalStatus == OperationalStatus.Up && ni.NetworkInterfaceType != NetworkInterfaceType.Loopback && !ni.Description.Contains("Virtual"))
                    {
                        foreach (UnicastIPAddressInformation ip in ni.GetIPProperties().UnicastAddresses)
                        {
                            if (ip.Address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
                            {
                                sb.Append("Interface Name: " + ni.Name + "\r\n");
                                mac = ni.GetPhysicalAddress().ToString();
                                sb.Append("MAC Addresss: " + ni.GetPhysicalAddress().ToString() + "\r\n");
                                sb.Append("IP Address: " + ip.Address.ToString() + "\r\n");                                
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                sb.Append($"获取网卡信息失败: {ex.Message}" + "\r\n");                
            }
            sb.Append("[end...]" + "\r\n");
            return sb.ToString();
        }
    }
}

 

posted @ 2026-03-31 15:37  techNote  阅读(5)  评论(0)    收藏  举报