winform 的一些记录

1、winform 播放语音

System.Media.SoundPlayer player = new System.Media.SoundPlayer();
player.SoundLocation = Application.StartupPath + "//请到此处报道.wav";
player.LoadAsync(); //异步读取
//player.PlaySync();//异步播放

//player.Load();
player.PlayLooping();//循环播放

2、DataGridViewComboBoxCell 绑定值

private void dataGridView1_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
{
  var cell = this.dataGridView1.Rows[e.RowIndex].Cells[1];
  DataGridViewComboBoxCell DgvCell = this.dataGridView1.Rows[e.RowIndex].Cells[1] as DataGridViewComboBoxCell;
  DgvCell.DataSource = comboboxOption;
  DgvCell.ValueMember = "pointType";
  DgvCell.DisplayMember = "Description";
}

3、DataGridViewComboBoxCell 下拉框事件

/// <summary>
/// 
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
  DataGridView dgv = sender as DataGridView;

  if (dgv.CurrentCell.GetType().Name == "DataGridViewComboBoxCell" && dgv.CurrentCell.RowIndex != -1) {
      //加上下拉事件
      (e.Control as ComboBox).SelectedIndexChanged += PointType_SelectedIndexChanged;
  }
}
/// <summary>
/// 
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void PointType_SelectedIndexChanged(object sender, EventArgs e)
{
  ComboBox combox = sender as ComboBox;

  combox.Leave += Combox_Leave;
  try {
      if (combox.SelectedItem != null && dataGridView.SelectedRows.Count > 0) 
    {       var row = dataGridView1.CurrentRow;       Flyline fl = Client.getSide().Flylines.FirstOrDefault(x => x.guid == dataGridView.SelectedRows[0].Cells["ID"].Value.ToString());       if (fl != null)       {         LinePoint lp = fl.LinePoints.FirstOrDefault(x => x.ID == row.Cells["ID1"].Value.ToString());         if (lp != null)         {         var pointType = combox.SelectedValue;         if (pointType != null && !string.IsNullOrWhiteSpace(pointType.ToString()))         {             lp.pointType = pointType.ToString();         }         }       }   }   Thread.Sleep(100);   }   catch (Exception ex) {   MessageBox.Show(ex.Message);   } } /// <summary> /// 离开combox的时候,把事件删除 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Combox_Leave(object sender, EventArgs e) {   ComboBox combox = sender as ComboBox;   //做完处理,撤销动态事件   combox.SelectedIndexChanged -= PointType_SelectedIndexChanged; }

4、再次加载的时候绑定数据

var data = Client.FirstOrDefault(x => x.guid == dataGridView.SelectedRows[0].Cells["ID"].Value.ToString()).LinePoints;
dataGridView1.DataSource = data;
for (var i = 0; i < data.Count; i++)
{
  ((DataGridViewComboBoxCell)dataGridView1.Rows[i].Cells[1]).DataSource = comboboxOption;
  ((DataGridViewComboBoxCell)dataGridView1.Rows[i].Cells[1]).ValueMember = "pointType";
  ((DataGridViewComboBoxCell)dataGridView1.Rows[i].Cells[1]).DisplayMember = "Description";
  ((DataGridViewComboBoxCell)dataGridView1.Rows[i].Cells[1]).Value = data[i].pointType;
}

  

5、获取当前网络类型

private void InitNetWorkData() {
  lbNetWorkType.Text = "";
  foreach (NetworkInterface ni in NetworkInterface.GetAllNetworkInterfaces())
  {
      // 检查网络接口是否处于在线状态并且不是回环或隧道接口
      if (ni.OperationalStatus == OperationalStatus.Up &&ni.NetworkInterfaceType != NetworkInterfaceType.Loopback &&ni.NetworkInterfaceType != NetworkInterfaceType.Tunnel)
      {
      Console.WriteLine("Name: {0}", ni.Name);
      Console.WriteLine("Description: {0}", ni.Description);
      Console.WriteLine("Type: {0}", ni.NetworkInterfaceType);

      // 这里你可以添加更多的逻辑来判断接口类型
      // 例如,通过解析Description或其他属性来推断是否是2G/3G/4G/5G/Wi-Fi
      // 注意:这种方法可能不是100%准确的,因为描述信息可能因设备和操作系统而异
      if (ni.NetworkInterfaceType == NetworkInterfaceType.Ethernet) { 
        //网线
        lbNetWorkType.Text = "NETWORK_ETHERNET";
      }
      else if (ni.NetworkInterfaceType == NetworkInterfaceType.Wireless80211)
      {
        //WIFI
        lbNetWorkType.Text = "NETWORK_WIFI";
        label2.Visible = true;
        lbWifiStrength.Visible = true;
      }
      else if (ni.NetworkInterfaceType == NetworkInterfaceType.Unknown)
      {
        //未知
        lbNetWorkType.Text = "NETWORK_UNKNOWN";
      }
      // 示例:如果描述中包含"2G",我们假设它是2G网络(这只是一个简单的示例)
      else if (ni.Description.Contains("2G"))
      {
        lbNetWorkType.Text = "NETWORK_2G";
      }
      else if (ni.Description.Contains("3G"))
      {
        lbNetWorkType.Text = "NETWORK_3G";
      }
      else if (ni.Description.Contains("4G"))
      {
        lbNetWorkType.Text = "NETWORK_4G";
      }
      else if (ni.Description.Contains("5G"))
      {
        lbNetWorkType.Text = "NETWORK_5G";
      }
      else
      {
        lbNetWorkType.Text = "NETWORK_NO";
      }
      }
  }
}

  

