// MFCApplication1Dlg.cpp: 实现文件
//
#include "stdafx.h"
#include "MFCApplication1.h"
#include "MFCApplication1Dlg.h"
#include "afxdialogex.h"
#include <string.h>
#include <iostream>
#include <fstream>
using namespace std;
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
extern "C" {
#include "setupapi.h"
#include "hidsdi.h"
}
unsigned char report_data[65];
unsigned char send_data[65] = {0};
CString MyDev_path;
CString MyFile_path;
BOOL MYFLAG_OPEN;
HANDLE read_HThread1;
HDEVINFO MyHid_handle;
OVERLAPPED WriteOverlapped, ReadOverlapped;
// 用于应用程序“关于”菜单项的 CAboutDlg 对话框
CWinThread *pReadReportThread;
class CAboutDlg : public CDialogEx
{
public:
CAboutDlg();
// 对话框数据
#ifdef AFX_DESIGN_TIME
enum { IDD = IDD_ABOUTBOX };
#endif
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
// 实现
protected:
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialogEx(IDD_ABOUTBOX)
{
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)
END_MESSAGE_MAP()
// CMFCApplication1Dlg 对话框
CMFCApplication1Dlg::CMFCApplication1Dlg(CWnd* pParent /*=nullptr*/)
: CDialogEx(IDD_MFCAPPLICATION1_DIALOG, pParent)
, m_EDIT5(_T(""))
// , req(_T(""))
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CMFCApplication1Dlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Control(pDX, IDC_COMBO1, hid_list);
DDX_Control(pDX, IDC_RADIO1, radio1);
DDX_Control(pDX, IDC_RADIO2, radio2);
DDX_Control(pDX, IDC_EDIT6, send_edit);
DDX_Control(pDX, IDC_EDIT4, ctr_edit);
DDX_Control(pDX, IDC_BUTTON2, But_Con);
DDX_Text(pDX, IDC_EDIT5, m_EDIT5);
//DDX_CBString(pDX, IDC_COMBO2, req);
//DDX_Control(pDX, IDC_COMBO2, req);
DDX_Control(pDX, IDC_COMBO2, req);
}
BEGIN_MESSAGE_MAP(CMFCApplication1Dlg, CDialogEx)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BUTTON1, &CMFCApplication1Dlg::OnBnClickedButton1)
ON_BN_CLICKED(IDC_BUTTON2, &CMFCApplication1Dlg::OnBnClickedButton2)
ON_BN_CLICKED(IDC_BUTTON5, &CMFCApplication1Dlg::OnBnClickedButton5)
ON_CBN_SELCHANGE(IDC_COMBO1, &CMFCApplication1Dlg::OnCbnSelchangeCombo1)
ON_BN_CLICKED(IDC_BUTTON6, &CMFCApplication1Dlg::OnBnClickedButton6)
ON_BN_CLICKED(IDC_BUTTON3, &CMFCApplication1Dlg::OnBnClickedButton3)
END_MESSAGE_MAP()
// CMFCApplication1Dlg 消息处理程序
UINT __cdecl ReadReportThread(LPVOID lpParam)
{
CMFCApplication1Dlg *p = (CMFCApplication1Dlg *)lpParam; //获取主窗口的指针,用来调用主窗口的变量和函数
DWORD Length;
UINT i;
CString Str;
char temp;
//p->UpdateData(FALSE);
while (1)
{
ResetEvent(ReadOverlapped.hEvent);
if (MYFLAG_OPEN == 1)
{
ReadFile(MyHid_handle, report_data, 65, NULL, &ReadOverlapped);
WaitForSingleObject(ReadOverlapped.hEvent, INFINITE);
GetOverlappedResult(MyHid_handle, &ReadOverlapped, &Length, TRUE);
if (Length != 0)
{
Str = "";
for (i = 1; i < Length; i++)
{
//printf("%x ", report_data[i]);
Str.AppendFormat(" %x ", report_data[i]);
}
//printf("lzq:%slzq\r\n", Str);
p->SetDlgItemText(IDC_EDIT5, Str);
}
}
else
{
WaitForSingleObject(ReadOverlapped.hEvent, INFINITE);
}
}
return 0;
}
BOOL CMFCApplication1Dlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
// 将“关于...”菜单项添加到系统菜单中。
// IDM_ABOUTBOX 必须在系统命令范围内。
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != nullptr)
{
BOOL bNameValid;
CString strAboutMenu;
bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
ASSERT(bNameValid);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// 设置此对话框的图标。 当应用程序主窗口不是对话框时,框架将自动
// 执行此操作
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标
// TODO: 在此添加额外的初始化代码
radio1.SetCheck(FALSE);
radio2.SetCheck(TRUE);
//InitConsole();
GetDlgItem(IDC_BUTTON5)->EnableWindow(FALSE);
GetDlgItem(IDC_EDIT6)->EnableWindow(FALSE);
GetDlgItem(IDC_BUTTON3)->EnableWindow(FALSE);
GetDlgItem(IDC_EDIT4)->EnableWindow(FALSE);
m_EDIT5 = "test";
UpdateData(FALSE);
WriteOverlapped.Offset = 0;
WriteOverlapped.OffsetHigh = 0;
WriteOverlapped.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
ReadOverlapped.Offset = 0;
ReadOverlapped.OffsetHigh = 0;
ReadOverlapped.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
pReadReportThread = AfxBeginThread(ReadReportThread, this, THREAD_PRIORITY_NORMAL, 0, CREATE_SUSPENDED, NULL);
if (pReadReportThread != NULL)
{
pReadReportThread->ResumeThread();
}
req.AddString("GetAttributes");
req.AddString("GetString");
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
void CMFCApplication1Dlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialogEx::OnSysCommand(nID, lParam);
}
}
// 如果向对话框添加最小化按钮,则需要下面的代码
// 来绘制该图标。 对于使用文档/视图模型的 MFC 应用程序,
// 这将由框架自动完成。
void CMFCApplication1Dlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // 用于绘制的设备上下文
SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
// 使图标在工作区矩形中居中
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// 绘制图标
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialogEx::OnPaint();
}
}
//当用户拖动最小化窗口时系统调用此函数取得光标
//显示。
HCURSOR CMFCApplication1Dlg::OnQueryDragIcon()
{
return static_cast<HCURSOR>(m_hIcon);
}
void CMFCApplication1Dlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
//printf("this is a test");
hid_list.ResetContent();
UpdateData(FALSE);
CString temp;
int Count = 0;
DWORD strSize = 0, requiredSize = 0;
BOOL result1, result2;
ULONG DeviceInterfaceDetailDataSize;
SP_DEVINFO_DATA DeviceInfoData;
SP_DEVICE_INTERFACE_DATA DeviceInterfaceData;
PSP_DEVICE_INTERFACE_DETAIL_DATA DeviceInterfaceDetailData;
GUID deviceId;
HidD_GetHidGuid(&deviceId);
HDEVINFO handle;
handle = SetupDiGetClassDevs(&deviceId, NULL, NULL, DIGCF_DEVICEINTERFACE | DIGCF_PRESENT);
result1 = false; //定义一些变量
result2 = false;
CString temp11 = "";
do
{
DeviceInterfaceData.cbSize = sizeof(SP_DEVICE_INTERFACE_DATA);
result1 = SetupDiEnumDeviceInterfaces(
handle,
NULL, // IN PSP_DEVINFO_DATA DeviceInfoData, OPTIONAL
&deviceId,
Count,
&DeviceInterfaceData
);
if (result1 == 0) break;
//获得设备详细数据(初步)
SetupDiGetDeviceInterfaceDetail(handle,
&DeviceInterfaceData,
NULL,
0,
&strSize,
NULL);
requiredSize = strSize;
DeviceInterfaceDetailData = (PSP_DEVICE_INTERFACE_DETAIL_DATA)malloc(requiredSize);
DeviceInterfaceDetailData->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA);
DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
//再次获得详细数据
result2 = SetupDiGetDeviceInterfaceDetail(handle,
&DeviceInterfaceData,
DeviceInterfaceDetailData,
strSize,
&requiredSize,
&DeviceInfoDat
没有合适的资源?快使用搜索试试~ 我知道了~
HID-RCV-TR.zip
共67个文件
tlog:18个
obj:6个
h:5个
需积分: 12 2 下载量 91 浏览量
2020-08-17
20:24:18
上传
评论
收藏 176.74MB ZIP 举报
温馨提示
基于MFC开发的HID简单收发上位机,可实现hid设备枚举,VID,PID,设备字符获取,数据收发,简单易用。
资源推荐
资源详情
资源评论
收起资源包目录
HID-RCV-TR.zip (67个子文件)
.vs
MFCApplication1
v15
Browse.VC.db 74.92MB
.suo 52KB
ipch
f91c118ddbaf4155.ipch 134.38MB
MFCApplication-HID
v15
Browse.VC.db 77MB
.suo 62KB
ipch
AutoPCH
7c4beb85bbfdae01.ipch 134.38MB
62b6bd77bad39024.ipch 134.38MB
MFCApplication1
stdafx.cpp 184B
MFCApplication1Dlg.cpp 15KB
MFCApplication1.rc 13KB
MFCApplication1.vcxproj.filters 2KB
res
MFCApplication1.rc2 686B
MFCApplication1.ico 66KB
stdafx.h 2KB
targetver.h 299B
MFCApplication1Dlg.h 1KB
MFCApplication1.aps 108KB
x64
Debug
MFCApplication1.pch 54.75MB
MFCApplication1.obj 101KB
stdafx.obj 1.03MB
MFCApplication1.tlog
CL.write.1.tlog 8KB
CL.read.1.tlog 335KB
rc.write.1.tlog 1KB
rc.read.1.tlog 12KB
MFCApplication1.lastbuildstate 227B
CL.command.1.tlog 8KB
link.write.1.tlog 4KB
link.command.1.tlog 6KB
rc.command.1.tlog 2KB
link.read.1.tlog 15KB
MFCApplication1Dlg.obj 163KB
MFCApplication1.log 2KB
vc141.idb 1.37MB
MFCApplication1.res 69KB
mfcapplication1dlg.obj.enc 137KB
vc141.pdb 9.38MB
MFCApplication1.vcxproj 11KB
resource.h 1KB
MFCApplication1.vcxproj.user 238B
MFCApplication1.h 544B
MFCApplication1.cpp 3KB
Debug
MFCApplication1.pch 54.38MB
MFCApplication1.obj 74KB
stdafx.obj 994KB
MFCApplication1.tlog
CL.write.1.tlog 2KB
CL.read.1.tlog 107KB
rc.write.1.tlog 326B
rc.read.1.tlog 4KB
unsuccessfulbuild 0B
MFCApplication1.lastbuildstate 216B
CL.command.1.tlog 3KB
link.write.1.tlog 1KB
link.command.1.tlog 2KB
rc.command.1.tlog 476B
link.read.1.tlog 7KB
MFCApplication1Dlg.obj 59KB
MFCApplication1.log 628B
vc141.idb 1.32MB
MFCApplication1.res 68KB
vc141.pdb 6.6MB
x64
Debug
MFCApplication1.pdb 2.58MB
MFCApplication1.exe 275KB
MFCApplication1.ilk 1.81MB
MFCApplication-HID.sln 1KB
Debug
MFCApplication1.pdb 2.48MB
MFCApplication1.exe 215KB
MFCApplication1.ilk 1.42MB
共 67 条
- 1
资源评论
awsawzj
- 粉丝: 2
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功