【发布时间】:2014-02-23 20:04:38
【问题描述】:
我正在开发一个 WPF 应用程序,我需要知道我的应用程序是否对用户可见。我尝试了 Application.Current.Activated/Deactivated 事件来更改 bool 属性并使用此 bool 来根据我的要求进行检查。一切正常,除了当弹出窗口(如 gtalk 聊天窗口)打开或我在任务栏中单击时调用 Deactivated 事件,所以我的布尔值正在改变。
如何检查我的应用是否对用户可见而不是激活/停用(检查我的应用是否是前台应用)?
Application.Current.Activated += Current_Activated;
Application.Current.Deactivated += Current_Deactivated;
void Current_Deactivated(object sender, EventArgs e)
{
IsActive = false;
}
void Current_Activated(object sender, EventArgs e)
{
IsActive = true;
}
如果 !IsActive 我正在显示通知。
【问题讨论】:
-
发布代码永远不会伤害您,因为它显示了您的起点
-
为什么您需要知道您的窗口是否对用户部分可见,即使在不活动时也是如此?你想达到什么目的?你的窗口要么是
Active(有键盘/鼠标输入)要么没有。当您切换到其他应用程序(即使是一个小弹出窗口,覆盖 0.1% 的窗口)或任务栏时,您的窗口处于非活动状态。您的窗口是Visible或完全不可见(隐藏/最小化),但是,如果您将窗口移远以 对您不可见(您看不到窗口的单个像素),它是仍然是Visible,因为 Windows 不关心 你看到什么。 -
@Sinatr 我的应用类似于 Skype(信使应用)。当我的应用程序不在前台时,我需要在消息到达时显示通知。问题是当应用程序不是前台但对用户仍然可见时,我不需要显示通知。
-
定义前景? Skype 窗口可以隐藏(关闭)或最小化。最小化后,它在任务栏中可见,您可以单击此处或使用 alt-tab 使其处于活动状态。隐藏时,它不在任务栏中(alt-tab 不显示),您必须使用托盘图标(dblclick 或右键单击菜单)来恢复它。什么时候显示通知,什么时候不显示?