关于VB6.0串口通讯的问题

xiao___bi 2010-10-23 02:49:31
我用VB6.0写了一个串口通讯的程序,在XP上能正常运行,但到了WIN7上就不行了。问题出在对串口的查询上,在WIN7操作系统的资源管理器里只显示有COM1口,但是我写的查询程序查到有COM1和COM3(在XP系统没有这种情况),而且在用COM3口进行通讯时,COM3口自动的返回COM3口发送出去的数据。不知这是为什么?请各位指教。
...全文
173 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
[Quote=引用楼主 xiao___bi 的回复:]
而且在用COM3口进行通讯时,COM3口自动的返回COM3口发送出去的数据。不知这是为什么?请各位指教。
[/Quote]
这应该是一个用于测试的口.
楼主是什么样的程序?直接屏了COM3的搜索结果不行吗.
dbcontrols 2010-11-05
  • 打赏
  • 举报
回复
不需要那么麻烦,我的电脑右键属性设备管理了面直接看
[Quote=引用 7 楼 veron_04 的回复:]
不需要那么麻烦,直接使用API函数一个一个的打开(COM1~COM3),哪个成功了,就表示它存在。
[/Quote]
贝隆 2010-11-05
  • 打赏
  • 举报
回复
不需要那么麻烦,直接使用API函数一个一个的打开(COM1~COM3),哪个成功了,就表示它存在。
cbm6666 2010-11-05
  • 打赏
  • 举报
回复
DOS的方法

Dim aa$, t#
Private Sub Command1_Click()
Call Shell("cmd /c mode >c:\tt.txt", vbHide)
t = Timer
Do: DoEvents: Loop Until Timer > t + 1
Open "c:\tt.txt" For Input As #1
While Not EOF(1)
Line Input #1, aa
If InStr(aa, "COM") > 0 Then Print aa
Wend
Close #1
'Kill "c:\tt.txt"
End Sub
cbm6666 2010-11-05
  • 打赏
  • 举报
回复
从注册表里面查

'*********************************读取注册表串口值
Private Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Private Declare Function RegEnumValue Lib "advapi32.dll" Alias "RegEnumValueA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpValueName As String, lpcbValueName As Long, ByVal lpReserved As Long, lpType As Long, ByVal lpData As String, lpcbData As Long) As Long
'Private Declare Function RegDeleteValue Lib "advapi32.dll" Alias "RegDeleteValueA" (ByVal hKey As Long, ByVal lpValueName As String) As Long
Const HKEY_LOCAL_MACHINE = &H80000002
Const REG_SZ = 1
Dim i&, ComStr$(), S
Private Sub Command1_Click()
MsgBox GetAllPort
End Sub

Public Function GetAllPort() As String
On Error Resume Next
S = GetSerialPort(HKEY_LOCAL_MACHINE, "HARDWARE\DEVICEMAP\SERIALCOMM")
If ComStr(0) = "" Then Exit Function
GetAllPort = ""
For i = 0 To UBound(S)
GetAllPort = GetAllPort & S(i) & ","
Next i
End Function

Public Function GetSerialPort(RegAddr&, Items$) As String()
On Error Resume Next
Dim hKey&, S1$, S2$, L&, L1&, J&
RegOpenKey RegAddr, Items, hKey
ReDim Preserve ComStr$(0)
ComStr(0) = "": i = 0: J = 0: Rtn = 0
Do
L = 1000: L1 = 1000
S1 = Space(L): S2 = Space(L)
Rtn = RegEnumValue(hKey, i, S1, L, 0, REG_SZ, S2, L1)
If Rtn = 0 Then
If InStr(S1, Chr(0)) > 0 And InStr(S2, Chr(0)) > 0 Then
S1 = UCase(Left(S1, InStr(S1, Chr(0)) - 1))
S2 = UCase(Left(S2, InStr(S2, Chr(0)) - 1))
If InStr(S2, "COM") > 0 Then
ReDim Preserve ComStr$(J)
ComStr(J) = S2
J = J + 1
End If
End If
End If
i = i + 1
Loop Until Rtn <> 0
GetSerialPort = ComStr()
End Function
flfq 2010-11-05
  • 打赏
  • 举报
回复
讲具体些,COM3怎么来的
homer3382 2010-11-05
  • 打赏
  • 举报
回复
COM3是虚拟的??这个虚拟的串口2,3针是连接的?呵呵
zdingyun 2010-10-23
  • 打赏
  • 举报
回复
贝隆 2010-10-23
  • 打赏
  • 举报
回复
有些晕。。。

1,451

社区成员

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

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