亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? collectionmain.~pas

?? 通過delphi USB控件讀寫數據
?? ~PAS
字號:
unit CollectionMain;

interface

uses
  Windows, SysUtils, Classes, Controls, Forms, ComCtrls,
  JvHidControllerClass, Dialogs, StdCtrls;

type
  TCollectionDemoForm = class(TForm)
    HidCtl: TJvHidDeviceController;
    DeviceTree: TTreeView;
    Save: TButton;
    SaveDialog: TSaveDialog;
    Description: TLabel;
    procedure FormShow(Sender: TObject);
    procedure HidCtlDeviceChange(Sender: TObject);
    function  HidCtlEnumerate(HidDev: TJvHidDevice;
      Index: Integer): Boolean;
    procedure SaveClick(Sender: TObject);
  public
    Root: TTreeNode;
    procedure EnumerateCaps(HidDev: TJvHidDevice;
      Parent: TTreeNode; Idx: Word);
    procedure EnumerateNodes(HidDev: TJvHidDevice;
      Parent: TTreeNode; Idx: Word; NumSiblings: Word);
  end;

var
  CollectionDemoForm: TCollectionDemoForm;

implementation

uses
  UsagesInfo, Hid;

{$R *.DFM}

procedure TCollectionDemoForm.FormShow(Sender: TObject);
begin
  // this compensates the possibility that HidCtlDeviceChange
  // may not be able to fill the treeview the first time
  HidCtlDeviceChange(Self);
end;

procedure TCollectionDemoForm.HidCtlDeviceChange(Sender: TObject);
begin
  // HidCtlDeviceChange happens before TCollectionDemoForm.Create completed
  // DeviceTree may have not been created yet
  if Assigned(DeviceTree) then
  begin
    // each time something happens to the HID devices the treeview is filled
    DeviceTree.Items.Clear;
    Root := DeviceTree.Items.Add(nil,'HID-Devices');
//    HidCtl.Enumerate;
  end;
end;

procedure TCollectionDemoForm.EnumerateCaps(HidDev: TJvHidDevice; Parent: TTreeNode; Idx: Word);

  procedure EnumerateButtonCaps(HidDev: TJvHidDevice; Parent: TTreeNode;
    ReportType: THIDPReportType; ReportText: string);
  var
    I: Integer;
    Ret: Integer;
    N: WORD;
    UsagePageText: string;
    UsageText: string;
    // 256 Caps entries should be always sufficient
    BtnCaps: array [0..255] of THIDPButtonCaps;
  begin
    N := 255;
    // get ALL ButtonCaps of the specified ReportType
    HidDev.ReportTypeParam := ReportType;
    Ret := HidDev.GetSpecificButtonCaps(@BtnCaps[0], N);
    if Ret = HIDP_STATUS_SUCCESS then
      for I := 0 to N-1 do
        if BtnCaps[I].LinkCollection = Idx then
        begin
          UsageAndUsagePageText(BtnCaps[I].UsagePage, BtnCaps[I].Usage, UsagePageText, UsageText);
          if BtnCaps[I].IsRange then
            DeviceTree.Items.AddChild(Parent,
              Format('Button %s Range: UsagePage=%s ($%.4x) %d..%d',
                [ReportText, UsagePageText, BtnCaps[I].UsagePage, BtnCaps[I].UsageMin, BtnCaps[I].UsageMax]))
          else
            DeviceTree.Items.AddChild(Parent,
              Format('Button %s: UsagePage=%s ($%.4x) Usage=%s ($%.4x)',
                [ReportText, UsagePageText, BtnCaps[I].UsagePage, UsageText, BtnCaps[I].Usage]));
        end;
  end;

  procedure EnumerateValueCaps(HidDev: TJvHidDevice; Parent: TTreeNode;
    ReportType: THIDPReportType; ReportText: string);
  var
    I: Integer;
    Ret: Integer;
    N: WORD;
    UsagePageText: string;
    UsageText: string;
    // 256 Caps entries should be always sufficient
    ValCaps: array [0..255] of THIDPValueCaps;
  begin
    N := 255;
    // get ALL ValueCaps of the specified ReportType
    HidDev.ReportTypeParam := ReportType;
    Ret := HidDev.GetSpecificValueCaps(@ValCaps[0], N);
    if Ret = HIDP_STATUS_SUCCESS then
      for I := 0 to N-1 do
        if ValCaps[I].LinkCollection = Idx then
        begin
          UsageAndUsagePageText(ValCaps[I].UsagePage, ValCaps[I].Usage, UsagePageText, UsageText);
          if ValCaps[I].IsRange then
            DeviceTree.Items.AddChild(Parent,
              Format('Value %s Range: UsagePage=%s ($%.4x) %d..%d',
                [ReportText, UsagePageText, ValCaps[I].UsagePage, ValCaps[I].UsageMin, ValCaps[I].UsageMax]))
          else
            DeviceTree.Items.AddChild(Parent,
              Format('Value %s: UsagePage=%s ($%.4x) Usage=%s ($%.4x)',
                [ReportText, UsagePageText, ValCaps[I].UsagePage, UsageText, ValCaps[I].Usage]));
        end;
  end;

