除非窗口有焦点,否则无法获取键盘(C++,DirectX9)

除非窗口有焦点,否则无法获取键盘(C++,DirectX9),c++,directx-9,C++,Directx 9,使用DirectX 9,如果另一个程序在我的程序尝试获取键盘设备时具有焦点,我将无法获取该设备。如果用户在我的程序初始化时单击另一个窗口,则会出现此问题 我调用Windows的SetFocus和SetCapture函数,但它似乎没有效果 在WinError.h中定义FAILEDhr HRESULThrCreateDeviceGUID\u系统键盘和m\u pDIDev失败,则为NULL 抛掷创造 如果失败EDM\u pDIDev->SetDataFormat&c\u DvideBoard 抛掷创造

使用DirectX 9,如果另一个程序在我的程序尝试获取键盘设备时具有焦点,我将无法获取该设备。如果用户在我的程序初始化时单击另一个窗口,则会出现此问题

我调用Windows的SetFocus和SetCapture函数,但它似乎没有效果

在WinError.h中定义FAILEDhr HRESULThr<0//

类创建{}//我的特例课

键盘::键盘LPDirectInput8 pDI,HWND HWND

{

LPDirectInputDevice 8 m_pDIDev

如果PDI->CreateDeviceGUID\u系统键盘和m\u pDIDev失败,则为NULL

抛掷创造

如果失败EDM\u pDIDev->SetDataFormat&c\u DvideBoard

抛掷创造

如果EDM_pDIDev->设置协作级别HWND,DISCL_前台| DISCL_非独占

抛掷创造

设置焦点hwnd;设置捕获hwnd


如果失败EDM\u pDIDev->Acquire;//这是一种安全功能,而不是弱点

如果程序能抓住键盘,想想退出你不想运行的恶意软件会有多痛苦


两次尝试之间都要睡一会儿。一旦焦点转移到你的应用程序上,你就可以做你需要的事情了。

@WillBriggs:100秒是相当长的睡眠时间。一秒钟更合适。
while (true)
{
    while (GetFocus () != hwnd) Sleep (100);
    if (! FAILED(m_pDIDev->Acquire())) break;
}