6、ping一个网址

private string FormatPingStatus(IPStatus status)
{
switch (status)
{
case IPStatus.DestinationHostUnreachable:
return "目标主机不可达";
break;
case IPStatus.DestinationNetworkUnreachable:
return "目标网络不可达";
break;
case IPStatus.DestinationProhibited:
return "目标主机禁止访问";
break;
case IPStatus.PacketTooBig:
return "数据包太大,网络无法传输";
break;
case IPStatus.ParameterProblem:
return "参数错误";
break;
case IPStatus.SourceQuench:
return "源抑制";
break;
case IPStatus.TimedOut:
return "请求超时";
break;
case IPStatus.Unknown:
return "未知错误";
break;
default:
return "";
break;
}
}

private async Task PingMethod(CancellationToken cancellationToken, object host)
{
cancellationToken.ThrowIfCancellationRequested();
var result = false;
调用同步 send 方法发送数据,将返回结果保存至PingReply实例
var sb = new StringBuilder();
var hostStr = ((string)host).Replace("https://", "").Replace("http://", "").TrimEnd('/');
sb.AppendLine("ping:" + host);
try
{
Ping pingSender = new Ping();

PingReply reply = pingSender.Send(hostNameOrAddress: hostStr, timeout: 120);

if (reply.Status == IPStatus.Success)
{
sb.AppendLine("成功:耗时--" + reply.RoundtripTime + "毫秒");
result = true;
}
else
{
sb.AppendLine("ping:" + host + "\n失败: " + FormatPingStatus(reply.Status));
result = false;
}
}
catch (Exception ex)
{
sb.AppendLine("ping:" + host + "\n失败: " + ex.Message);
result = false;
}
runCount++;
if (result)
{
successCount++;
}
if (host == Urls[0])
{
if (result)
{
UpdateServiceStatus("正常");
}
else
{
UpdateServiceStatus("异常");
}
}
UpdateLog(sb.ToString());
await Task.Delay(100); // 实际应用中这里会有长时间运行的代码
}

private void PingMethod(object host)
{
调用同步 send 方法发送数据,将返回结果保存至PingReply实例
var sb = new StringBuilder();
var hostStr = ((string)host).Replace("https://", "").Replace("http://", "").TrimEnd('/');
sb.AppendLine("ping:" + host);
try
{
Ping pingSender = new Ping();

PingReply reply = pingSender.Send(hostNameOrAddress: hostStr, timeout: 120);

if (reply.Status == IPStatus.Success)
{
sb.AppendLine("成功:耗时--" + reply.RoundtripTime + "毫秒");
}
else
{
sb.AppendLine("ping:" + host + "\n失败: " + FormatPingStatus(reply.Status));
}
}
catch (Exception ex)
{
sb.AppendLine("ping:" + host + "\n失败: " + ex.Message);
}
UpdateLog(sb.ToString());
}

public void UpdateLog(string message)
{
if (txtLogs.InvokeRequired)
{
txtLogs.Invoke(new Action<string>(UpdateLog), message);
}
else
{
txtLogs.AppendText(message + Environment.NewLine);
}
}
public void UpdateServiceStatus(string message)
{
if (lbService.InvokeRequired)
{
lbService.Invoke(new Action<string>(UpdateServiceStatus), message);
}
else
{
lbService.Text = message;
}
}

  

 7、WMI的一些例子

