VB6自动识别串口号的问题

ccbbcc 2019-08-13 11:27:20
我看到一个串口上位机软件,可以自动识别串口号,不用选择。


请问这是如何实现的?谢谢!
...全文
752 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
不能飞的鱼 2021-04-11
  • 打赏
  • 举报
回复
引用 5 楼 X-i-n 的回复:
上面我放的是VBS代码,在VB里直接用MsgBox。sports是串口集合,sport是串口对象。拿到集合以后,每个串口都试着连接一下,能连接上,也能正常响应,这个就是你需要的串口。
  Dim Wmi
  Set Wmi = GetObject("Winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
  Set sports = Wmi.Execquery("Select * From Win32_SerialPort")
  For Each sport In sports
    MsgBox "设备ID:" & sport.DeviceID & vbCrLf & "描述:" & sport.Description & vbCrLf & "状态:" & sport.Status
  Next
这个只能显示一个串口信息,如果多个,怎么弄呢?
X-i-n 2019-08-15
  • 打赏
  • 举报
回复

Set wbemServices = GetObject("winmgmts:\\.")
Set wbemObjectSet = wbemServices.InstancesOf("Win32_LogicalMemoryConfiguration") 

For Each wbemObject In wbemObjectSet 
Msgbox "物理内存 (MB): " & CInt(wbemObject.TotalPhysicalMemory/1024)
Next 
这是检测物理内存容量的代码,试试能不能正常输出结果。
ccbbcc 2019-08-15
  • 打赏
  • 举报
回复

谢谢!还是不行。
count还是0
X-i-n 2019-08-15
  • 打赏
  • 举报
回复
把wmi赋值那句直接改成 Set Wmi = GetObject("winmgmts:")再试试看。
ccbbcc 2019-08-15
  • 打赏
  • 举报
回复
引用 13 楼 X-i-n 的回复:
刚才粘错代码了。试试这个
 Dim Wmi
Set Wmi = GetObject("winmgmts:\\.")
Set sports = Wmi.InstancesOf("Win32_SerialPort")

For Each sport In sports
MsgBox "设备ID:" & sport.DeviceID & vbCrLf & "描述:" & sport.Description & vbCrLf & "状态:" & sport.Status
Next

谢谢你这么耐心的帮我,可是问题依然如故。
X-i-n 2019-08-15
  • 打赏
  • 举报
回复
刚才粘错代码了。试试这个
 Dim Wmi
    Set Wmi = GetObject("winmgmts:\\.")
    Set sports = Wmi.InstancesOf("Win32_SerialPort")
     
    For Each sport In sports
        MsgBox "设备ID:" & sport.DeviceID & vbCrLf & "描述:" & sport.Description & vbCrLf & "状态:" & sport.Status
    Next
ccbbcc 2019-08-15
  • 打赏
  • 举报
回复
引用 11 楼 X-i-n 的回复:
试试这个吧,再不行我也找不出问题在哪了。
Sub x()
Dim Wmi
Set Wmi = GetObject("Winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Set sports = Wmi.Execquery("Select * From Win32_SerialPort")

For Each sport In sports
MsgBox "设备ID:" & sport.DeviceID & vbCrLf & "描述:" & sport.Description & vbCrLf & "状态:" & sport.Status
Next
End Sub

谢谢!还是不行。我快崩溃了。
最近举杯邀明月和脆皮大雪糕去哪了?
X-i-n 2019-08-15
  • 打赏
  • 举报
回复
试试这个吧,再不行我也找不出问题在哪了。
Sub x()
    Dim Wmi
    Set Wmi = GetObject("Winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
    Set sports = Wmi.Execquery("Select * From Win32_SerialPort")
    
    For Each sport In sports
        MsgBox "设备ID:" & sport.DeviceID & vbCrLf & "描述:" & sport.Description & vbCrLf & "状态:" & sport.Status
    Next
End Sub
ccbbcc 2019-08-15
  • 打赏
  • 举报
回复
引用 9 楼 X-i-n 的回复:

Set wbemServices = GetObject("winmgmts:\\.")
Set wbemObjectSet = wbemServices.InstancesOf("Win32_LogicalMemoryConfiguration")

For Each wbemObject In wbemObjectSet
Msgbox "物理内存 (MB): " & CInt(wbemObject.TotalPhysicalMemory/1024)
Next

这是检测物理内存容量的代码,试试能不能正常输出结果。

谢谢!
Dim wbemServices
Dim wbemObjectSet
Dim wbemObject As Object
这是我定义的变量。
运行出现错误:

X-i-n 2019-08-13
  • 打赏
  • 举报
回复
获取所有串口,挨个通信一次或者根据名称判断是不是正确的串口。
Dim Wmi
Set Wmi = GetObject("Winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Set sports = Wmi.Execquery("Select * From Win32_SerialPort")
For Each sport In sports
Wscript.Echo "设备ID:" & sport.DeviceID & vbCrLf & "描述:" & sport.Description & vbCrLf & "状态:" & sport.Status
Next
http://wutils.com/wmi/root/cimv2/win32_serialport/
ccbbcc 2019-08-13
  • 打赏
  • 举报
回复
引用 5 楼 X-i-n 的回复:
上面我放的是VBS代码,在VB里直接用MsgBox。sports是串口集合,sport是串口对象。拿到集合以后,每个串口都试着连接一下,能连接上,也能正常响应,这个就是你需要的串口。
  Dim Wmi
Set Wmi = GetObject("Winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Set sports = Wmi.Execquery("Select * From Win32_SerialPort")
For Each sport In sports
MsgBox "设备ID:" & sport.DeviceID & vbCrLf & "描述:" & sport.Description & vbCrLf & "状态:" & sport.Status
Next

谢谢!好像不行。


找不到串口,sport是nothing
执行到for循环那儿,直接就跳到for循环后头啦。
用串口助手是可以连上的。
X-i-n 2019-08-13
  • 打赏
  • 举报
回复
上面我放的是VBS代码,在VB里直接用MsgBox。sports是串口集合,sport是串口对象。拿到集合以后,每个串口都试着连接一下,能连接上,也能正常响应,这个就是你需要的串口。
  Dim Wmi
  Set Wmi = GetObject("Winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
  Set sports = Wmi.Execquery("Select * From Win32_SerialPort")
  For Each sport In sports
    MsgBox "设备ID:" & sport.DeviceID & vbCrLf & "描述:" & sport.Description & vbCrLf & "状态:" & sport.Status
  Next
ccbbcc 2019-08-13
  • 打赏
  • 举报
回复
Dim Wscript 好了。

我监视了一下变量,这个样子,还是不知道哪个串口能用。
你的代码看不太明白。
ccbbcc 2019-08-13
  • 打赏
  • 举报
回复
好了。这样就i行了:
Dim sports As Object '
Dim sport As Object
Wscript这个没定义,不知道怎么搞
ccbbcc 2019-08-13
  • 打赏
  • 举报
回复
引用 1 楼 X-i-n 的回复:
获取所有串口,挨个通信一次或者根据名称判断是不是正确的串口。
Dim Wmi
Set Wmi = GetObject("Winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Set sports = Wmi.Execquery("Select * From Win32_SerialPort")
For Each sport In sports
Wscript.Echo "设备ID:" & sport.DeviceID & vbCrLf & "描述:" & sport.Description & vbCrLf & "状态:" & sport.Status
Next

http://wutils.com/wmi/root/cimv2/win32_serialport/

谢谢!提示sports没定义。应该定义成什么类型啊?

7,785

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