4
Q
串口編程
A
回答
1
Option Explicit
'******************************************************************************
' Description: Scans machine using the WIN32 API for all available comm hardware
' Usage: main program calls the 'CommSettings' sub, passing the
' name of the communications control and a combobox name.
'******************************************************************************
Dim CommCntrl As Control ' the communications control
Dim cmboPort As Control ' combobox to populate
Dim bNoComm As Boolean
Private Const MAX_COMM = 16 ' 32 max port # to check
Private Const GENERIC_READ = &H80000000
Private Const GENERIC_WRITE = &H40000000
Private Const OPEN_EXISTING = 3
Private Const FILE_FLAG_OVERLAPPED = &H40000000
Private Const INVALID_HANDLE_VALUE = -1
Private Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" _
(ByVal lpFileName As String, _
ByVal dwDesiredAccess As Long, _
ByVal dwShareMode As Long, _
ByVal lpSecurityAttributes As String, _
ByVal dwCreationDisposition As Long, _
ByVal dwFlagsAndAttributes As Long, _
ByVal hTemplateFile As String) As Long
Private Declare Function CloseHandle Lib "kernel32" (_
ByVal hObject As Long) As Long
Public Sub GetPorts(serialCntrl As Control, comboBox As Control)
'******************************************************************************
' Usage: Pass the name of the communications control, a combo box, and the
' current com port setting in the calling routine.
'******************************************************************************
Dim iCntr As Integer ' loop counter
Dim hRet As Long ' api return value
Dim sCom As String ' comm port name
On Error Resume Next
Set cmboPort = comboBox
Set CommCntrl = serialCntrl
Err = 0
cmboPort.Clear
' Close the port if it's open
If CommCntrl.PortOpen = True Then
CommCntrl.PortOpen = False
DoEvents
Else
bNoComm = True
End If
' Scan for all possible hardware so we can display all available ports
' in the combo box. Dynamically adjusts for PC's with addin cards
For iCntr = 1 To MAX_COMM
' try to open the port.
' \\.\ required for ports > 9, works for all ports
sCom = "\\.\Com" & CStr(iCntr) & vbNullChar
hRet = CreateFile(sCom, GENERIC_READ Or _
GENERIC_WRITE, 0, vbNullString, OPEN_EXISTING, _
FILE_FLAG_OVERLAPPED, vbNullString)
If hRet <> INVALID_HANDLE_VALUE Then
hRet = CloseHandle(hRet)
cmboPort.AddItem Format$(iCntr)
Debug.Print iCntr
Else
' dll error 5 = already open
' dll error 2 = no harware
If Err.LastDllError = 5 Then
cmboPort.AddItem Format$(iCntr) & " - Busy"
End If
End If
Next
End Sub
相關問題
- 1. 串口編程?
- 2. VB6串口編程
- 3. Qt和串口編程
- 4. 幫助.....串口編程
- 5. iPhone中的串口編程
- 6. Windows中的串口編程
- 7. 串行端口投幣編程C#
- 8. 通過Win32 API的VB6串口編程
- 9. 使用Visual C++編程串口arduino
- 10. Android-Beagleboard上的串口編程
- 11. 編程接口
- 12. 接口編程
- 13. 編程接口
- 14. 編程的接口
- 15. 多線程串口
- 16. 使用C中的多線程進行串口編程
- 17. 編程API和編程到接口
- 18. 串流編程
- 19. 窗口編程設置窗口
- 20. 窗口編程API - LoadImage
- 21. 編程關閉gtk窗口
- 22. 編程只顯示窗口
- 23. Quartz CronExpression的編程接口?
- 24. Solaris:ifconfig的編程接口?
- 25. Java編程接口相關
- 26. 對MOUNTVOL.EXE的編程接口
- 27. 編程到一個接口
- 28. Flash Builder 4.6接口編程
- 29. 並行端口Java編程
- 30. 增加出口編程