USB手柄的控制

本文介绍了如何使用DirectX 8.1以上版本来控制USB手柄,通过下载Direct SDK,利用Dinput8.lib等库文件进行手柄识别与控制。首先实例化CDirectInput,然后初始化手柄,接着获取按键状态,最后解析DIJOYSTATE2结构体中的键值以实现控制。
摘要由CSDN通过智能技术生成

USB手柄的控制

                                                                                                                   Flyli

         USB手柄或游戏控制杆并不一定只在打游戏的时候才用得到,为了控制以PC机为核心的机器人能够在手动的控制下运动,略微研究了下USB手柄的控制方法。

         通过查阅相关资料,查到了2USB手柄的控制方法,一种是基于windows DDKUSB开发,由于没有搞到DDK所以暂且不谈这种方法

我们来说说第二种方法,就是以基于DirectX8.1以上的USB手柄控制方法,使用这种方法需要下载DirectSDK,运用到他的运行库。Dinput8.lib,DxErr.Lib,dxguid.lib另外还需要加载direct的一些头文件,至于头文件具体用到了那些我也没有测试,我把这些可能用到的程序都发到了我的资源中,地址是:http://download.csdn.net/source/402394

其中将所有的.h文件复制到vc的运行库下,把.lib文件加载到工程中就可以使用了。

其使用方法也是相当的简单:

1.       CDirectInput实例化

2.       调用InitDirectInput初始化USB手柄,通过其返回值判断手柄是否被识别

3.       声明一个DIJOYSTATE2 类型的值用于接收按键的状态

4.       GetState_Now()声明的DIJOYSTATE2的值进行赋值;

5.       DIJOYSTATE2 中部分键值的对应关系 lxly分别是对应上下左右的方向,rgbbutton[]的数组是分别用来对应其他的手柄按键。

遇到具体的问题可以再联系我哈

一下是我封装后的类

//********************************************************************

// DirectInput.h 文件

//********************************************************************************

#pragma once

#define DIRECTINPUT_VERSION 0x0800

#define _CRT_SECURE_NO_DEPRECATE

#ifndef _WIN32_DCOM

#define _WIN32_DCOM

#endif

 

#include <windows.h>

#include <commctrl.h>

#include <basetsd.h>

#include <dinput.h>

#include <dinputd.h>

#include <assert.h>

#include <oleauto.h>

#include <shellapi.h>

#include <wbemidl.h>

 

#pragma warning( disable : 4996 ) // disable deprecated warning

#include <strsafe.h>

#pragma warning( default : 4996 )

#include "resource.h"

//=============================================================

//宏定义

#define SAFE_DELETE(p)  { if(p) { delete (p);     (p)=NULL; } }

#define SAFE_RELEASE(p) { if(p) { (p)->Release(); (p)=NULL; } }

struct XINPUT_DEVICE_NODE

{

    DWORD dwVidPid;

    XINPUT_DEVICE_NODE* pNext;

};

 

struct DI_ENUM_CONTEXT

{

    DIJOYCONFIG* pPreferredJoyCfg;

    bool bPreferredJoyCfgValid;

};

 

 

class CDirectInput

{

public:

     CDirectInput(void);

public:

     ~CDirectInput(void);

public:

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值