如何知道应用程序是否在用户界面中可见

时间:2014-01-31 07:39:39

标签: c# wpf

我正在开发一个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我正在显示通知。

3 个答案:

答案 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中找到当前的可见性状态。

如果我需要发布任何代码,请告诉我们; - )