关于CooperativeLevelFlags.Background | CooperativeLevelFlags.NonExclusive

Managed DirectX中创建了一个键盘的DirectInput device,然后SetCooperativeLevel(),为什么CooperativeLevelFlags的值只能取
CooperativeLevelFlags.Background | CooperativeLevelFlags.NonExclusive,这样,无论窗口有没有焦点程序都能捕获到键盘行为。如果取了CooperativeLevelFlags.Foreground 则后边的Device.Acquire()时就会出现异常。麻烦路过的高手指点一下迷津。另外,如何控制程序窗口没有焦点的时候不捕获键盘行为呢?难不成非得用win32 api来判断窗口是否active然后处理键盘行为?请指教,谢谢!

转载于:https://www.cnblogs.com/Pcant/archive/2007/07/25/831218.html

SetCooperativeLevel是DirectInput API中的一个方法,用于设置输入设备与应用程序的协作级别。在.NET控制台应用程序中,可以通过以下步骤使用该方法: 1. 引入DirectInput命名空间:using Microsoft.DirectX.DirectInput; 2. 创建DirectInput对象:DirectInput dinput = new DirectInput(); 3. 获取输入设备:Device device = new Device(dinput, deviceGuid); 其中deviceGuid是输入设备的GUID,可以通过DirectInput.GetDevices方法获取。 4. 设置协作级别:device.SetCooperativeLevel(windowHandle, CooperativeLevel); 其中windowHandle是应用程序窗口句柄,可以通过Process.GetCurrentProcess().MainWindowHandle获取;CooperativeLevel是协作级别,可以是以下值之一: - Exclusive:独占模式,应用程序对输入设备的控制权最高,其他应用程序无法访问输入设备。 - NonExclusive:非独占模式,应用程序与其他应用程序共享输入设备,但应用程序优先级最高。 - Foreground:前台模式,应用程序与其他前台应用程序共享输入设备,但后台应用程序无法访问输入设备。 - Background:后台模式,应用程序与其他后台应用程序共享输入设备,但前台应用程序优先级最高。 5. 设置数据格式:device.SetDataFormat(DeviceDataFormat.Keyboard); 其中DeviceDataFormat.Keyboard表示输入设备为键盘。 6. 开始接收输入数据:device.Acquire(); 以上就是在.NET控制台应用程序中使用SetCooperativeLevel方法的基本步骤。需要注意的是,该方法只对DirectInput输入设备有效,对于其他类型的输入设备,应该使用相应的API进行控制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值