2024年5月9日发(作者:)
下面是访问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;
发布者:admin,转转请注明出处:http://www.yc00.com/web/1715259305a2590497.html
评论列表(0条)