?? module1.bas
字號:
Attribute VB_Name = "Module1"
Option Explicit
Public ch341sername As String '存儲監測到的已插入的串口名
Public Const WM_KEYUP = &H101
Public Const FILE_FLAG_OVERLAPPED = &H40000000
Public Const GENERIC_READ = &H80000000
Public Const GENERIC_WRITE = &H40000000
Public Const FILE_SHARE_READ = &H1
Public Const FILE_SHARE_WRITE = &H2
Public Const OPEN_EXISTING = 3
Public Const INVALID_HANDLE_VALUE = -1
Public Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, lpSecurityAttributes As String, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Public Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Public Sub CH341PT_NOTIFY_ROUTINE(ByVal iDevIndexAndEvent As Long)
'在中斷回調函數中,不能對系統資源操作過多.通過窗體WM_KEYUP事件來模擬插拔事件
PostMessage Form1.notify.hwnd, WM_KEYUP, iDevIndexAndEvent, 0
End Sub
Public Sub CH341SerNotifyFunc(ByVal iDevIndexAndEvent As Long)
Dim fullportname As String
Dim tem As String
Dim portname As String
If (iDevIndexAndEvent > 0) Then 'ch341串口已插上
portname = "COM" + Trim(Str(iDevIndexAndEvent)) '設備名
fullportname = "\\.\" & portname '完整的設備名
If (CH341PtNameIsCH341(fullportname) <> False) Then
ch341sername = portname '作為設備拔出時CH341串口判別的依據
Form1.showinfo.AddItem "CH341串口 " & ch341sername & "已插入"
Else
Form1.showinfo.AddItem "串口 " & portname & "已插入"
End If
ElseIf (iDevIndexAndEvent < 0) Then 'ch341串口已拔出
portname = "COM" + Trim(Str(-iDevIndexAndEvent)) '中斷傳來的端口號為負值
If (ch341sername = portname) Then '與是先前監測到的插入的341串口名比較
Form1.showinfo.AddItem "CH341串口 " & portname & "已拔出"
ch341sername = ""
Else
Form1.showinfo.AddItem "串口 " & portname & "已拔出"
End If
End If
End Sub
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -