dihandler.cs

来自「这是网上下载的很好的串口发短信的程序! 是用VC++来做的」· CS 代码 · 共 81 行

CS
81
字号
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 + =
减小字号Ctrl + -
显示快捷键?