HID 程序设计

2024-01-05 09:58
文章标签 程序设计 hid

本文主要是介绍HID 程序设计,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1 环境配置
1.1 安装NTDDK
1.2 设置VC++6.0的配置
工具 ->选择->目录
1.3 程序引用
#include <windows.h>
extern "C" {
#include <hidsdi.h>
#include <hidpi.h>
#include <setupapi.h>
}
#pragma comment(lib,"setupapi.lib")
#pragma comment(lib,"hid.lib")
不加 #include <windows.h>的后果:
c:/program files/microsoft visual studio/vc98/include/rpcndr.h(58) : fatal error C1189: #error : incorrect <rpcndr.h> version. Use the header that matches with the MIDL compiler.
不加 extern “C” {}的后果:
编译通过,构造出错, hid.obj : error LNK2001: unresolved external symbol "void __stdcall HidD_GetHidGuid(struct _GUID *)" (?HidD_GetHidGuid@@YGXPAU_GUID@@@Z)
Debug/hid.exe : fatal error LNK1120: 1 unresolved externals
不加 #pragma comment(lib,"hid.lib") 的后果:hid.obj : error LNK2001: unresolved external symbol _HidD_GetHidGuid@4
代码
/*名称:GetDevPath
功能:获取设备路径
参数:MemberIndex 设备列表的索引,txtpath文本缓存,以字符串保存设备路径
返回:-2表示结束,-1 表示不能获取GUID,0表示未找到设备,>0表示成功,且返回值为路径字符串长度
*/
int HidDevice::GetDevPath(DWORD MemberIndex,char *txtpath)
{
int    ret;
DWORD Length,Required;
//获GUID
HidD_GetHidGuid(&HidGuid);
hDevInfo=SetupDiGetClassDevs(&HidGuid,NULL,NULL,DIGCF_PRESENT|DIGCF_INTERFACEDEVICE);
if (hDevInfo == INVALID_HANDLE_VALUE)
{
return -1;
}
//枚举设备
ret=SetupDiEnumDeviceInterfaces(hDevInfo,0,&HidGuid,MemberIndex,&devInfoData);
if (!ret)
if(MemberIndex==1)
{
// MessageBox(NULL,"未找到任何可用USB设备!",NULL,NULL);
return 0;
}
else
return -2;
//获detaildata结构数组的长度
SetupDiGetDeviceInterfaceDetail(hDevInfo,&devInfoData,NULL,0,&Length,NULL);
detailData=(PSP_DEVICE_INTERFACE_DETAIL_DATA)malloc(Length);
detailData->cbSize=sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA);
//获detailData
ret=SetupDiGetDeviceInterfaceDetail(hDevInfo,&devInfoData,detailData,Length,&Required,NULL);
strcpy(txtpath,detailData->DevicePath);
return strlen(txtpath);
}
/*名称:GetProductInfo
功能:获取usb的hid设备的信息
参数:vendorid供应商,productid产品id,vernum版本号,manufaturer制造商,产品
返回:1
*/
int HidDevice::GetProductInfo(char *vendorid,char *productid,char *vernum,char *manufaturer,char *product)
{
HANDLE        hDeviceHandle;
HIDD_ATTRIBUTES Attributes;
WCHAR         mString[256];
hDeviceHandle = CreateFile(detailData->DevicePath ,
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
0,
NULL);
if(hDeviceHandle == INVALID_HANDLE_VALUE)
return 0;
HidD_GetAttributes(hDeviceHandle,&Attributes);
//将有关该设备的标识显示出来
sprintf(vendorid,"0x%04X",Attributes.VendorID);
sprintf(productid,"0x%04X",Attributes.ProductID);
sprintf(vernum,"0x%04X",Attributes.VersionNumber);
HidD_GetManufacturerString(hDeviceHandle,mString,sizeof(mString));
if (wcstombs(manufaturer,mString,256) == -1) // fail
manufaturer[0] = NULL;
HidD_GetProductString(hDeviceHandle,mString,sizeof(mString));
if (wcstombs(product,mString,256) == -1)
product[0] = NULL;
CloseHandle(hDeviceHandle);
return 1;
}

这篇关于HID 程序设计的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/572487

相关文章

C语言程序设计(数据类型、运算符与表达式)

一、C的数据类型 C语言提供的数据类型: 二、常量和变量 2.1常量和符号常量 在程序运行过程中,其值不能被改变的量称为常量。 常量区分为不同的类型: 程序中用#define(预处理器指令)命令行定义变量将代表常量,用一个标识符代表一个常量,称为符合常量。 2.2变量 变量代表内存中具有特定属性的一个存储单元,用来存放数据,在程序运行期间,这些值是可以 改变的。 变

