如何获取 Win32 中可用串行端口的列表?

2023-12-05

我有一些遗留代码,通过调用提供 PC 上可用 COM 端口的列表EnumPorts()函数,然后过滤以“COM”开头的端口名称。

出于测试目的,如果我可以将此代码与类似的东西一起使用,那将非常有用com0com,它提供了成对的虚拟 COM 端口,它们作为空调制解调器循环在一起。

但是 com0com 端口未被找到EnumPorts()功能(即使没有过滤“COM”)。超级终端和 SysInternals PortMon 都可以看到它们,所以我确信它安装正确。

那么是否还有其他一些 Win32 函数可以提供可用串行端口的明确列表?


The 枚举串行端口 v1.20Nick D 使用建议nine列出串行端口的不同方法!我们当然不缺少选择,尽管结果似乎有所不同。

为了省去其他人的麻烦,我将在这里列出它们并表明他们成功地找到了com0com我的 PC (XP Pro SP2) 上的端口:

  1. 创建文件(“COM”+1->255)正如韦尔·达卢尔所建议的
    ✔ 找到 com0com 端口,花费了 234 毫秒。

  2. 查询DosDevice()
    ✔ 找到 com0com 端口,花费了 0 毫秒。

  3. GetDefaultCommConfig("COM" + 1->255)
    ✔ 找到 com0com 端口,花费了 235 毫秒。

  4. “SetupAPI1”使用对 SETUPAPI.DLL 的调用
    ✔ 找到 com0com 端口,还报告“友好名称”,花费了 15 毫秒。

  5. “SetupAPI2”使用对 SETUPAPI.DLL 的调用
    ✘ 未找到 com0com 端口,报告“友好名称”,耗时 32 毫秒。

  6. 枚举端口()
    ✘ 报告一些非COM端口,没有找到com0com端口,花了15ms。

  7. 使用 WMI 调用
    ✔ 找到 com0com 端口,还报告“友好名称”,花费了 47 毫秒。

  8. 使用 MSPORTS.DLL 调用的 COM 数据库
    ✔/✘ 报告了一些非 COM 端口,找到了 com0com 端口,花费了 16 毫秒。

  9. 迭代注册表项 HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM
    ✔ 找到 com0com 端口,花费了 0 毫秒。这显然是什么系统内部端口Mon uses.

