除非窗口有焦点,否则无法获取键盘(C++,DirectX9)
使用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除非窗口有焦点,否则无法获取键盘(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 抛掷创造
如果失败EDM\u pDIDev->Acquire;//这是一种安全功能,而不是弱点 如果程序能抓住键盘,想想退出你不想运行的恶意软件会有多痛苦
两次尝试之间都要睡一会儿。一旦焦点转移到你的应用程序上,你就可以做你需要的事情了。@WillBriggs:100秒是相当长的睡眠时间。一秒钟更合适。
while (true)
{
while (GetFocus () != hwnd) Sleep (100);
if (! FAILED(m_pDIDev->Acquire())) break;
}