久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2714|回復(fù): 10
打印 上一主題 下一主題
收起左側(cè)

急求:VB6@win7(64bit)支持大于16的串口號的方法或控件

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
VB6自帶的串口控件最多只支持到Com16,但由于串口用的久了,各種USB-RS232的插拔,讓串口號升到了COM17。VB6的串口程序在新的串口號前全部掛 了,查了好久才知道VB6原生的MSCOMM32控件不支持大于16的串口號,請各路大神支個招指點(diǎn)一下!

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:830831 發(fā)表于 2023-1-19 13:02 | 只看該作者
端口號在系統(tǒng)里可以改

評分

參與人數(shù) 1黑幣 +5 收起 理由
名字不是重點(diǎn) + 5

查看全部評分

回復(fù)

使用道具 舉報

板凳
ID:161164 發(fā)表于 2023-1-19 13:32 | 只看該作者
開啟命令提示視窗(win鍵+R>CMD)
執(zhí)行指令:set devmgr_show_nonpresent_devices=1
同視窗繼續(xù)執(zhí)行指令:devmgmt.msc
你應(yīng)該會看到裝置管理員
選擇 "檢視"->"顯示隱藏裝置"
把右方 "+" 點(diǎn)開看看,你應(yīng)該可以看到平時看不見的設(shè)備
呈現(xiàn)淡灰色的就是離線設(shè)備,原則上可以刪掉

評分

參與人數(shù) 1黑幣 +5 收起 理由
名字不是重點(diǎn) + 5

查看全部評分

回復(fù)

使用道具 舉報

地板
ID:648281 發(fā)表于 2023-1-19 20:32 | 只看該作者
系統(tǒng)的串口號升到了COM17,并不是有17串口在使用吧,
你可以進(jìn)到設(shè)備管理器里面,把你現(xiàn)在用的串口號改小

評分

參與人數(shù) 1黑幣 +5 收起 理由
名字不是重點(diǎn) + 5

查看全部評分

回復(fù)

使用道具 舉報

5#
ID:343102 發(fā)表于 2023-1-19 21:12 | 只看該作者
這個應(yīng)該經(jīng)常初始化,否則再多串口號也不夠用。

評分

參與人數(shù) 1黑幣 +5 收起 理由
名字不是重點(diǎn) + 5

查看全部評分

回復(fù)

使用道具 舉報

6#
ID:155507 發(fā)表于 2023-1-19 22:32 | 只看該作者
你可以用 VB6 Serial API class


  1. Option Explicit
  2. '// WIN32API Function
  3. '//Private Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, lpSecurityAttributes As Long, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long

  4. Private Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, lpSecurityAttributes As Any, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long

  5. Private Declare Function WriteFile Lib "kernel32" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToWrite As Long, lpNumberOfBytesWritten As Long, lpOverlapped As Any) As Long
  6. Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
  7. Private Declare Function SetCommState Lib "kernel32" (ByVal hCommDev As Long, lpDCB As DCB) As Long
  8. Private Declare Function GetCommState Lib "kernel32" (ByVal nCid As Long, lpDCB As DCB) As Long

  9. '// WIN32API Structure
  10. Private Type DCB
  11.         DCBlength As Long
  12.         BaudRate As Long
  13.         fBitFields As Long 'See Comments in Win32API.Txt
  14.         wReserved As Integer
  15.         XonLim As Integer
  16.         XoffLim As Integer
  17.         ByteSize As Byte
  18.         Parity As Byte
  19.         StopBits As Byte
  20.         XonChar As Byte
  21.         XoffChar As Byte
  22.         ErrorChar As Byte
  23.         EofChar As Byte
  24.         EvtChar As Byte
  25.         wReserved1 As Integer 'Reserved; Do Not Use
  26. End Type

  27. '// WIN32API Constant
  28. Private Const GENERIC_READ = &H80000000
  29. Private Const GENERIC_WRITE = &H40000000
  30. Private Const OPEN_EXISTING = 3
  31. Private Const FILE_FLAG_OVERLAPPED = &H40000000
  32. Private Const INVALID_HANDLE_VALUE = -1
  33. Private Const NOPARITY = 0
  34. Private Const ONESTOPBIT = 0

  35. Private Const FILE_FLAG_NO_BUFFERING = &H20000000

  36. '// Comm Port Handle
  37. Private hComm As Long

  38. Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
  39.     '// Close the opened Comm
  40.     If hComm <> 0 Then CloseHandle (hComm)
  41. End Sub

  42. Private Sub CmdAction_Click(Index As Integer)
  43.     Dim Idx As Integer
  44.     Select Case Index
  45.     Case 0 '// Open/Close
  46.         If CmdAction(0).Caption = "&Open" Then
  47.             If OpenPort(txtCOMM(0).Text, CLng(txtCOMM(1).Text), CLng(txtCOMM(2).Text)) <> 0 Then
  48.                 CmdAction(0).Caption = "&Cancel"
  49.                 For Idx = 0 To 2: txtCOMM(Idx).Enabled = False: Next
  50.                 txtData.Enabled = True
  51.                 CmdAction(1).Enabled = True
  52.                 lblStatus.Caption = "Open Port Successful: Hanlde -> " & hComm
  53.             Else
  54.                 lblStatus.Caption = "Fail to open port!!!"
  55.             End If
  56.         Else
  57.             CloseHandle (hComm)
  58.             CmdAction(0).Caption = "&Open"
  59.             For Idx = 0 To 2: txtCOMM(Idx).Enabled = True: Next
  60.             txtData.Enabled = False
  61.             CmdAction(1).Enabled = False
  62.             lblStatus.Caption = "Port Closed"
  63.         End If
  64.     Case 1 '// Send
  65.         Write2Port txtData.Text
  66.     End Select

  67. End Sub

  68. Private Function OpenPort(ByVal strPort As String, ByVal lngBaudRate As String, ByVal lngDataBit As Long) As Long
  69.     Dim pDCB As DCB
  70.     Dim lpPort As String
  71.    
  72.     '// Create Comm Name Buffer
  73.     '//lpPort = String(6, Chr(0))
  74.     '//Mid$(lpPort, 1, 6) = "COM" & strPort & ":"
  75.        
  76.     lpPort = "\\.\COM" + strPort + vbNullChar
  77.        
  78.     '// Close the current opened Comm Port (If any)
  79.     If hComm > 0 Then CloseHandle (hComm)
  80.    
  81.     '// Open selected comm port
  82.     '//hComm = CreateFile(lpPort, _
  83.     '//                    GENERIC_READ Or GENERIC_WRITE, _
  84.     '//                    0, _
  85.     '//                    vbNull, _
  86.     '//                    OPEN_EXISTING, _
  87.     '//                    0, _
  88.     '//                    vbNull)

  89.         hComm = CreateFile(lpPort, _
  90.                                                 GENERIC_READ Or GENERIC_WRITE, _
  91.                                                 0, _
  92.                                                 ByVal 0, _
  93.                                                 OPEN_EXISTING, _
  94.                                                 FILE_FLAG_NO_BUFFERING, _
  95.                                                 0)

  96.    
  97.     If hComm <> INVALID_HANDLE_VALUE Then
  98.         pDCB.DCBlength = Len(pDCB)
  99.         
  100.         '// Retrieve default Comm port settings
  101.         GetCommState hComm, pDCB
  102.       
  103.         '// Configure new Comm port settings
  104.         With pDCB
  105.             .BaudRate = lngBaudRate
  106.             .Parity = NOPARITY
  107.             .ByteSize = lngDataBit
  108.             .StopBits = ONESTOPBIT
  109.             .EofChar = 0
  110.             .ErrorChar = 0
  111.             .EvtChar = 0
  112.             .fBitFields = 20625
  113.             .XoffChar = 19
  114.             .XoffLim = 512
  115.             .XonChar = 17
  116.             .XonLim = 2048
  117.         End With
  118.         
  119.         '// Set new configure Comm port settings
  120.         If SetCommState(hComm, pDCB) = 0 Then
  121.             CloseHandle (hComm)
  122.             OpenPort = 0

  123.             MsgBox "Fail to configure serial port!", vbExclamation + vbOKOnly, "Error"
  124.         Else
  125.             OpenPort = hComm
  126.         End If
  127.     Else
  128.         CloseHandle (hComm)
  129.         OpenPort = 0
  130.     End If
  131. End Function

  132. Private Sub Write2Port(ByVal strData As String)
  133.     Dim dwByteWrite As Long
  134.     Dim Sz As Long, Idx As Long
  135.     Dim Bytes() As Byte
  136.    
  137.     '// Create & Convert str into array of Byte
  138.     Sz = Len(strData)
  139.     ReDim Bytes(Sz) As Byte
  140.     For Idx = 1 To Sz
  141.         Bytes(Idx) = Asc(Mid$(strData, Idx, 1))
  142.     Next
  143.    
  144.     '// Write data into Open Comm Port
  145.     If hComm <> INVALID_HANDLE_VALUE Then
  146.         WriteFile hComm, _
  147.                     Bytes(1), _
  148.                     UBound(Bytes), _
  149.                     dwByteWrite, _
  150.                     ByVal 0&
  151.     Else
  152.         MsgBox "Invalid port handle", vbExclamation + vbOKOnly, "Error"
  153.     End If
  154.    
  155.     Erase Bytes
  156.    
  157. End Sub

