📄 main.cpp
字号:
// Main.cpp : implementation file
//
#include "stdafx.h"
#include "HIDDebugTool.h"
#include "Main.h"
extern "C"
{
#include "hidsdi.h"
#include "setupapi.h"
}
#pragma comment(lib,"hid")
#pragma comment(lib,"setupapi")
#define MAX_DATA_LEN 1024
#define RECV_DATA_LEN 1024
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CMain dialog
CMain::CMain(CWnd* pParent /*=NULL*/)
: CDialog(CMain::IDD, pParent)
{
//{{AFX_DATA_INIT(CMain)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
}
void CMain::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CMain)
// NOTE: the ClassWizard will add DDX and DDV calls here
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CMain, CDialog)
//{{AFX_MSG_MAP(CMain)
ON_BN_CLICKED(IDC_Link, OnLink)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CMain message handlers
HANDLE hidHandle;
HWND MainHwnd;
void CMain::OnLink()
{
// TODO: Add your control notification handler code here
int USB_VID,USB_PID,deviceNo=0;
ULONG m_MaxDataLen;
char tem[100]="";
GUID hidGuid;
SP_DEVICE_INTERFACE_DATA devInfoData;
USB_VID=0x413c; // 0x5131 0x413c; //厂商ID
USB_PID=0x2003; // 0x2007 0x2003; //设备ID
if(hidHandle!=INVALID_HANDLE_VALUE)
{
sprintf(tem,"设备已连接!");
//SetWindowText(GetDlgItem(IDC_Status),(unsigned short*)tem);
return;
}
HidD_GetHidGuid(&hidGuid);//获取HID设备的类标识(GUID)
/*HDEVINFO hDevInfo=SetupDiGetClassDevs(&hidGuid,NULL,NULL,
(DIGCF_PRESENT|DIGCF_DEVICEINTERFACE));//查询所有已安装的HID设备,得到一个指向该HID设备集合的句柄
if(!hDevInfo)//失败则报错
{
sprintf(tem,"获取HID设备信息失败!");
//SetWindowText(GetDlgItem(MainHwnd,IDC_Status),tem);
return;
}
devInfoData.cbSize=sizeof(SP_DEVICE_INTERFACE_DATA);
SetLastError(NO_ERROR);
while(GetLastError()!=ERROR_NO_MORE_ITEMS)
{
if(SetupDiEnumInterfaceDevice (hDevInfo,0,&hidGuid,deviceNo,&devInfoData))//查询HID设备集中每一个设备的接口信息
{
ULONG requireLength=0;
SetupDiGetInterfaceDeviceDetail(hDevInfo,&devInfoData,NULL,0,&requireLength,NULL);//获取其详细的信息,包括设备名称(头四个字节)
PSP_INTERFACE_DEVICE_DETAIL_DATA devDetail=
(SP_INTERFACE_DEVICE_DETAIL_DATA*) malloc (requireLength);
devDetail->cbSize=sizeof(SP_INTERFACE_DEVICE_DETAIL_DATA);
//获取设备路径
if(!SetupDiGetDeviceInterfaceDetail(hDevInfo,&devInfoData,devDetail,requireLength,NULL,NULL))
{
MessageBox(_T("获取HID设备细节信息失败!"),_T("Greetings"),0);
free(devDetail);
return;
}
//打开设备,并获得设备句柄
hidHandle=CreateFile(devDetail->DevicePath,
GENERIC_READ|GENERIC_WRITE,
FILE_SHARE_READ|FILE_SHARE_WRITE,
NULL,OPEN_EXISTING,FILE_FLAG_OVERLAPPED,NULL);
ULONG i = GetLastError();
//循环直到找到可以访问的设备
if(hidHandle==INVALID_HANDLE_VALUE)
{
deviceNo++;
continue;
}
_HIDD_ATTRIBUTES hidAttributes;
//获取USB设备的有关属性。它包含了设备的零售商ID、产品ID及产品的版本号等。可以根据这些信息判断该设备是否为目标设备
if(!HidD_GetAttributes(hidHandle,&hidAttributes))
{
CloseHandle(hidHandle);
deviceNo++;
continue;
}
//如是要找的设备,则显示设备已连接
if(USB_VID==hidAttributes.VendorID && USB_PID==hidAttributes.ProductID)
{
char version[100]="";
sprintf(version,"设备已连接,ver%X",hidAttributes.VersionNumber);
//SetWindowText(GetDlgItem(MainHwnd,IDC_Status),version);
m_MaxDataLen=MAX_DATA_LEN;
// MessageBox(NULL,"test","test",MB_YESNO);
break;
}
else//如不是要找的设备,则关闭此设备,再循环查找设备
{
CloseHandle(hidHandle);
deviceNo++;
}
}
}
//设备未连接,则显示
if(hidHandle==INVALID_HANDLE_VALUE)
{
sprintf(tem,"设备未连接!");
//SetWindowText(GetDlgItem(MainHwnd,IDC_Status),tem);
}
SetupDiDestroyDeviceInfoList(hDevInfo);//释放设备信息集合
*/
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -