如何在显示桌面/最小化所有/所有窗口最小化时通知我的应用程序?

如何使用c#显示桌面/最小化所有/所有窗口时通知我的应用程序

以下内容可能会帮助您入门。 这只是一个带有ListBox的标准表单(名为listMessages)。 当我执行桌面最小化/ showall时,表单捕获WM_SIZE消息并将Message m值输出到ListBox。 您的表单可能无法响应典型的最小化和最大化事件,但它应该从Windows消息泵接收这些消息。 至于检测是否有任何其他窗口显示更多涉及但也可以完成….

using System; using System.Windows.Forms; namespace MinimizeAll { public partial class Form1 : Form { private const int WmSize = 5; private const int SizeRestored = 0; private const int SizeMinimized = 1; private const int SizeMaximized = 2; private const int SizeShow = 3; private const int SizeHide = 4; public Form1() { InitializeComponent(); } protected override void WndProc(ref Message m) { try { if (m.Msg == WmSize) { var wparam = m.WParam.ToInt32(); switch (wparam) { case SizeRestored: case SizeMinimized: case SizeMaximized: case SizeShow: case SizeHide: var output = string.Format("{0}{1:X} {2:X} {3:X} {4:X} {5:X}", prefix, m.Msg, m.WParam.ToInt32(), m.LParam.ToInt32(), m.HWnd.ToInt32(), m.Result.ToInt32()); listMessages.Items.Add(output); break; default: // this is just a demo (code police)... base.WndProc(ref m); return; } } else { base.WndProc(ref m); } } catch (Exception) { listMessages.Items.Add("err"); base.WndProc(ref m); } } } } 

我完全赞同伊恩博伊德的评论。 您决不应该试图规避已定义的系统行为。 但是,要遵守已定义的系统行为并且仍然(可能)获得您正在寻找的内容,您可能需要考虑使用您不希望隐藏的主窗口的appbars 。 appbar就像任务栏一样,除了全屏应用程序运行时,它始终保持可见状态。

在COM中添加Microsoft Shell Controls And Automation引用使用Namespace Shell32

码:

  Shell32.Shell s32 = new Shell32.Shell(); 

在您想要的状态下调用s32对象..

所以…为了最小化所有窗口,您可以使用以下内容:

将“Microsoft Shell控件和自动化”COM参考添加到您的项目中(References => Add => COM)。

然后做下面的事情:

 Shell32.ShellClass shell = new Shell32.ShellClass(); shell.MinimizeAll(); // can also do: shell.UndoMinimizeAll(); 

或与后期绑定:

 Object shell; shell = CreateObject("Shell.Application"); shell.MinimizeAll(); 

现在我不确定你是否可以使用这个COM的一些事件 (比如AllMinimized)……

为了防止WinForm应用程序最小化(通过最小化按钮):

 void Form1_Resize(object sender, System.EventArgs e) // Handles Form1.Resize { if (this.WindowState == FormWindowState.Minimized) this.WindowState = FormWindowState.Normal; } 

你也可以看看这里: http : //pinvoke.net/default.aspx/user32.EnumDesktopWindows

为了让您的应用程序知道它何时被最小化(桌面/最小化所有/所有窗口最小化的最可能事件,您需要检查

this.WindowState

应用程序当前表单的属性。 如果它被最小化则应该等于

FormWindowState.Minimized

编辑:试试这个:

 foreach (Process proc in Process.GetProcesses()) { /// check proc.StartInfo.ProcessWindowStyle here /// it Gets window state to use when the process is started. } 

http://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo_properties.aspx