📄 dihandler.cs
字号:
using System;
using System.Windows.Forms;
using Microsoft.DirectX.DirectInput;
namespace DDGameHelper
{
/// <summary>
/// DirectInput 设备管理者,负责用户输入的相关处理
/// </summary>
public class DIHandler
{
#region 受保护的成员
/// <summary>
/// DirectInput Device
/// </summary>
protected Device _keyboard = null;
protected Form _ownerForm;
#endregion
#region 构造函数
/// <summary>
/// 构造函数。须传入一个 form 控件用于 device bind
/// </summary>
public DIHandler(Form ownerForm)
{
_ownerForm=ownerForm;
}
#endregion
public bool Init(ref string errmsg)
{
_keyboard=new Device(SystemGuid.Keyboard);
_keyboard.SetDataFormat(DeviceDataFormat.Keyboard);
_keyboard.SetCooperativeLevel(_ownerForm, CooperativeLevelFlags.Foreground |
CooperativeLevelFlags.NonExclusive | CooperativeLevelFlags.NoWindowsKey);
//try....
_keyboard.Acquire();
//catch errmsg=.... return false
return true;
}
#region 输入设备状态访问相关调用
/// <summary>
/// 获取键盘状态。用 ks[Key.xxxx] 这种格式来检查某个键是否被按下
/// </summary>
public KeyboardState GetKeyboardState()
{
KeyboardState kbstate = null;
try
{
kbstate = this._keyboard.GetCurrentKeyboardState();
}
catch (InputException)
{
while(true) //死循环获取键盘状态直到获取成功。因为有时候,键盘状态无法获取成功(MS示例也是这样干的)
{
Application.DoEvents();
try
{
_keyboard.Acquire();
}
catch (InputLostException)
{
continue;
}
catch(OtherApplicationHasPriorityException)
{
continue;
}
break;
}
}
return kbstate;
}
#endregion
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -