确定窗口是否聚焦/活动/前景



我正在处理一个有多个窗口的项目。我想在按下回车键时关闭活动窗口。

问题是所有的窗户都关了。我想检查窗口是聚焦/活动的还是在前景上,这样我就可以更改焦点,使其不会关闭所有窗口。

当我运行代码时,我总是得到"我不关闭"。过了一段时间,它们都关闭了。

if(GetFocus() == currentWindow->getHandler() || GetForegroundWindow() == currentWindow->getHandler() || GetActiveWindow() == currentWindow->getHandler() )
{                       
                std::cout << "Is the same";
                if(windows.front() != currentWindow)
                {
                    SetForegroundWindow(SetFocus(windows.front()->getHandler()));                                   
                    DeleteWindow(currentWindow)                     
                }
                else
                {
                    SetForegroundWindow(SetFocus(windows.back()->getHandler()));
                    DeleteWindow(currentWindow);
                }
            }
            else
            {
                std::cout << "I dont close!";
                DeleteWindow(currentWindow);
            }
            Sleep(500);
}

我的应用程序有一个类似的问题,它有多个窗口。我发现GetForegroundWindow将始终返回应用程序的顶级父窗口,而不是实际聚焦的窗口。此外,根据MSDN的说法,GetFocus和GetActiveWindow返回NULL,除非调用线程有该窗口的消息队列(即它拥有该窗口)。所以,这可能就是为什么你的检查都不起作用的原因。

您尝试过GetGUIThreadInfo吗?hwndFocus成员保持具有键盘焦点的窗口。此函数对调用线程或窗口所有权没有任何限制。

最新更新