CSkin博客

标题: 【C#USB力反馈】BinGoo系列之游戏手柄、操纵杆编程 [打印本页]

作者: Blue_Pen    时间: 2014-11-8 16:45
标题: 【C#USB力反馈】BinGoo系列之游戏手柄、操纵杆编程
本帖最后由 Blue_Pen 于 2014-11-8 23:33 编辑

【C#USB力反馈】BinGoo系列之游戏手柄、操纵杆编程

* 名称:USB游戏手柄、操纵杆案例
* 功能:对usb力反馈信息进行处理,如手柄上下左右键、模拟驾驶器方向盘、按钮、刹车、油门、档位键等,使用微软的Microsoft.DirectX.DirectInput
* 说明:引用两个核心dll:Microsoft.DirectX.DirectInput.dll、Microsoft.DirectX.dll,这两个dll在源码dll文件夹中
下面贴出核心代码
[C#] 纯文本查看 复制代码
 
/// <summary>
/// 初始化操作杆
/// </summary>
/// <returns></returns>
public bool InitDirectInput()
{
// 遍历系统中的操纵杆设备
foreach (DeviceInstance instance in Manager.GetDevices(DeviceClass.GameControl, EnumDevicesFlags.AttachedOnly))
{
// 选第一个操纵杆设备并实例化Device
applicationDevice = new Device(instance.InstanceGuid);
break;
}

if (applicationDevice==null)
{
MessageBox.Show("操纵杆加载失败", "没有发现操纵杆");
return false;
}

// 设置操纵杆默认预定的格式
applicationDevice.SetDataFormat(DeviceDataFormat.Joystick);
// 设置操纵杆设备CooperativeLevel属性
applicationDevice.SetCooperativeLevel(this, CooperativeLevelFlags.Exclusive | CooperativeLevelFlags.Foreground);
// 遍历操纵杆设备上的所有对象。
foreach (DeviceObjectInstance d in applicationDevice.Objects)
{
//力反馈信息
if (((d.ObjectId & (int) DeviceObjectTypeFlags.Axis) != 0))
{
// 设置输入范围
applicationDevice.Properties.SetRange(ParameterHow.ById, d.ObjectId, new InputRange(-1000, +1000));
}
//反馈操纵杆的按钮信息显示对应界面按钮
UpdateControls(d);
}
return true;
}
/// <summary>
/// 获取操纵杆数据
/// </summary>
public void GetData()
{
// 确保操纵杆设备有效
if ( applicationDevice==null)
return;

try
{
// 获取Poll信息
applicationDevice.Poll();
}
catch (InputException inputex)
{
if ((inputex is NotAcquiredException) || (inputex is InputLostException))
{

try
{
// 获取设备信息
applicationDevice.Acquire();
}
catch (InputException)
{
//设备获取失败,原因可能是焦点没有在此窗体内
return;
}
}

} //catch(InputException inputex)

//获取设备状态
try
{
state = applicationDevice.CurrentJoystickState;
}
catch (InputException)
{
return;
}
try
{
//更新UI
UpdateUI();
}
catch
{
}
}

以下是Demo效果图:
源码JoystickDemo下载: 《操纵杆、游戏手柄力反馈》编程.rar (169.8 KB, 下载次数: 283)



作者: wtujoxk    时间: 2014-11-8 20:16
谢谢分享!!!!!!!nice
作者: 工会发的    时间: 2015-3-23 18:21
学习了。。。。。。。。。。。。。
作者: 胤凌郁枫    时间: 2018-9-18 10:53
111111111111111111111111111111111111111111111111111111111
作者: 胤凌郁枫    时间: 2018-9-23 17:59
0000000000000000000000000000
作者: jacksonwong    时间: 2019-5-18 12:44
学习了。。。。。
作者: wenchen2020    时间: 2020-2-11 18:36
谢谢分享,下载学习了。。




欢迎光临 CSkin博客 (http://bbs.cskin.net/) Powered by Discuz! X3.2