begin
  // set the params to get ALL Caps
  HidDev.UsagePageParam      := 0;
  HidDev.UsageParam          := 0;
  HidDev.LinkCollectionParam := HIDP_LINK_COLLECTION_UNSPECIFIED;
  EnumerateButtonCaps(HidDev, Parent, HidP_Input,   'Input');
  EnumerateButtonCaps(HidDev, Parent, HidP_Output,  'Output');
  EnumerateButtonCaps(HidDev, Parent, HidP_Feature, 'Feature');
  EnumerateValueCaps (HidDev, Parent, HidP_Input,   'Input');
  EnumerateValueCaps (HidDev, Parent, HidP_Output,  'Output');
  EnumerateValueCaps (HidDev, Parent, HidP_Feature, 'Feature');
end;

procedure TCollectionDemoForm.EnumerateNodes(HidDev: TJvHidDevice;
  Parent: TTreeNode; Idx: Word; NumSiblings: Word);
var
  I: Word;
  Node: TTreeNode;
  UsagePageText: string;
  UsageText: string;
  CollectionTypeText: string;
  NodeText: string;
begin
  // add a list of sibling nodes to the device tree node Parent
  for I := 1 to NumSiblings do
  begin
    UsageAndUsagePageText(HidDev.LinkCollectionNodes[Idx].LinkUsagePage,
      HidDev.LinkCollectionNodes[Idx].LinkUsage, UsagePageText, UsageText);
    case HidDev.LinkCollectionNodes[Idx].CollectionType of
      $00:
        CollectionTypeText := 'Physical';
      $01:
        CollectionTypeText := 'Application';
      $02:
        CollectionTypeText := 'Logical';
      $03:
        CollectionTypeText := 'Report';
      $04:
        CollectionTypeText := 'Named Array';
      $05:
        CollectionTypeText := 'Usage Switch';
      $06:
        CollectionTypeText := 'Usage Modifier';
      $07..$7F:
        CollectionTypeText := Format('Reserved $%.2x',
          [Cardinal(HidDev.LinkCollectionNodes[Idx].CollectionType)]);
      $80..$FF:
        CollectionTypeText := Format('Vendor-defined $%.2x',
          [Cardinal(HidDev.LinkCollectionNodes[Idx].CollectionType)]);
    end;

    NodeText :=
      'UsagePage='      + UsagePageText      + Format(' ($%.4x)  ', [HidDev.LinkCollectionNodes[Idx].LinkUsagePage]) +
      'Usage='          + UsageText          + Format(' ($%.4x)  ', [HidDev.LinkCollectionNodes[Idx].LinkUsage]) +
      'CollectionType=' + CollectionTypeText + Format(' ($%.2x)',   [HidDev.LinkCollectionNodes[Idx].CollectionType]);
    if HidDev.LinkCollectionNodes[Idx].IsAlias <> 0 then
      NodeText := NodeText + '  IsAlias';
    Node := DeviceTree.Items.AddChild(Parent, NodeText);

    EnumerateCaps(HidDev, Node, Idx);

    // recurse to the children nodes
    if HidDev.LinkCollectionNodes[Idx].FirstChild <> 0 then
      EnumerateNodes(HidDev, Node,
        HidDev.LinkCollectionNodes[Idx].FirstChild,
        HidDev.LinkCollectionNodes[Idx].NumberOfChildren);
    // secure against buggy descriptors
    if HidDev.LinkCollectionNodes[Idx].NextSibling <> 0 then
      // follow the link to the next sibling
      Idx := HidDev.LinkCollectionNodes[Idx].NextSibling
    else
      Break;
  end;
