VB6 API获取并口、串口端口名和友好名
来源:互联网 发布:eplan绘图软件 编辑:程序博客网 时间:2024/05/02 04:38
Option ExplicitPrivate Type GUID 'GUID数据类型 Data(0 To 3) As LongEnd TypePrivate Type SP_DEVINFO_DATA '设备信息类型 cbSize As Long '数据表长度 ClassGuid As GUID '设备GUID值 DevInst As Long '设备句柄 Reserved As Long '保留End TypePrivate Const SPDRP_FRIENDLYNAME = &HCPrivate Const DIGCF_DEFAULT = &H1 '只返回与系统默认设备相关的设备Private Const DIGCF_PRESENT = &H2 '只返回当前存在的设备?Private Const DIGCF_ALLCLASSES = &H4 '返回所有已安装的设备。如果这个标志设置了,ClassGuid参数将被忽略。Private Const DIGCF_PROFILE = &H8 '只返回当前硬件配置文件中的设备?Private Const DIGCF_DEVICEINTERFACE = &H10 '返回所有支持的设备?Private Declare Function SetupDiGetClassDevs Lib "setupapi.dll" Alias "SetupDiGetClassDevsA" (ByVal ClassGuid As Long, ByVal Enumerator As Long, ByVal HwndParent As Long, ByVal flags As Long) As LongPrivate Declare Function SetupDiEnumDeviceInfo Lib "setupapi.dll" (ByVal DeviceInfoSet As Long, ByVal MemberIndex As Long, ByRef deviceInfoData As SP_DEVINFO_DATA) As BooleanPrivate Declare Function SetupDiDestroyDeviceInfoList Lib "setupapi.dll" (ByVal DeviceInfoSet As Long) As LongPrivate Declare Function SetupDiGetDeviceRegistryProperty Lib "setupapi" Alias "SetupDiGetDeviceRegistryPropertyA" (ByVal DeviceInfoSet As Long, deviceInfoData As SP_DEVINFO_DATA, ByVal Property As Long, ByRef PropertyRegDataType As Long, ByVal PropertyBuffer As Long, ByVal PropertyBufferSize As Long, RequiredSize As Long) As LongPrivate Declare Function SetupDiClassGuidsFromName Lib "setupapi.dll" Alias "SetupDiClassGuidsFromNameA" (ByVal ClassName As String, ClassGuidList As Long, ByVal ClassGuidListSize As Long, RequiredSize As Long) As BooleanPrivate Declare Function SetupDiOpenDevRegKey Lib "setupapi.dll" (ByVal hDeviceInfo As Long, ByRef deviceInfoData As SP_DEVINFO_DATA, ByVal Scope As Long, ByVal hwprofile As Integer, ByVal parameterRegistryValueKind As Long, ByVal samDesired As Long) As LongPrivate Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, ByRef lpType As Long, ByVal lpData As String, ByRef lpcbData As Long) As LongPrivate Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hHey As Long) As Long'获取串口设备属性信息,函数返回字符串包含并口、串口端口名和友好名Public Function GetSerialPort() As String Dim objGuid As GUID, hDevInfo As Long, dwIndex As Long, lngRes As Long, dwSize As Long Dim objSpdd As SP_DEVINFO_DATA Dim hDrive As Long, dwBytesReturned As Long Dim dwReturn As Long, hKey As Long Dim lngDeviceNumber As String, szPortName As String Dim buffer() As Byte lngRes = SetupDiClassGuidsFromName("Ports", objGuid.Data(0), 1, dwSize) '获取类名为"Ports"的GUID If lngRes = 0 Then: GoTo exitFunction '有错误则报错后退出函数 hDevInfo = SetupDiGetClassDevs(VarPtr(objGuid), 0, 0, DIGCF_PRESENT Or DIGCF_PROFILE) '根据串口GUID获取设备句柄 If hDevInfo = -1 Then: GoTo exitFunction '有错误则报错后退出函数 objSpdd.cbSize = Len(objSpdd) Do While 1 lngRes = SetupDiEnumDeviceInfo(hDevInfo, dwIndex, objSpdd) '根据设备句柄检举包含的设备 If lngRes = 0 Then Exit Do '检举返回无效则退出检举 lngRes = SetupDiGetDeviceRegistryProperty(hDevInfo, objSpdd, SPDRP_FRIENDLYNAME, 0, 0&, 0, dwSize) '根据dwIndex设备句柄请求FRIENDLYNAME访问 If dwSize <= 0 Then GoTo exitFunction '设备无FRIENDLYNAME属性则结束函数 ReDim buffer(dwSize) lngRes = SetupDiGetDeviceRegistryProperty(hDevInfo, objSpdd, SPDRP_FRIENDLYNAME, 0, VarPtr(buffer(0)), dwSize, dwSize) '根据返回的FRIENDLYNAME信息指针获取dwIndex设备的FRIENDLYNAME的内容 lngDeviceNumber = StrConv(buffer, vbUnicode) '整理得到的FRIENDLYNAME字符串 lngDeviceNumber = Left(lngDeviceNumber, InStr(lngDeviceNumber, Chr(0)) - 1) hKey = SetupDiOpenDevRegKey(hDevInfo, objSpdd, &H1, 0&, &H1, &H1) '打开设备指定的注册表 If hKey Then szPortName = Space(255) lngRes = RegQueryValueEx(hKey, "PortName", 0, &H80000000, szPortName, 1024) '获取串口设备PortName的键值 RegCloseKey (hKey) If lngRes = 0 Then szPortName = Left(szPortName, InStr(szPortName, Chr(0)) - 1) Else szPortName = "Err " '整理得到的PortName字符串 End If dwIndex = dwIndex + 1 GetSerialPort = GetSerialPort & "PortName: " & szPortName & vbTab & "-> FriendlyName: " & lngDeviceNumber & vbCrLf LoopexitFunction: Call SetupDiDestroyDeviceInfoList(hDevInfo)End FunctionPrivate Sub Command1_Click()Call GetSerialPortEnd Sub
还有一个
串口所在注册表。
Name = String(256, Chr(0))
ret = RegOpenKey(HKEY_LOCAL_MACHINE, "HARDWARE\DEVICEMAP\SERIALCOMM", hKey) '电脑COM口所在的注册表地址
If ret = 0 Then
ret = RegQueryValueEx(hKey, "\Device\USBSER000", 0, 1, ByVal Name, Len(Name))
RegCloseKey hKey
' MsgBox Name
Else
MsgBox "配置失败,请确认是否已连接主板。"
End If
0 0
- VB6 API获取并口、串口端口名和友好名
- vb6.0 api 获取和设置计算机名 获取 鼠标位置坐标
- Delphi中获取打印机设备名和端口名
- Delphi中获取打印机设备名和端口名
- GetPort(nType)获取计算机可用端口(串口或并口)
- 串口和并口
- 计算机串口和并口
- 并口和串口
- 串口和并口
- VB6.0获取计算机名 用户名最简单的方法
- vb6 Add-In 错误处理用获取当前函数名
- 获取类名和id名
- 串口和并口的区别
- 串口,并口和USB口
- 获取域名和登录名
- ci获取当前控制器类名和方法名和PHP获取当前类名、函数名、方法名方法
- Tomcat去除端口号和项目名
- Tomcat去除端口号和项目名
- 琐碎问题
- linux下oracle手动启动服务和监听命令
- leetcode 060 —— Permutation Sequence
- Ubuntu下配置JAVA环境
- html5之indexdb(nosql存储)
- VB6 API获取并口、串口端口名和友好名
- 浅谈Linux进程
- JQuery学习总结
- markdown的初体验
- OC中对象的初始化
- mysql出现ERROR : 2006, 'MySQL server has gone away'
- 【JavaScript】数据类型
- hdu 1213 How Many Tables
- STL学习总结【菜鸟版】