c#WndProc没有被一致地调用

时间:2017-05-24 17:10:10

标签: c# wpf wndproc

我在我的WPF应用程序中处理WndProc,以响应其他应用程序进入全屏的事件。这时,我的应用程序的主窗口需要隐藏。这是我写的代码:

挂钩:

HwndSource source = HwndSource.FromHwnd(MyMainWindowHandle);
source.AddHook(this.WndProc);

的WndProc:

private IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
    {
        Debug.Print("In wndproc");
        QUERY_USER_NOTIFICATION_STATE state;

        SHQueryUserNotificationState(out state);

        if (MyMainWindow.Visibility == Visibility.Visible && state == QUERY_USER_NOTIFICATION_STATE.QUNS_BUSY)
        {
            Debug.Print("hiding");
            MyMainWindow.Hide();
        }
        else if (MyMainWindow.Visibility == Visibility.Hidden && state != QUERY_USER_NOTIFICATION_STATE.QUNS_BUSY)
        {
            Debug.Print("showing");
            MyMainWindow.Show();
        }

        return IntPtr.Zero;
    }

这适用于PowerPoint或Skype等应用程序。但是,当网络浏览器(Chrome)在播放视频时进入全屏时,当用户退出全屏时,WndProc将调用。在用户执行其他操作后,它会被调用并按预期运行,例如单击Windows任务栏等。是否有人知道为什么/解决此问题的方法?

0 个答案:

没有答案