// 创建一个WMI查询,获取磁盘驱动器信息
query = "SELECT * FROM Win32_NetworkAdapter";
using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(query))
{
    // 执行查询并获取结果集合
    using (ManagementObjectCollection collection = searcher.Get())
    {
// 遍历结果集合
foreach (ManagementObject obj in collection)
{
// 获取并显示磁盘驱动器的相关信息
Console.WriteLine("DeviceID: {0}", obj["DeviceID"]);
Console.WriteLine("Manufacturer: {0}", obj["Manufacturer"]);
Console.WriteLine("Model: {0}", obj["Model"]);
Console.WriteLine("Size: {0} GB", (Convert.ToInt64(obj["Size"]) / (1024 * 1024 * 1024))); // 将字节转换为GB
Console.WriteLine();
}
    }
}

  

// 仅查询处于连接状态的网络适配器 
// 定义WMI查询字符串
string query = "SELECT * FROM Win32_NetworkAdapter WHERE NetConnectionStatus = 2";

// 创建ManagementObjectSearcher对象来执行查询
using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(query))
{
    // 执行查询并获取结果集合
    using (ManagementObjectCollection collection = searcher.Get())
    {
// 遍历结果集合中的每个ManagementObject
foreach (ManagementObject obj in collection)
{
// 获取并显示网络适配器的属性
Console.WriteLine("Description: {0}", obj["Description"]);
Console.WriteLine("Manufacturer: {0}", obj["Manufacturer"]);
Console.WriteLine("Name: {0}", obj["Name"]);
Console.WriteLine("NetConnectionStatus: {0}", obj["NetConnectionStatus"]); // 注意:这个属性可能返回的数字对应不同的状态,你可能需要转换或解释这些数字
Console.WriteLine("Speed: {0} bps", obj["Speed"]); // 速度,以比特每秒(bps)为单位
Console.WriteLine(); // 输出一个空行以分隔不同的网络适配器信息

// 如果你想查询更多属性,可以继续添加,例如:
// Console.WriteLine("AdapterType: {0}", obj["AdapterType"]);
// Console.WriteLine("MACAddress: {0}", obj["MACAddress"]);
// ... 等等
}
    }
}

  

//获取ManagementObject的全部属性
// 定义WMI查询字符串
string query = "SELECT * FROM Win32_NetworkAdapter WHERE NetConnectionStatus = 2";

// 创建ManagementObjectSearcher对象
ManagementObjectSearcher searcher1 = new ManagementObjectSearcher(query);

// 遍历所有实例
foreach (ManagementObject process in searcher1.Get())
{
    Console.WriteLine(""); Console.WriteLine(""); Console.WriteLine("");
    Console.WriteLine("----------------Start-------------------");
    Console.WriteLine("Name: {0}", process["Name"]);
    Console.WriteLine("WMI Object: " + process.Path.ToString());

    // 输出所有属性
    foreach (PropertyData property in process.Properties)
    {
Console.WriteLine("{0} : {1}", property.Name, property.Value);
    }
    Console.WriteLine("----------------End-------------------");

}

  

 8、在App.Config中增加值,以及取值

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
  </startup>
  <appSettings>
    <add key="Setting1" value="May 5,2018"/>
    <add key="Setting2" value="May 5,2017"/>
  </appSettings>

  <connectionStrings>
    <add name="Default" connectionString="Server=127.0.0.1; Database=CityManage; Trusted_Connection=False; Uid=root; pwd=zxx123456;" providerName="System.Data.SqlClient" />
    <add name="Abp.Redis.Cache" connectionString="localhost" />
  </connectionStrings>

</configuration>
 var connectionString = ConfigurationManager.ConnectionStrings["Default"].ConnectionString;  
 var appSettings = ConfigurationManager.AppSettings;  

if (appSettings.Count == 0)  
{  
    Console.WriteLine("AppSettings is empty.");  
}  
else  
{  
    foreach (var key in appSettings.AllKeys)  
    {  
Console.WriteLine("Key: {0} Value: {1}", key, appSettings[key]);  
    }  
}  
ConfigurationManager.AppSettings["ServerAddress"].ToString() //需要引用System.Configuration
ConfigurationSettings.AppSettings["ServerAddress"].ToString();

  

9、获取路径

取得WinForm应用程序的根目录方法
1:Environment.CurrentDirectory.ToString();//获取或设置当前工作目录的完全限定路径
2:Application.StartupPath.ToString();//获取启动了应用程序的可执行文件的路径,不包括可执行文件的名称
3:Directory.GetCurrentDirectory();//获取应用程序的当前工作目录
4:AppDomain.CurrentDomain.BaseDirectory;//获取基目录,它由程序集冲突解决程序用来探测程序集
5:AppDomain.CurrentDomain.SetupInformation.ApplicationBase;//获取或设置包含该应用程序的目录的名称

