C#添加本机未占用的串口列表

1、添加引用:

using Microsoft.Win32.SafeHandles;
using System.Runtime.InteropServices;
using System.IO.Ports;

2、从非托管DLL导出函数的必要调用信息

 


public const short FILE_ATTRIBUTE_NORMAL = 0x80;
public const short INVALID_HANDLE_VALUE = -1;
public const uint GENERIC_READ = 0x80000000;
public const uint GENERIC_WRITE = 0x40000000;
public const uint CREATE_NEW = 1;
public const uint CREATE_ALWAYS = 2;
public const uint OPEN_EXISTING = 3;


[DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
static extern SafeFileHandle CreateFile(string lpFileName, uint dwDesiredAccess,uint dwShareMode, IntPtr lpSecurityAttributes, uint dwCreationDisposition, uint  dwFlagsAndAttributes, IntPtr hTemplateFile);

3、获取本机未占用串口并添加到Combobox中

public bool IsValid(String serial_name)
{
     try
     {
          using (SafeFileHandle hComm = CreateFile("\\\\.\\" + serial_name, GENERIC_READ             
                      | GENERIC_WRITE, 0, IntPtr.Zero, OPEN_EXISTING, 0, IntPtr.Zero))
          {
              if (!hComm.IsInvalid)
              {
                  hComm.Close();
                  return true;
              }
              // 串口被占用
              return false;
           }
      }
      catch
      {
           // 串口被占用
           return false;
      }

}

public void GetPorts()
{
    string[] ports = SerialPort.GetPortNames();
    foreach(string port in ports)
    {
        if(IsValid(port))combobox1.Items.Add(port);
    }
}

4、作用:防止在多个应用程序中配置相同的串口资源!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值