如何投影我的窗口作为活动窗口的前景
how to project my window as active window on foreground
打开了一些窗口,并且从我的进程中我想再启动一个窗口(高优先级),其中用户必须输入凭据。我想把这个凭据窗口前台,反过来,它可能会给用户良好的体验,因为他不需要手动选择凭据窗口。这是一次启动,绝对不讨厌,但强制用户输入信用。
实现这一目标的最佳方法是什么?我不认为模拟鼠标点击是个好主意。是否有一种方法可以将消息发送到其他窗口以使其失去焦点?这样当我启动窗口时,它就会出现在前台
这适用于我,而不必使用SetWindowPos
使窗口'始终在顶部':
HWND foreGround = GetForegroundWindow();
if (foreGround != m_hWnd)
{
if (!::SetForegroundWindow(m_hWnd))
{
if (!foreGround)
{
foreGround = FindWindow(_T("Shell_TrayWnd"), NULL);
}
DWORD idForeground = GetWindowThreadProcessId(foreGround, NULL);
DWORD idTarget = GetWindowThreadProcessId(m_hWnd, NULL);
AttachThreadInput(idForeground, idTarget, TRUE);
::SetForegroundWindow(m_hWnd);
AttachThreadInput(idForeground, idTarget, FALSE);
}
BringWindowToTop();
}
我在聊天应用程序中使用这个,这样新的聊天消息就可以窃取焦点(显然是可选的,因为有些用户不喜欢这个)
你需要调用SetWindowPos和wndTopMost
参数来设置你的窗口在所有其他窗口的顶部
这个UI模式(输入强制值的窗口)通常被称为模态对话框。在MFC中,你会寻找CDialog::DoModal
。也就是说,您从CDialog
派生您的凭据窗口,然后调用继承的DoModal
方法。
模态对话框阻止用户在应用程序中的其他窗口输入,因此会自动移动到被阻止的窗口之前。
用户希望程序只在应该出现的时候出现在前台。这种技术使程序能够违反该契约,窃取前景并颠覆设计。不要在没有考虑其他选择的情况下应用这个。例如,在相关窗口之间使用所有者窗口关系,并在需要时使用AllowSetForegroundWindow()传递成为前景的能力。
相关文章:
- 当可输入框在窗口中处于活动状态时获得通知的任何方法
- 如何按z顺序获取第二个活动窗口?
- 全局挂钩 DLL 仅在 C# 主窗口处于活动状态/前台时调用 C# 回调方法
- 如何在 Ubuntu Qt 中获取活动窗口标题
- 如何在C Winapi中获取活动文件Explorer窗口的路径
- 使用XCB获取活动窗口的宽度
- 如何使用QEvent::WindowBlocked,以便特定窗口始终处于活动状态?
- 如何在窗口上获取活动桌面类型
- 如何使用窗口 API 获取其他应用中的当前活动
- 应该如何检索当前活动窗口的光标下的单词
- 如何在Windows8中获取活动窗口的标题颜色
- 确定窗口是否聚焦/活动/前景
- SDL2窗口是否可以始终处于活动状态,并在DirectX窗口上运行
- 如何在OSX中执行时强制Qt应用程序成为活动/前台窗口
- 如何使用C++更改窗口的活动录制设备?
- 模式对话框处于活动状态时隐藏MFC主窗口
- 以编程方式在窗口中获取活动连接
- 问题:如何在非活动窗口中显示所选文本
- QMainWindow 不再处于活动状态窗口
- 检查窗口是否处于活动状态