10、打开其他exe,如果有则关掉进程再重新打开,传参

var exePath= Application.StartupPath + "/NetworkDetection/BizcentNetworkDetection.exe";
  // 获取与指定名称匹配的进程
  Process[] processes = Process.GetProcessesByName(Path.GetFileNameWithoutExtension(exePath));
 
  // 如果找到了打开的进程,先关闭它
  if (processes.Length > 0)
  {
    foreach (Process p in processes)
    {
      p.Kill();
      p.WaitForExit(); // 等待进程退出
    }
  }
 
  // 打开外部exe
  Process.Start(exePath);

  

string s = "";
s = CurrentLogin.dept.name + " " + CurrentLogin._platform_name + " " + CurrentLogin.WebAPI;
// 打开外部exe
Process.Start(exePath,s);

  

11、获取电脑操作系统

 private const string Windows2000 = "5.0";
 private const string WindowsXP = "5.1";
 private const string Windows2003 = "5.2";
 private const string Windows2008 = "6.0";
 private const string Windows7 = "6.1";
 private const string Windows8OrWindows81 = "6.2";
 private const string Windows10 = "10.0";
/// <summary>
        /// 获取电脑操作系统--无法区分WIN10,WIN8
        /// </summary>
        /// <returns></returns>
        public static string GetPCSystemVersion()
        {
            try
            {
                switch (System.Environment.OSVersion.Version.Major + "." + System.Environment.OSVersion.Version.Minor)
                {
                    case Windows2000:
                        return "Win2000";
                        break;
                    case WindowsXP:
                        return "WinXP";
                        break;
                    case Windows2003:
                        return "Win2003";
                        break;
                    case Windows2008:
                        return "Win2008";
                        break;
                    case Windows7:
                        return "Win7";
                        break;
                    case Windows8OrWindows81:
                        return "Win8";
                        break;
                    case Windows10:
                        return "Win10";
                    default:
                        return string.Empty;
                        break;
                }
            }
            catch (Exception ex)
            {
                LogCommon.Logger.Logging(ex);
                return string.Empty;
            }
        }

  

12、获取MAC地址

 //mac地址
        private async Task InitMacAddress()
        {
            StringBuilder sb = new StringBuilder();
            foreach (NetworkInterface nic in NetworkInterface.GetAllNetworkInterfaces())
            {
                if (nic.OperationalStatus == OperationalStatus.Up)
                {
                    if (!string.IsNullOrEmpty(nic.GetPhysicalAddress().ToString())) {
                        sb.Append(nic.GetPhysicalAddress().ToString());
                        sb.Append(", ");
                    }
                }
            }

            string macAddress = sb.ToString().Trim().TrimEnd(',');
           
            lbMAC.Text = "MAC地址:" + macAddress;

            await Task.Delay(1);
        }

  

13、获取IP

 //ip地址
        private async Task InitLocalIPAddress()
        {
            var ipStr = "";
            var host = Dns.GetHostEntry(Dns.GetHostName());
            foreach (var ip in host.AddressList)
            {
                if (ip.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
                {
                    ipStr = ip.ToString();
                    break;
                }
            }
            lbIP.Text = "IP地址:" + ipStr;
            await Task.Delay(1);
        }

  

14、获取CPU占用比

 PerformanceCounter cpuCounter;
 cpuCounter = new PerformanceCounter("Processor", "% Processor Time", "_Total");
//获取CPU利用率
        private async Task InitializeCpu()
        {
            float cpuUsage = cpuCounter.NextValue(); // 获取下一个值,即当前值
            String num = cpuUsage.ToString("0.0");
            // 更新UI线程中的控件
            UpdateCPU(string.Format("CPU占比:{0}%", num));

            await Task.Delay(1);
        }

  

15、获取内存占用比

 PerformanceCounter _memoryCounter;
_memoryCounter = new PerformanceCounter("Memory", "Available MBytes");
//内存使用量
        private async Task InitializeNEICUN()
        {
            var value = ("内存占比:" + (100 - _memoryCounter.NextValue() / 160).ToString("0.0") + " %");
            UpdateNeiCun(value);

            await Task.Delay(1);
        }

  

posted @ 2023-06-07 10:21  若白驹过隙  阅读(47)  评论(0)    收藏  举报