C语言程序设计(选择结构程序设计)

一、关系运算符和关系表达式 1.1关系运算符及其优先次序 ①<(小于) ②<=(小于或等于) ③>(大于) ④>=(大于或等于 ) ⑤==(等于) ⑥!=(不等于) 说明: 前4个优先级相同,后2个优先级相同,关系运算符的优先级低于算术运算符,关系运算符的优先级高于赋值运算符 1.2关系表达式 用关系运算符将两个表达式(可以是算术表达式或关系表达式,逻辑表达式,赋值表达式,字符

Usb Audio Device Descriptor(10) Hid Device

对于 Standard Interface Descriptor, 当 bInterfaceClass=0x03时,即为HID设备。Standard Interface Descriptor如下 struct usb_standard_interface_descriptor{U8 bLength; /*Size of this descriptor in bytes*/U8 bDescrip

智能工厂程序设计 之1 智能工厂都本俱的方面(Facet,Aspect和Respect)即智能依赖的基底Substrate 之1

Q1、昨天分别给出了三个智能工厂的 “面face”(里面inter-face,外面outer-face和表面surface) 以及每个“面face” 各自使用的“方”(StringProcessor,CaseFilter和ModeAdapter)  。今天我们将继续说说三个智能工厂的“方面” 。在展开之前先看一下三个单词:面向facing,取向oriented,朝向toword。理解这三个词 和

C语言程序设计 笔记代码梳理 重制版

前言 本篇以笔记为主的C语言详解,全篇一共十章内容,会持续更新基础内容,争取做到更详细。多一句没有,少一句不行!  形而上学者谓之道,形而下学者谓之器 形而上学者谓之道,形而下学者谓之器 第1章 C语言的流程 1.C程序经历的六个阶段 编辑(Edit)预处理(Preprocess)编译(Compile)汇编(Assemble)链接(Link)执行(Execute)  2.

ACM东北地区程序设计大赛

不得不说随着参赛级别的提高,题目真的是越来越难啊,不过队长真是给力啊,在我们三个共同努力之下拿下了地区赛三等奖,哈哈我们可是大一唯一一只获奖队,终于在这次比赛打败了田大神。。。大神是失手了,俺和他差距还是挺大的。。。队友陈彤马上要去服兵役了,他说这是我们送给他最好的离别礼物,希望那家伙在部队好好干,以后谁干揍我!!!东北地区赛结束后,今年已经估计没机会参加亚洲区比赛了,赶紧补高数和线数啊!!别挂了

pta-2024年秋面向对象程序设计实验一-java

文章申明:作者也为初学者,解答仅供参考,不一定是最优解; 一:7-1 sdut-sel-2 汽车超速罚款(选择结构) 答案: import java.util.Scanner;         public class Main { public static void main(String[] arg){         Scanner sc=new Scanner(System

C语言程序设计(算法的概念及其表示)

一、算法的概念 一个程序应包括两个方面的内容: 对数据的描述:数据结构 对操作的描述:算法 著名计算机科学家沃思提出一个公式: 数据结构 +算法 =程序 完整的程序设计应该是: 数据结构+算法+程序设计方法+语言工具 广义地说,为解决一个问题而采取的方法和步骤,就称为“算法”。 对同一个问题,可有不同的解题方法和步骤。为了有效地进行解题,不仅需要保证算法正确,还要考虑算

1--程序设计的灵魂—算法

一:算法 特定问题求解步骤的描述 在计算机中表现为指令的有限序列 算法是独立存在的一种解决问题的方法和思想 对于算法而言,语言不重要,重要的是思想 二:算法特性 输入:有0个或多个输入 输出:至少一个输出 有穷:有限步骤之后自动结束 确定:每一步都有确定的含义 可行:每一步可行 三:算法设计准则 正确性,可读性,健壮性,高性价比 程序=数据结构+算法 四:影

Linux程序设计读书笔记------入门

第一章 入门   1:什么是Unix Unix是Open Group管理的一个商标,它指的是遵循特定规范的计算机操作系统 2:什么是Linux Linux是一个可以自由发布的类Unix内核实现,他是一个操作系统的底层核心 3:Linux应用程序表现为两种特殊类型的文件:可执行文件和脚本文件 4:Linux文本编辑器:Vim,Emacs等 5:库文件   1:静态库:.a   2