我在我的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任务栏等。是否有人知道为什么/解决此问题的方法?