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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? collectionmain.cpp

?? USB HID 控件,適用于DLEPHI及BCB
?? CPP
字號(hào):
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "CollectionMain.h"
#include "UsagesInfo.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "JvHidControllerClass"
#pragma resource "*.dfm"
TCollectionDemoForm *CollectionDemoForm;
//---------------------------------------------------------------------------
__fastcall TCollectionDemoForm::TCollectionDemoForm(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TCollectionDemoForm::FormShow(TObject *Sender)
{
  // this compensates the possibility that HidCtlDeviceChange
  // may not be able to fill the treeview the first time
  HidCtlDeviceChange(this);
}
//---------------------------------------------------------------------------

void __fastcall TCollectionDemoForm::HidCtlDeviceChange(TObject *Sender)
{
  // HidCtlDeviceChange happens before TCollectionDemoForm.Create completed
  // DeviceTree may have not been created yet
  if(DeviceTree != NULL)
  {
    // each time something happens to the HID devices the treeview is filled
    DeviceTree->Items->Clear();
    Root = DeviceTree->Items->Add(NULL, "HID-Devices");
    HidCtl->Enumerate();
  }
}
//---------------------------------------------------------------------------

void __fastcall TCollectionDemoForm::EnumerateButtonCaps(TJvHidDevice *HidDev,
          TTreeNode *Parent, WORD Idx, THIDPReportType ReportType,
          char *ReportText)
{
  int I;
  int Ret;
  WORD N;
  AnsiString UsagePageText;
  AnsiString UsageText;
  AnsiString S;
  // 256 Caps entries should be always sufficient
  THIDPButtonCaps BtnCaps[256];

  N = 255;
  // get ALL ButtonCaps of the specified ReportType
  HidDev->ReportTypeParam = ReportType;
  Ret = HidDev->GetSpecificButtonCaps(BtnCaps, N);
  if(Ret == HIDP_STATUS_SUCCESS)
    for(I = 0; I < N; I++)
      if(BtnCaps[I].LinkCollection == Idx)
      {
        UsageAndUsagePageText(BtnCaps[I].UsagePage, BtnCaps[I].Usage, &UsagePageText, &UsageText);
        if(BtnCaps[I].IsRange)
          DeviceTree->Items->AddChild(Parent,
            S.sprintf("Button %s Range: UsagePage=%s (0x%04X) %d..%d",
              ReportText, UsagePageText, BtnCaps[I].UsagePage, BtnCaps[I].UsageMin, BtnCaps[I].UsageMax));
        else
          DeviceTree->Items->AddChild(Parent,
            S.sprintf("Button %s: UsagePage=%s (0x%04X) Usage=%s (0x%04X)",
              ReportText, UsagePageText, BtnCaps[I].UsagePage, UsageText, BtnCaps[I].Usage));
      }
}
//---------------------------------------------------------------------------

void __fastcall TCollectionDemoForm::EnumerateValueCaps(TJvHidDevice *HidDev,
          TTreeNode *Parent, WORD Idx, THIDPReportType ReportType,
          char *ReportText)
{
  int I;
  int Ret;
  WORD N;
  AnsiString UsagePageText;
  AnsiString UsageText;
  AnsiString S;
  // 256 Caps entries should be always sufficient
  THIDPValueCaps ValCaps[256];

  N = 255;
  // get ALL ButtonCaps of the specified ReportType
  HidDev->ReportTypeParam = ReportType;
  Ret = HidDev->GetSpecificValueCaps(ValCaps, N);
  if(Ret == HIDP_STATUS_SUCCESS)
    for(I = 0; I < N; I++)
      if(ValCaps[I].LinkCollection == Idx)
      {
        UsageAndUsagePageText(ValCaps[I].UsagePage, ValCaps[I].Usage, &UsagePageText, &UsageText);
        if(ValCaps[I].IsRange)
          DeviceTree->Items->AddChild(Parent,
            S.sprintf("Button %s Range: UsagePage=%s (0x%04X) %d..%d",
              ReportText, UsagePageText, ValCaps[I].UsagePage, ValCaps[I].UsageMin, ValCaps[I].UsageMax));
        else
          DeviceTree->Items->AddChild(Parent,
            S.sprintf("Button %s: UsagePage=%s (0x%04X) Usage=%s (0x%04X)",
              ReportText, UsagePageText, ValCaps[I].UsagePage, UsageText, ValCaps[I].Usage));
      }
}
//---------------------------------------------------------------------------

void __fastcall TCollectionDemoForm::EnumerateCaps(TJvHidDevice *HidDev,
  TTreeNode *Parent, Word Idx)
{
  // set the params to get ALL Caps
  HidDev->UsagePageParam      = 0;
  HidDev->UsageParam          = 0;
  HidDev->LinkCollectionParam = HIDP_LINK_COLLECTION_UNSPECIFIED;
  EnumerateButtonCaps(HidDev, Parent, Idx, HidP_Input,   "Input");
  EnumerateButtonCaps(HidDev, Parent, Idx, HidP_Output,  "Output");
  EnumerateButtonCaps(HidDev, Parent, Idx, HidP_Feature, "Feature");
  EnumerateValueCaps (HidDev, Parent, Idx, HidP_Input,   "Input");
  EnumerateValueCaps (HidDev, Parent, Idx, HidP_Output,  "Output");
  EnumerateValueCaps (HidDev, Parent, Idx, HidP_Feature, "Feature");
}
//---------------------------------------------------------------------------

void __fastcall TCollectionDemoForm::EnumerateNodes(TJvHidDevice *HidDev,
  TTreeNode *Parent, Word Idx, Word NumSiblings)
{
  Word I;
  TTreeNode *Node;
  AnsiString UsagePageText;
  AnsiString UsageText;
  AnsiString CollectionTypeText;
  AnsiString NodeText;

  // add a list of sibling nodes to the device tree node Parent
  for(I = 1; I <= NumSiblings; I++)
  {
    UsageAndUsagePageText(HidDev->LinkCollectionNodes[Idx].LinkUsagePage,
      HidDev->LinkCollectionNodes[Idx].LinkUsage, &UsagePageText, &UsageText);
    if(HidDev->LinkCollectionNodes[Idx].CollectionType >= 0x07 &&
       HidDev->LinkCollectionNodes[Idx].CollectionType <= 0x7F)
        CollectionTypeText.sprintf("Reserved 0x%02X",
          Cardinal(HidDev->LinkCollectionNodes[Idx].CollectionType));
    else
      switch(HidDev->LinkCollectionNodes[Idx].CollectionType)
      {
        case 0x00:
          CollectionTypeText = "Physical";
          break;
        case 0x01:
          CollectionTypeText = "Application";
          break;
        case 0x02:
          CollectionTypeText = "Logical";
          break;
        case 0x03:
          CollectionTypeText = "Report";
          break;
        case 0x04:
          CollectionTypeText = "Named Array";
          break;
        case 0x05:
          CollectionTypeText = "Usage Switch";
          break;
        case 0x06:
          CollectionTypeText = "Usage Modifier";
          break;
        default:
          CollectionTypeText.sprintf("Vendor-defined $%.2x",
            Cardinal(HidDev->LinkCollectionNodes[Idx].CollectionType));
          break;
      }

    NodeText.sprintf("UsagePage=%s  (0x%04X)  Usage=%s  (0x%04X)  CollectionType=%s (0x%02X)",
      UsagePageText, HidDev->LinkCollectionNodes[Idx].LinkUsagePage,
      UsageText, HidDev->LinkCollectionNodes[Idx].LinkUsage,
      CollectionTypeText, HidDev->LinkCollectionNodes[Idx].CollectionType);
    if(HidDev->LinkCollectionNodes[Idx].IsAlias != 0)
      NodeText = NodeText + "  IsAlias";
    Node = DeviceTree->Items->AddChild(Parent, NodeText);

    EnumerateCaps(HidDev, Node, Idx);

    // recurse to the children nodes
    if(HidDev->LinkCollectionNodes[Idx].FirstChild != 0)
      EnumerateNodes(HidDev, Node,
        HidDev->LinkCollectionNodes[Idx].FirstChild,
        HidDev->LinkCollectionNodes[Idx].NumberOfChildren);
    // secure against buggy descriptors
    if(HidDev->LinkCollectionNodes[Idx].NextSibling != 0)
      // follow the link to the next sibling
      Idx = HidDev->LinkCollectionNodes[Idx].NextSibling;
    else
      break;
  }
}
//---------------------------------------------------------------------------

bool __fastcall TCollectionDemoForm::HidCtlEnumerate(
      TJvHidDevice *HidDev, const int Idx)
{
  Word Index;
  TTreeNode *Node;
  AnsiString Name;

  // give the treeview node for the device a descriptive name
  if(HidDev->ProductName != NULL)
    Name.sprintf("\"%S\"  VID=0x%.4X PID=0x%.4X",
      HidDev->ProductName, HidDev->Attributes.VendorID, HidDev->Attributes.ProductID);
  else
    Name.sprintf("VID=0x%.4X PID=0x%.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
  Index = 0;
  do
  {
    EnumerateNodes(HidDev, Node, Idx, 1);
    Index = HidDev->LinkCollectionNodes[Index].NextSibling;
  }
  while(Index != 0);

  DeviceTree->FullExpand();
  return(true);
}
//---------------------------------------------------------------------------

void __fastcall TCollectionDemoForm::SaveClick(TObject *Sender)
{
  // write the treeview content to a file to avoid the need
  // to send screenshots
  if(SaveDialog->Execute())
    DeviceTree->SaveToFile(SaveDialog->FileName);
}
//---------------------------------------------------------------------------

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲综合免费观看高清在线观看| 欧美日韩国产经典色站一区二区三区 | 韩国午夜理伦三级不卡影院| 欧美日韩视频在线第一区| 亚洲人xxxx| 欧美日韩一区二区不卡| 日韩影视精彩在线| 亚洲精品在线电影| 成人黄色综合网站| 一个色在线综合| 日韩欧美亚洲国产另类| 国产一区二区视频在线| 欧美激情中文字幕一区二区| 成人综合激情网| 亚洲精品免费在线观看| 欧美高清一级片在线| 久久精品国产免费| 国产精品丝袜黑色高跟| 欧美在线高清视频| 麻豆精品一区二区三区| 中文字幕免费不卡| 欧美吻胸吃奶大尺度电影 | 青青草国产精品97视觉盛宴| 日韩丝袜美女视频| 成人99免费视频| 午夜电影一区二区| 欧美国产综合一区二区| 欧美综合色免费| 国产在线观看一区二区| 亚洲图片另类小说| 日韩精品一区二区三区中文不卡 | 精品国产三级a在线观看| 成人午夜精品在线| 亚洲第一主播视频| 国产午夜精品久久久久久免费视 | 亚洲风情在线资源站| 久久综合999| 欧美在线观看视频一区二区三区 | 国产精品综合网| 亚洲国产视频一区| 欧美经典一区二区| 日韩一区二区三区三四区视频在线观看| 国产成人精品免费在线| 日韩和欧美一区二区三区| 国产精品素人视频| 欧美大肚乱孕交hd孕妇| 日本黄色一区二区| 国产成人丝袜美腿| 日本网站在线观看一区二区三区| 国产精品久久777777| xvideos.蜜桃一区二区| 3d动漫精品啪啪| 色综合久久综合网97色综合 | 粉嫩aⅴ一区二区三区四区五区| 亚洲6080在线| 亚洲欧美韩国综合色| 国产日韩精品一区| 日韩免费看的电影| 4438x成人网最大色成网站| 色一情一乱一乱一91av| 成人一区二区视频| 国精品**一区二区三区在线蜜桃| 日日夜夜精品视频免费 | 曰韩精品一区二区| 国产精品白丝在线| 中文字幕精品三区| 久久久精品国产免大香伊| 日韩一本二本av| 制服丝袜中文字幕一区| 欧美色倩网站大全免费| 在线亚洲免费视频| 91麻豆产精品久久久久久| 成人久久久精品乱码一区二区三区| 精品一区二区三区免费毛片爱| 日韩和欧美一区二区三区| 亚洲h精品动漫在线观看| 亚洲黄色录像片| 一区二区三区电影在线播| 亚洲精品午夜久久久| 夜夜嗨av一区二区三区中文字幕| 亚洲欧美一区二区三区极速播放| 亚洲女子a中天字幕| 亚洲精品国产无天堂网2021| 一区二区三区在线免费播放| 一区二区日韩电影| 亚洲成av人在线观看| 亚洲国产日韩a在线播放性色| 一区二区三区日韩欧美| 亚洲一区二区三区三| 亚洲成人一区二区| 蜜臀久久久99精品久久久久久| 麻豆久久久久久| 国产精品1区2区3区| 成人免费视频一区二区| 97精品国产露脸对白| 欧美私人免费视频| 日韩视频一区二区三区在线播放| 精品日韩av一区二区| 久久女同互慰一区二区三区| 国产精品免费av| 一区二区在线观看免费视频播放| 亚洲国产综合在线| 裸体在线国模精品偷拍| 国产91对白在线观看九色| 99精品黄色片免费大全| 欧美揉bbbbb揉bbbbb| 日韩区在线观看| 欧美激情资源网| 亚洲.国产.中文慕字在线| 久久99九九99精品| 91亚洲精品久久久蜜桃| 欧美一级黄色录像| 欧美极品少妇xxxxⅹ高跟鞋 | 天堂蜜桃一区二区三区| 国产中文一区二区三区| 色综合一个色综合亚洲| 91精品国产色综合久久不卡电影 | 亚洲欧美日韩在线不卡| 丝袜脚交一区二区| 国产盗摄精品一区二区三区在线| 欧洲国产伦久久久久久久| 欧美岛国在线观看| 亚洲品质自拍视频网站| 久草中文综合在线| 91福利视频网站| 久久久午夜精品理论片中文字幕| 一区二区三区免费观看| 国产精品91xxx| 在线播放一区二区三区| 国产精品久久久久久久久免费相片| 日韩国产在线一| 91女厕偷拍女厕偷拍高清| 精品日本一线二线三线不卡| 亚洲美女少妇撒尿| 国产东北露脸精品视频| 欧美浪妇xxxx高跟鞋交| 国产精品国产三级国产| 精品一区二区三区日韩| 欧美视频日韩视频在线观看| 中文字幕不卡三区| 久久精品国产精品亚洲综合| 欧美无人高清视频在线观看| 国产精品少妇自拍| 韩国三级在线一区| 91精品国产欧美一区二区18 | 婷婷亚洲久悠悠色悠在线播放| 国产成人自拍高清视频在线免费播放| 欧美日韩精品一区二区三区蜜桃| 日韩一区在线看| 从欧美一区二区三区| 欧美成人精精品一区二区频| 午夜精品久久久久久久久| 99热99精品| 国产欧美一区二区精品忘忧草| 免费在线观看视频一区| 欧美一区二区三区人| 午夜私人影院久久久久| 欧美唯美清纯偷拍| 亚洲一区免费视频| 在线一区二区三区四区| 自拍偷拍欧美精品| 91热门视频在线观看| 中文字幕在线不卡视频| 成年人国产精品| 国产欧美日韩不卡免费| 国产suv精品一区二区三区| 久久亚洲综合av| 国产精品亚洲а∨天堂免在线| 精品久久久久久久久久久久久久久 | 亚洲成a人片综合在线| 91福利国产精品| 一区二区三区**美女毛片| 欧美这里有精品| 亚洲国产日韩一级| 7777精品伊人久久久大香线蕉完整版 | 国产老女人精品毛片久久| 欧美成人女星排名| 国产一区二区三区精品欧美日韩一区二区三区 | 国产日本欧洲亚洲| 成人黄色在线网站| 自拍偷拍欧美精品| 欧美午夜一区二区| 日韩高清不卡一区| 欧美大尺度电影在线| 国产美女主播视频一区| 中文字幕 久热精品 视频在线| 国产白丝网站精品污在线入口| 国产精品全国免费观看高清 | 久久久久成人黄色影片| 国产成人亚洲精品狼色在线| 国产精品视频线看| 色94色欧美sute亚洲线路二| 亚洲成在线观看| 欧美大黄免费观看| 91在线丨porny丨国产| 亚洲成人自拍一区| 久久久综合激的五月天| 色婷婷香蕉在线一区二区| 日本视频一区二区| 国产亚洲精品免费|