end;

function TCollectionDemoForm.HidCtlEnumerate(HidDev: TJvHidDevice;
  Index: Integer): Boolean;
var
  Idx: Word;
  Node: TTreeNode;
  Name: string;
begin
  // give the treeview node for the device a descriptive name
  if HidDev.ProductName <> '' then
    Name := Format('"%s"  VID=$%.4x PID=$%.4x',
      [HidDev.ProductName, HidDev.Attributes.VendorID, HidDev.Attributes.ProductID])
  else
    Name := Format('VID=$%.4x PID=$%.4x',
      [HidDev.Attributes.VendorID, HidDev.Attributes.ProductID]);
  Node := DeviceTree.Items.AddChild(Root, Name);

  // there is only one root node, but we try to enumerate siblings anyway
  // in case there is a bad descriptor
  Idx := 0;
  repeat
    EnumerateNodes(HidDev, Node, Idx, 1);
    Idx := HidDev.LinkCollectionNodes[Idx].NextSibling;
  until Idx = 0;

  DeviceTree.FullExpand;
  Result := True;
end;

procedure TCollectionDemoForm.SaveClick(Sender: TObject);
begin
  // write the treeview content to a file to avoid the need
  // to send screenshots
  if SaveDialog.Execute then
    DeviceTree.SaveToFile(SaveDialog.FileName);
end;

