⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.cpp

📁 一个获取HID设备信息的工具,用VC6.0编写.
💻 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 + -