基于这些结果,我认为 WMI 方法可能最适合我的要求,因为它相对较快,而且它还提供了友好的名称(例如“通信端口 (COM1)”、“com0com - 串行端口模拟器”)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何获取 Win32 中可用串行端口的列表? 的相关文章

  • 高效列出目录中的所有子目录

    请参阅迄今为止所采取的建议的编辑 我正在尝试使用 WinAPI 和 C 列出给定目录中的所有目录 文件夹 现在我的算法又慢又低效 使用 FindFirstFileEx 打开我正在搜索的文件夹 然后我查看目录中的每个文件 使用 FindNex
  • 使用 python 进行串行数据记录

    Intro 我需要编写一个小程序来实时读取串行数据并将其写入文本文件 我在读取数据方面取得了一些进展 但尚未成功地将这些信息存储在新文件中 这是我的代码 from future import print function import se
  • Tkinter - 浮动窗口 - 调整大小

    灵感来自this https stackoverflow com a 22424245 13629335问题 我想为我的根窗口编写自己的调整大小函数 但我刚刚注意到我的代码显示了一些性能问题 如果你快速调整它的大小 你会发现窗口没有像我希望
  • 使用 SetWindowsHookEx() 阻止窗口鼠标单击

    我编写了一个应用程序 将某些过程挂接到新进程上 以监视鼠标按下事件并禁用新进程上的鼠标按下事件 截至目前 我能够捕获进入此进程的鼠标按下事件 并且我正在尝试将所有鼠标按下事件作为 POC 禁用 这就是我目前在钩子程序中所做的事情 exter
  • GetKeyState 函数?

    为什么我按下方向箭头ON后 函数GetKeyState仍然给我一个大于0的值 include
  • 构建适用于 Windows 8 的控制面板小程序

    我开发了一个控制面板小程序 cpl 文件 我们与我们的应用程序一起分发 它在所有以前版本的 Windows 上运行良好 但在 Windows 8 上不行 该小程序根本不显示在控制面板中 以前我们所要做的就是将 cpl 文件放入 system
  • 将对话框项分组到单个“组”(Visual Studio)

    我想创建一个对话框窗口来更改应用程序的设置 下面是 Adob e Reader 的屏幕截图 使用 Spy 后 我猜想 在右侧 所有控件 按钮 组合框 等 都属于 GroupBox 对于左侧TreeView控件中的每个类别 都有一个相应的Gr
  • 在 Windows Vista 和 Windows 7 上使用 HEAP_NO_SERIALIZE 的堆内存函数速度减慢约 100 倍的原因

    我正在尝试追踪 Windows Vista 和 Windows 7 中堆内存功能的巨大减慢 我没有在任何服务器版本上进行测试 这种情况在 Windows XP 上根本不会发生 只会在 Microsoft 较新的操作系统上发生 我最初在 Wi
  • 如何在c#中创建多线程

    我需要监听机器中的所有串行端口 假设我的机器有 4 个串行端口 我必须创建 4 个线程并开始分别使用附加线程监听每个端口 我使用此代码来获取我的机器中的端口数量 private SerialPort comPort new SerialPo
  • 从单击的按钮上移除焦点

    当我单击按钮时 焦点将设置到该按钮 如何使用 C 中的 WIN API 移除此按钮的焦点 我想也许以某种方式SendMessageWIN API 方法可以从按钮上移除焦点 我只有按钮的句柄 也无法再访问父窗口 我知道几乎每次都可以使用 Se
  • 如何从系统属性获取Windows操作系统环境变量

    我遇到一个关于系统属性环境变量的奇怪问题 如你所知 我们可以打开Computer gt Property gt Advanced System Settings gt Advanced gt System Environment Varia
  • 注册表碎片整理程序[重复]

    这个问题在这里已经有答案了 这是出于好奇 但我见过几个 其中一些非常流行 称为注册表碎片整理程序的软件 虽然我可以看到它们提供的好处 但我很好奇您到底是如何进行注册表碎片整理的 请注意 我并不是要求提供软件名称 只是询问其如何以编程方式完成
  • 使用 WinAPI 连接禁用的显示设备

    我的问题是启用禁用的监视器ChangeDisplaySettingsEx 我想这不是火箭科学 但经过一番挖掘后 它看起来仍然是不可能的 我找到了一种根据找到的 Microsoft 代码示例禁用所有辅助显示器的方法here https msd
  • 多个原始输入窗口接收器

    我有一个仅消息窗口 ATL CWindowImpl 它使用 RIDEV INPUTSINK 标志将自身注册为原始输入 这意味着无论该窗口是否是前台窗口 它都会获取所有输入 当该窗口只有一个实例时 这非常有效 但是 当我创建超过 1 个窗口实
  • 计算 Windows 10 上第 3 方窗口的标题栏按钮的总宽度

    我最初的方法是使用GetSystemMetrics with SystemMetric SM CXSIZE以及一些基于可用按钮的简单数学计算 乘以 3 或乘以 1 通过WindowStyle DllImport user32 dll pri
  • WM_NEXTDLGCTL 可以与非对话框窗口一起使用吗?

    的文档WM NEXTDLGCTL https msdn microsoft com en us library windows desktop ms645432 aspx声明该消息将与对话框一起使用 发送到对话框过程以将键盘焦点设置到对话框
  • 如何获取属于某个进程的打开句柄的计数?

    您可以使用该程序流程浏览器 http technet microsoft com en us sysinternals bb896653查看正在运行的应用程序有多少个句柄 有没有办法用Delphi代码来获取这个数字 我有兴趣跟踪应用程序本身
  • 有没有办法找到dll公开的所有函数

    我一直在寻找一种方法来获取映射到 dll 中函数名称的所有字符串 我的意思是您可以调用 GetProcAddress 的所有字符串 如果你对 dll 进行十六进制转储 符号 字符串 就在那里 但我认为必须有一个系统调用来获取这些名称 如果您
  • 如何等到我启动的程序使用完该文件后才删除该文件?

    我一直在寻找一种方法来打开通过 Delphi 应用程序及其适当的应用程序保存到我的计算机上的文件 该文件存储在 SQL 数据库中的 Varbinary 字段中 加载到内存流中 然后通过 TMemoryStream 的 SavetoFile
  • 自动从 C# 代码进行调试过程并读取寄存器值

    我正在寻找一种方法来读取某个地址的 edx 注册表 就像这个问题中所问的那样 读取eax寄存器 https stackoverflow com questions 16490906 read eax register 虽然我的解决方案需要用

随机推荐

  • MATLAB:循环绘图

    我尝试在循环内进行绘图 但它仅打印最后一个绘图 我该如何修复它 我尝试过使用hold on and drawnow在情节定义之后但它不起作用 这是我的代码 for t 1 5 alive Game World Generations spe
  • 性能调优 WCF 服务

    对于 WCF Web 服务来说 最重要的性能调整领域是什么 ASP net 线程设置 WCF 节流 请查看下面的文章和白皮书 我认为它们应该为您提供更具体的性能考虑因素供您探索 并可能提供一些非常实用的设置来调整 优化或更改 我也在另一个问
  • 如何使用 python 在heroku 中连接 postgresql 时使用 dj-database-url

    我来这里是因为我对 heroku python django postgresql 小组非常陌生 我在 google 上搜索了 dj database url 的用法 但我不明白为什么在开发需要与 postgresql 连接的 python
  • CakePhp 错误的身份验证重定向

    我刚刚开始学习 Auth 组件 但在重定向方面遇到了问题 我的本地应用程序的路径是 localhost school 但是当登录的用户尝试访问某个网址时 他不允许该网站重定向到 localhost school school 并显示 请求的
  • jQuery UI 令牌

    我按照本教程使用 jQuery UI 生成 Facebook 令牌 例如 http net tutsplus com tutorials javascript ajax how to use the jquery ui autocomple
  • 自动装配到列表中时的 Bean 顺序

    我定义了一个接口IWorker以及它的一些实现WorkerA and WorkerB 都注释为 Component 然后我通过以下方式将它们自动连接到我的应用程序中 Autowired private List
  • 如何从 NSData 字符串数据(不是 UIImage)创建 CGImageRef

    如何在没有 UIImage 的情况下创建新的 CGImageRef 我不能使用image CGImage 我从服务器进程接收到一个以 std string 形式存在的 Base64 编码图像 下面代码的第一部分模拟接收编码字符串 UIIma
  • 股票预测:GRU 模型预测相同的给定值而不是未来的股票价格

    i was just testing this model from kaggle post this model suppose to predict 1 day ahead from given set of last stocks A
  • 为什么colspan影响html表格边框

    所以我偶然发现了一些对我来说似乎很奇怪的东西 例如 以下代码 table tr td align center style border 3px solid black Title td tr tr td style border 2px
  • 如何检查jframe是否打开?

    我下面的代码创建一个新数组并将其发送到聊天 jFrame String info1 new String 3 username userid userid2 are variables info1 0 username4 info1 1 u
  • 如何更改JsRender模板标签?

    我用树枝 它使用这些标签 name 我想将 JsRender 包含在我的项目中 但 JsRender 也使用相同的标签 name 所以存在冲突并且没有任何作用 如何使用自定义标签更改默认的 JsRender 标签 类似于 Ruby UPD
  • PyQT 布局之间的导航

    下面是我的应用程序代码 它允许您在窗口之间切换 该菜单有两个编程选项 例如 详细报告 和 所有公司 现在加载布局后 我不知道如何将按钮放在这两个视图中 以允许您将视图从 详细报告 更改为 全部 公司 反之亦然 你能帮助我吗 class Ap
  • Stackdriver 日志记录中不会创建任何日志

    在我的谷歌应用程序脚本中 我有 Logger log test 我什至尝试过 console log test 但即使我将项目 id 设置为 Google Cloud 项目 id 也不会打印到 stackdriver 日志中 屏幕显示 为了
  • .NET 中将 int 转换为位数组

    如何将 int 转换为位数组 如果我例如有一个值为 3 的 int 我想要一个长度为 8 的数组 如下所示 0 0 0 0 0 0 1 1 这些数字中的每一个都位于数组中大小为 8 的单独槽中 Use the BitArray class
  • MySQL 多数据库设置

    我已经寻找了这个问题的答案 我似乎能找到的只是一些问题 询问是使用多个数据库还是在单个数据库中使用多个表更好 但这不是我的问题 问题 1 我想在当前数据库旁边设置一个新数据库 但不知道如何操作 我想授予用户对 DB2 的完全管理员访问权限
  • VBA:检测用户窗体的任何文本框中的更改

    有一个用户表单有很多文本框 我需要检测每个文本框的更改 因此 我为表单中的每个文本框编写了一个子例程 结果是一大段代码 由于每个文本框的代码都是相同的 我想优化它 那么是否可以只编写一个子例程来检测表单的任何文本框中的更改 实现这一目标的唯
  • 在32位系统上安装64位glib2进行交叉编译

    我正在尝试在 32 位 ubuntu 系统上交叉编译 64 位可执行文件 这一直有效 直到链接为止 由于缺少 64 位 glib2 libglib 2 0 a 它失败了 如果我在 64 位系统上执行此操作 我会使用getlibs将 32 位
  • OpenJPA 合并/持久非常慢

    我在 WebSphere Application Server 8 上使用 OpenJPA 2 2 0 和 MySQL 5 0 DB 我有一个要合并到数据库中的对象列表 就像是 for Object ob list Long start C
  • Redis:插入元素在开头还是结尾时,ZADD 是否比 O(logN) 更好?

    雷迪斯文档对于 ZADD 来说 操作是 O logN 然而 有谁知道 ZADD 是否比 O logN 当插入的元素位于排序顺序的开头或结尾时 例如 对于某些实现 这可能是 O 1 具体来说 redistutorial指出 排序集是通过双端口
  • 如何获取 Win32 中可用串行端口的列表?

    我有一些遗留代码 通过调用提供 PC 上可用 COM 端口的列表EnumPorts 函数 然后过滤以 COM 开头的端口名称 出于测试目的 如果我可以将此代码与类似的东西一起使用 那将非常有用com0com 它提供了成对的虚拟 COM 端口