end.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
免费观看久久久4p| 日本久久精品电影| 亚洲免费视频成人| 久久久久久亚洲综合影院红桃 | 精品一区二区av| 石原莉奈在线亚洲二区| 亚洲自拍偷拍欧美| 亚洲一区二区三区小说| 国产成人精品一区二| 成人黄色一级视频| www.激情成人| 91成人免费在线视频| 久久久久9999亚洲精品| 奇米色一区二区三区四区| 在线观看不卡一区| 91精品一区二区三区在线观看| 在线观看日产精品| 成人欧美一区二区三区在线播放| 亚洲欧美另类在线| 成人激情小说网站| 久久日韩粉嫩一区二区三区| 蜜臀久久99精品久久久久宅男 | 麻豆国产91在线播放| 色哟哟在线观看一区二区三区| 一本色道久久综合亚洲91| 久久精品夜色噜噜亚洲aⅴ| 欧美国产日本视频| 亚洲成人免费看| 麻豆91在线看| 宅男噜噜噜66一区二区66| 亚洲综合视频在线观看| 欧美视频三区在线播放| 久久夜色精品一区| 亚洲美女精品一区| 色综合天天天天做夜夜夜夜做| 1000部国产精品成人观看| 成人三级伦理片| 911国产精品| 日韩制服丝袜先锋影音| 日韩视频在线观看一区二区| 国产精品美女视频| 日韩电影网1区2区| 97久久久精品综合88久久| 日韩女同互慰一区二区| 亚洲三级电影网站| 国产精品一二三区| 91麻豆精品国产91久久久久久久久| 夜夜操天天操亚洲| 高清国产一区二区三区| 日韩欧美一区在线观看| 激情六月婷婷久久| 7777女厕盗摄久久久| 美女久久久精品| 欧美国产日韩精品免费观看| 在线观看亚洲专区| 精品在线你懂的| 国产人成一区二区三区影院| 麻豆成人免费电影| 欧美国产激情二区三区| 色香蕉成人二区免费| 美女视频免费一区| 国产精品国产a级| 国产精品一区一区三区| 中文字幕一区日韩精品欧美| 欧美午夜精品久久久久久超碰| 免费在线看成人av| 国产精品拍天天在线| 欧美日韩高清不卡| 亚洲二区在线观看| 色呦呦一区二区三区| 久久国产精品色婷婷| 日韩欧美国产午夜精品| 成人av第一页| 美女在线观看视频一区二区| 18欧美乱大交hd1984| 欧美不卡一区二区三区| 捆绑调教一区二区三区| 1区2区3区国产精品| 欧美精品一区二| 欧美日韩中文一区| 午夜av一区二区三区| 欧美猛男男办公室激情| 成人性色生活片免费看爆迷你毛片| 丝袜诱惑制服诱惑色一区在线观看| 国产欧美一区二区精品性色超碰| 在线91免费看| 日本高清免费不卡视频| 成人免费看视频| 麻豆精品在线看| 一区二区日韩av| 国产精品久久久久久久第一福利 | 欧美激情一区在线观看| 91麻豆精品国产综合久久久久久| 成a人片国产精品| 国产米奇在线777精品观看| 国产午夜精品在线观看| 宅男噜噜噜66一区二区66| 在线免费亚洲电影| 99久久免费精品| 成人av免费在线| 国产成人精品综合在线观看| 精品一区二区三区不卡 | 免费在线观看一区二区三区| 亚洲在线成人精品| 亚洲精品国产高清久久伦理二区| 欧美日韩一区二区三区不卡| 91在线观看地址| 天堂资源在线中文精品| 亚洲激情av在线| 一区二区在线免费观看| 亚洲乱码国产乱码精品精的特点 | 精品国产精品网麻豆系列| 成人性视频免费网站| 国模冰冰炮一区二区| 国产在线视频精品一区| 久久精工是国产品牌吗| 九一九一国产精品| 精品一区二区在线看| 国产曰批免费观看久久久| 国产精品白丝jk白祙喷水网站| 国产一区二区三区av电影| 国产精品2024| www.亚洲精品| 色综合久久久久| 欧美三级中文字幕在线观看| 欧美疯狂做受xxxx富婆| 波多野结衣亚洲一区| 91丝袜美女网| 欧美性大战xxxxx久久久| 欧美精品黑人性xxxx| 日韩情涩欧美日韩视频| 久久久99久久| 亚洲欧美成aⅴ人在线观看 | 国产精品久久久久久亚洲毛片 | xfplay精品久久| 国产精品久久午夜| 亚洲成在人线在线播放| 精品一区二区精品| av在线一区二区三区| 91精品1区2区| 日韩一级片在线播放| 欧美激情在线观看视频免费| 一级日本不卡的影视| 麻豆成人久久精品二区三区红 | bt欧美亚洲午夜电影天堂| 色老汉一区二区三区| 欧美一级黄色大片| 中文字幕免费不卡在线| 性久久久久久久久| 国产精品一卡二卡| 欧美日韩亚洲综合一区| 久久嫩草精品久久久精品一| 亚洲一区二区四区蜜桃| 国产真实精品久久二三区| 99久久国产综合精品色伊| 欧美精品v日韩精品v韩国精品v| 2024国产精品| 午夜久久久久久久久久一区二区| 国产成人免费在线观看不卡| 欧美日产在线观看| 国产精品久久久久影视| 蜜臀av在线播放一区二区三区| 91视视频在线观看入口直接观看www | 国产精品久久久久精k8| 日韩精品亚洲一区二区三区免费| av成人老司机| 久久精品一区二区三区不卡| 亚洲综合色视频| 成人av手机在线观看| 久久综合狠狠综合久久激情| 五月天欧美精品| 91色九色蝌蚪| 国产精品久久毛片av大全日韩| 久久国产精品99久久人人澡| 欧美日韩亚洲高清一区二区| 亚洲人成在线播放网站岛国| 成人性色生活片| 欧美videos中文字幕| 三级欧美在线一区| 欧美在线观看你懂的| 亚洲视频在线一区二区| 丰满少妇在线播放bd日韩电影| www精品美女久久久tv| 久久精品国产一区二区三| 欧美裸体一区二区三区| 亚洲综合在线第一页| 色爱区综合激月婷婷| 中文字幕一区二区三区不卡在线| 国产福利一区在线观看| 精品久久久久久无| 久久69国产一区二区蜜臀| 日韩小视频在线观看专区| 亚洲国产综合91精品麻豆| 色婷婷综合五月| 一区二区三区精品在线| 91蝌蚪国产九色| 一区二区视频在线看| 91福利社在线观看| 婷婷综合另类小说色区| 欧美一级免费观看|