You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Delphi Jedi连接HID设备入门求助:不知从何开始

用Delphi Jedi连接HID设备入门步骤

一、前期准备

  • 先把Jedi VCL库集成到你的Delphi项目中,务必确保JvHidControllerClass.pas单元被添加到项目的uses列表里。
  • 打开Delphi组件面板,找到Jedi分类下的HID组件,把TJvHidDeviceController拖到你的窗体上。

二、设备扫描与连接

1. 枚举所有HID设备

在窗体初始化(比如FormCreate事件)里,调用控制器的Refresh方法来扫描系统中的HID设备:

procedure TForm1.FormCreate(Sender: TObject);
begin
  JvHidDeviceController1.Refresh;
end;

扫描完成后,通过JvHidDeviceController1.Devices集合可以遍历所有找到的设备,从中提取VID(厂商ID)、*PID(产品ID)*等关键信息,用来定位你要连接的目标设备。

2. 匹配并打开目标设备

遍历设备集合,筛选出符合你设备参数的对象,然后调用Open方法建立连接:

var
  I: Integer;
  TargetDevice: TJvHidDevice;
begin
  TargetDevice := nil;
  for I := 0 to JvHidDeviceController1.Devices.Count - 1 do
  begin
    // 替换成你的设备实际VID和PID
    if (JvHidDeviceController1.Devices[I].VID = $1234) and
       (JvHidDeviceController1.Devices[I].PID = $5678) then
    begin
      TargetDevice := JvHidDeviceController1.Devices[I];
      Break;
    end;
  end;
  if Assigned(TargetDevice) then
  begin
    if TargetDevice.Open then
      ShowMessage('设备连接成功')
    else
      ShowMessage('设备打开失败');
  end;
end;

三、数据交互

1. 接收设备数据

TJvHidDeviceController有OnDeviceDataReceived事件,当设备主动发送数据时会触发这个事件,你可以在事件处理函数里解析数据:

procedure TForm1.JvHidDeviceController1DeviceDataReceived(Sender: TObject;
  const AReport: TJvHidReport);
var
  DataStr: string;
  I: Integer;
begin
  DataStr := '';
  for I := 0 to AReport.ReportLength - 1 do
    DataStr := DataStr + Format('%.2X ', [AReport.ReportData[I]]);
  // 把数据显示到界面,比如Memo
  Memo1.Lines.Add(DataStr);
end;

2. 向设备发送数据

构造TJvHidReport对象,按照设备协议填充数据后,调用设备的Write方法发送:

procedure TForm1.Button1Click(Sender: TObject);
var
  Report: TJvHidReport;
  SendData: array[0..3] of Byte;
begin
  if not Assigned(TargetDevice) or not TargetDevice.Opened then Exit;
  
  // 示例数据,根据设备协议调整
  SendData[0] := 0; // ReportID,部分设备不需要可设为0
  SendData[1] := $01;
  SendData[2] := $02;
  SendData[3] := $03;

  Report := TJvHidReport.Create(TargetDevice);
  try
    Report.ReportID := SendData[0];
    Move(SendData[1], Report.ReportData[0], Length(SendData)-1);
    TargetDevice.Write(Report);
  finally
    Report.Free;
  end;
end;

四、关键注意点

  • 程序退出或不再使用设备时,一定要调用TargetDevice.Close释放资源,避免占用设备。
  • 不同HID设备的ReportID、数据长度、通信协议差异很大,必须参考设备的官方文档来调整代码。
  • 如果扫描不到设备,先检查设备是否正常连接,部分设备需要管理员权限才能访问,可尝试以管理员身份运行Delphi。

内容的提问来源于stack exchange,提问作者Chaos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 11:22:46