復(fù)制代碼




vb6SerialAPI-master.zip

13.69 KB, 下載次數(shù): 3

評分

參與人數(shù) 1黑幣 +5 收起 理由
名字不是重點(diǎn) + 5 贊一個!

查看全部評分

回復(fù)

使用道具 舉報

7#
ID:277550 發(fā)表于 2023-1-19 23:12 | 只看該作者
通常這樣寫  \\.\COM23  。 不然,去設(shè)備管理器中修改到較小的串口號

評分

參與人數(shù) 1黑幣 +5 收起 理由
名字不是重點(diǎn) + 5

查看全部評分

回復(fù)

使用道具 舉報

8#
ID:67925 發(fā)表于 2023-1-20 06:47 | 只看該作者
可以直接調(diào)用Windows API(CreateFile()...),本來控件只是API的一層封裝而已,直接使用API也不會多復(fù)雜,不過既然你有這個提問,說明你不想用API。
還有一個簡單的方法,修改串口控件OCX,將控件OCX判斷串口號是否小于等于16的語句修改為小于等于255即可,這樣就可以用到串口號1-255:


簡明教程:
1. 找到mscomm32.ocx,如果是64位Windows7,則目錄為:C:\Windows\SysWOW64\mscomm32.ocx
2. 使用HEX文本編輯器(比如UltraEdit之類的)打開
3. 查找HEX字符串“66 3D 10 00”
4. 將其修改為“66 3D FF 00”

如果你的程序需要在其他機(jī)器上運(yùn)行,則需要將這個文件拷貝過去,或制作一個安裝程序,里面包含這個文件。
回復(fù)

使用道具 舉報

9#
ID:824490 發(fā)表于 2023-1-20 14:15 | 只看該作者
回以上各樓層:
修改串口號我明白,有問題的電腦的所有COM16之前的串口都顯示在使用,所以也改不了低于16的,通過注冊表可以把多出來的串口號刪除,但不期望使用上位機(jī)軟件的人會正確操作。
所以,一勞永逸的方法是更新上位機(jī)軟件,跳過這個坑。。
不用控件用API倒是可以試一下。或許可以避開這個BUG
回復(fù)

使用道具 舉報

10#
ID:883242 發(fā)表于 2023-1-23 15:21 | 只看該作者
就是個重啟一下電腦的問題,沒必要搞這么復(fù)雜。
回復(fù)

使用道具 舉報

11#
ID:824490 發(fā)表于 2023-1-24 09:25 | 只看該作者
Hephaestus 發(fā)表于 2023-1-23 15:21
就是個重啟一下電腦的問題,沒必要搞這么復(fù)雜。


你是說重啟之后串口號就能小于16,或是上位機(jī)就能支持大于16的串口號?
還是說重啟之后串口號顯示顯示“使用中”的狀態(tài)會被改變?



回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久国产精品久久久久久 | 黑人性hd | 99精品热视频 | 成人国产精品 | 亚洲五码久久 | 亚洲国内精品 | 亚洲人在线播放 | 亚洲国产精品99久久久久久久久 | 夜夜干夜夜操 | 91精品久久久久久久久中文字幕 | 一区二区三区视频在线观看 | 亚洲风情在线观看 | 国产在线中文字幕 | 久久青| 欧美黑人体内she精在线观看 | 99久久精品免费看国产高清 | 精品网站999 | 国产一区二区三区在线免费观看 | 一级午夜aaa免费看三区 | 国产九九精品视频 | 欧美日韩不卡在线 | 伊人春色成人网 | 欧美精品在线观看 | 99热热热热| 国产精品123区 | 亚洲精品一区在线 | 久久国内 | 五月婷婷在线视频 | 在线视频久久 | 国产无套一区二区三区久久 | 国产视频第一页 | 人人草天天草 | 国产中文在线 | 亚洲最新在线视频 | 99精品久久久| 欧美不卡 | www.久久99| 96av麻豆蜜桃一区二区 | 日本色综合 | 成人网在线观看 | 欧美日韩视频一区二区 |