2024年4月8日发(作者:)

下面是访问USB设备的类单元文件:

{

Usb通讯操作助手

Date:2008-7-10

Version:1.0

Author:zlz(47953@)

}

unitTUsbUtil_U;

interface

usesWindows,Messages,SysUtils,Variants,Classes,

StdCtrls,Dialogs,SetupApi;

const

MAX_PATH

MAX_DATA_BUFFER

Type

=260;

=1024;

//文件名最大长度

//缓冲区大小

//数据缓存

TDataBuffer=record

DataBuffer:array[0..MAX_DATA_BUFFER]ofbyte;//缓存数据

DataSize:Integer;//缓存数据长度

end;

//串口操作助手

TUsbUtil=class(TObject)

public

functionOpen(usbguid:String):boolean;//打开USB设备

procedureClose();//关闭USB设备

procedureWriteBytes(bs:TDataBuffer);//向USB设备发送字节数组

functionReadBytes():TDataBuffer;//从USB设备读取数据

private

hUsbHandle:THandle;

//打开一个设备

functionOpenOneDevice(hDvcInfo:HDEVINFO;DvcInfoData:PSPDeviceInterfaceData;

sDevNameBuf:pchar):THandle;

//打开指定的USB设备

functionOpenUsbDevice(pGuid:TGUID;sDevNameBuf:pchar):THandle;

end;

implementation

{TUsbUtil}

;

begin

CloseHandle(hUsbHandle);

end;

(usbguid:String):boolean;

var

DeviceName:array[0..MAX_PATH]ofchar;

USB_GUID:TGUID;

begin

Result:=false;

USB_GUID:=StringToGuid('{'+usbguid+'}');

hUsbHandle:=OpenUsbDevice(USB_GUID,DeviceName);

if(hUsbHandle=INVALID_HANDLE_VALUE)then

begin

('无法打开指定的USB设备');

end;

Result:=True;

end;

eDevice(hDvcInfo:HDEVINFO;

DvcInfoData:PSPDeviceInterfaceData;sDevNameBuf:pchar):THandle;

var

iReqLen:pdword;

iDevDataLen:DWord;

pDevData:PSPDeviceInterfaceDetailDataA;

hOut:THandle;

begin

hOut:=INVALID_HANDLE_VALUE;

iReqLen:=pdword(integer(0));

SetupDiGetDeviceInterfaceDetail(hDvcInfo,DvcInfoData,nil,0,@iReqLen,nil);

iDevDataLen:=DWORD(integer(iReqLen));

GetMem(pDevData,iDevDataLen);

:=sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA_A);

if(SetupDiGetInterfaceDeviceDetail(hDvcInfo,DvcInfoData,pDevData,iDevDataLen,

@iReqLen,nil))then

begin

strcopy(sDevNameBuf,Path);

hOut:=CreateFile(Path,GENERIC_WRITEorGENERIC_READ,

FILE_SHARE_WRITEorFILE_SHARE_READ,nil,OPEN_EXISTING,0,0);

end;

FreeMem(pDevData);

Result:=hOut;

end;

bDevice(pGuid:TGUID;sDevNameBuf:pchar):THandle;

var

hDevInfo1:HDEVINFO;

deviceInfoData:TSPDeviceInterfaceData;

nGuessCount:Dword;

iDevIndex:DWord;

hOut:THandle;

begin

hDevInfo1:=SetupDiGetClassDevs(@pGuid,nil,0,DIGCF_PRESENT

DIGCF_DEVICEINTERFACE);

:=sizeof(TSPDeviceInterfaceData);

nGuessCount:=MAXLONG;

foriDevIndex:=0tonGuessCountdo

begin

if(SetupDiEnumDeviceInterfaces(hDevInfo1,nil,pGuid,iDevIndex,deviceInfoData))then

begin

hOut:=OpenOneDevice(hDevInfo1,@deviceInfoData,sDevNameBuf);

if(hOut<>INVALID_HANDLE_VALUE)then

begin

break;

end

elseif(GetLastError()=ERROR_NO_MORE_ITEMS)then

begin

break;

end;

end;

end;

SetupDiDestroyDeviceInfoList(hDevInfo1);

Result:=hOut;

end;

or

tes:TDataBuffer;

var

nBytesReaded:LongWord;

bs:TDataBuffer;

begin

ReadFile(ndle,ffer,MAX_DATA_BUFFER,nBytesReaded,nil);

ze:=nBytesReaded;

Result:=bs;