我正在开发一个WPF应用程序,我需要知道我的应用程序是否对用户可见。我尝试了Application.Current.Activated / Deactivated事件来更改bool属性并使用此bool来检查我的要求。一切正常,除了当弹出窗口(如gtalk聊天窗口)打开或点击任务栏时调用Deactivated事件,所以我的bool正在改变。
我该怎么做才能检查我的应用是否对用户可见而不是激活/停用(检查我的应用是否是前台应用)?
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我正在显示通知。
答案 0 :(得分:1)
protected override void OnSourceInitialized(EventArgs e)
{
base.OnSourceInitialized(e);
HwndSource source = PresentationSource.FromVisual(this) as HwndSource;
source.AddHook(WndProc);
}
private IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
{
if (msg == 0x1c)
{
OnActivateApp(wParam != IntPtr.Zero);
}
return IntPtr.Zero;
}
protected void OnActivateApp(bool activate)
{
Console.WriteLine("Activate {0}", activate);
}
不好意思,不要写不懂英语,但是这篇文章增强了解决方案http://www.codeproject.com/Articles/704390/How-to-be-Notified-when-your-application-is-active
答案 1 :(得分:0)
您可以使用Application.Windows
property告诉您哪些Window
已被实例化而未关闭(当前已打开),然后使用Window.IsActive
property判断其中任何Window activeWindow =
Application.Current.Windows.OfType<Window>().SingleOrDefault(w => w.IsActive));
if (activeWindow != null)
{
// activeWindow is the active Window
}
当前是否处于活动状态:
{{1}}
答案 2 :(得分:-1)
有一个VisibilityChanged
事件可供您联系。您可以在EventArgs
中找到当前的可见性状态。
如果我需要发布任何代码,请告诉我们; - )