请问如何获取USB制造商名称?(附部分代码)

sych11 2018-03-06 11:42:21
第二段代码
Clear
Local ans, DeviceNumber, DiskGUID, hSetup, Success, i, dia, da, didd
#Define GUID_DEVINTERFACE_USB_DEVICE "A5DCBF10-6530-11D2-901F-00C04FB951ED"
#Define INVALID_HANDLE_VALUE -1
#Define BUFFER_SIZE 2048
#Define REG_SZ 1
#Define GENERIC_WRITE 0x40000000
#Define FILE_SHARE_WRITE 0x2
#Define OPEN_EXISTING 0x3
#Define FILE_ATTRIBUTE_NORMAL 128
#Define DIGCF_PRESENT 0x2
#Define DIGCF_DEVICEINTERFACE 0x10
Declare Integer SetupDiGetClassDevs In "setupapi.dll" ;
String @ClassGuid, ;
Integer Enumerator, ;
Integer hwndParent, ;
Integer Flags
Declare Integer SetupDiEnumDeviceInterfaces In "setupapi.dll" ;
Integer DeviceInfoSet, ;
Integer DeviceInfoData, ;
String InterfaceClassGuid, ;
Integer MemberIndex, ;
String @DeviceInterfaceData
Declare Integer SetupDiDestroyDeviceInfoList In "setupapi.dll" ;
Integer DeviceInfoSet
Declare Integer SetupDiGetDeviceInterfaceDetail In "setupapi.dll" ;
Integer DeviceInfoSet, ;
String DeviceInterfaceData, ;
String @DeviceInterfaceDetailData, ;
Integer DeviceInterfaceDetailDataSize, ;
Integer @RequiredSize, ;
String @DeviceInfoData
Declare INTEGER CreateFile IN kernel32;
STRING lpFileName,INTEGER dwDesiredAccess,INTEGER dwShareMode,;
INTEGER lpSecurityAttr,INTEGER dwCreationDisp,INTEGER dwFlagsAndAttrs,;
INTEGER hTemplateFile
DECLARE INTEGER CloseHandle IN kernel32 INTEGER hObject
DECLARE INTEGER DeviceIoControl IN kernel32;
INTEGER hDevice,;
INTEGER dwIoControlCode,;
STRING @ lpInBuffer,;
INTEGER nInBufferSize,;
STRING @ lpOutBuffer,;
INTEGER nOutBufferSize,;
INTEGER @ lpBytesReturned,;
INTEGER lpOverlapped

DiskGUID = guid(GUID_DEVINTERFACE_USB_DEVICE)
hSetup = SetupDiGetClassDevs(DiskGUID, 0, 0, Bitor(DIGCF_PRESENT, DIGCF_DEVICEINTERFACE))
If hSetup <> INVALID_HANDLE_VALUE
i = 0
Success=1
Do While Success<>0
dia = dword2str(28)+Replicate(Chr(0),16)+Replicate(Chr(0),4)+Replicate(Chr(0),4)
Success = SetupDiEnumDeviceInterfaces(hSetup, 0, DiskGUID, i, @dia)
If Success <> 0
da = dword2str(28)+Replicate(Chr(0),16)+Replicate(Chr(0),4)+Replicate(Chr(0),4)
didd = dword2str(5)+Replicate(Chr(0),BUFFER_SIZE)
nBytes = BUFFER_SIZE
nRequiredSize = 0
m.err1 = SetupDiGetDeviceInterfaceDetail(hSetup, dia, @didd, nBytes, @nRequiredSize, @da)
didd="\\.\"+SUBSTR(didd,9)
didd=LEFT(didd,AT(CHR(0),didd)-1)
?didd
Endif
i = i+1
Enddo
Endif
SetupDiDestroyDeviceInfoList(hSetup)
Return

Function Guid
Lparameter m.guid
m.guid=Chrtran(m.guid,"{}-","")
Return ;
word2str(Eval("0x"+Substr(m.guid,5,4)))+ ;
word2str(Eval("0x"+Substr(m.guid,1,4)))+ ;
word2str(Eval("0x"+Substr(m.guid,9,4)))+ ;
word2str(Eval("0x"+Substr(m.guid,13,4)))+ ;
chr(Eval("0x"+Substr(m.guid,17,2)))+ ;
chr(Eval("0x"+Substr(m.guid,19,2)))+ ;
chr(Eval("0x"+Substr(m.guid,21,2)))+ ;
chr(Eval("0x"+Substr(m.guid,23,2)))+ ;
chr(Eval("0x"+Substr(m.guid,25,2)))+ ;
chr(Eval("0x"+Substr(m.guid,27,2)))+ ;
chr(Eval("0x"+Substr(m.guid,29,2)))+ ;
chr(Eval("0x"+Substr(m.guid,31,2)))


Function dword2str
Lparameter m.wrd
Local m.wrd1, m.st1
m.wrd1=m.wrd%4294967296
Declare RtlMoveMemory In Win32API String @st1, Integer @wrd, Integer Cnt
m.st1=Chr(0)+Chr(0)+Chr(0)+Chr(0)
RtlMoveMemory(@m.st1, @m.wrd, 4)
Return m.st1

Function word2str
Lparameter m.wrd
Local m.wrd1, m.st1
m.wrd1=m.wrd%65536
Declare RtlMoveMemory In Win32API String @st1, Integer @wrd, Integer Cnt
m.st1=Chr(0)+Chr(0)
RtlMoveMemory(@m.st1, @m.wrd, 2)
Return m.st1

获取制造商名称
...全文
1187 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
sych11 2018-03-14
  • 打赏
  • 举报
回复
是的,以前问过这个问题,也得到了很满意的答复,因为没有实际应用,所以就放下了,我这次又发的问题是上次问题的一个延续,第一段代码获取的USB路径可以打开并由此得到USB设备的VID、PID、制造商名称等信息,但不能控制输入输出,第二段代码获取的USB路径也可以打开,但得不到USB设备的VID、PID、制造商名称等信息,不过却可以控制输入输出,所以我想能不能通过一段代码或者将这两段代码综合一下,一次性的就可以得到USB设备的VID、PID、制造商名称等信息而且可以进行控制输入输出操作 我不清楚现做一个猜测,第一段代码获取的USB设备路径应该是第二段代码获取的USB设备路径的父路径,如果能够知道怎么由子获取父或者由父获取子就好办了
十豆三 2018-03-11
  • 打赏
  • 举报
回复
sych11 2018-03-06
  • 打赏
  • 举报
回复

能力有限,看不懂,请老师相助

2,722

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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