繁体   English   中英

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

[英]how to notify my application when show desktop/minimize all/ all windows minimized?

如何使用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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM