DirectInputDevice8 :: Acquire返回E_ACCESSDENIED
当我设置如下的合作级别时Acquire()返回E_ACCESSDENIED,但是如果我跳过合作级别,它可以正常工作。怎么了?
if(FAILED(hr = g_pKeyboard-> SetCooperativeLevel(hWnd,DISCL_FOREGROUND | DISCL_NONEXCLUSIVE))) { 返回小时; } if(FAILED(hr = g_pKeyboard-> Acquire())) { 返回小时; }
____________________________________________________________没有什么不存在。可以?
它与DISCL_BACKGROUND一起工作正常,为什么不DISCL_FOREGROUND?
posted on 2019-05-17 15:29 guanxi0808 阅读(410) 评论(0) 编辑 收藏 举报
另一个注意事项为什么你不要删除if(FAILED(检查Acquire方法。当你使用函数GetDeviceState(...)并且失败时那样)然后你可以进入循环直到获得设备或某物
你在任务栏中运行了什么会导致你的应用程序移动到后台吗?您是否正在运行可能导致此问题的分析器?病毒扫描器?IM申请?
在任何情况下,只要所有错误都是您没有获得键盘,您可以在GetDeviceState或GetDeviceData中处理,如上所述。你应该在这里处理它,不管这是好的做法。
我继续并在我的代码中更改了(FAILED())检查。每个DirectInput调用现在将结果传递给''hr'',我根据MSDN函数规范测试所有已知的返回值,并记录日志文件的细节。当DirectInput开始失败时,它有助于获取此信息。
Kressilac
ps旁注。如果绝对必须捕获每个按键,请使用GetDeviceData而不是GetDeviceState。GetDeviceState很有可能丢失密钥。