как уведомить мое приложение когда выставочный рабочий стол/минимизировать весь / все минимизированные окна?

как уведомить мое приложение, когда выставочный рабочий стол/минимизировать весь / все окна минимизировал использование c#

6
задан Suriyan Suresh 5 January 2010 в 11:51
поделиться

4 ответа

Возможно, вы начнете со следующего. Это просто стандартная форма со списком ListBox (с именем listMessages). Когда я выполняю минимизацию/шоулл на рабочем столе, форма перехватывает сообщения 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);
            }
        }
    }
}
2
ответ дан 17 December 2019 в 07:05
поделиться

Так что ... Чтобы минимизировать все окна, вы можете использовать следующее:

Добавить в свой проект «Microsoft Shell Controls и Automation» COM (ссылки => 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

0
ответ дан 17 December 2019 в 07:05
поделиться

Для того, чтобы приложение было знать, когда он минимизирован (самое вероятное событие для того, насколько рабочим / минимизировать все / все окна, минимизированные, вам необходимо проверить на свойство

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

0
ответ дан 17 December 2019 в 07:05
поделиться

Как и подразумевалось в ответе unwind , исполняемый файл содержит вызовы подпрограмм в операционной системе.

Было бы крайне неэффективно для исполняемого файла пытаться реализовать функции, уже предоставленные ОС (например, запись на диск, прием входных данных), чтобы интенсивно использовать вызовы функций ОС.

Различные операционные системы предоставляют функции, которые делают аналогичные вещи, но детали , как вызывать эти функции (и , где они есть), могут быть разными.

Таким образом, помимо основных различий типа процессора, исполняемые файлы, написанные для одной ОС, не будут работать с другой.

-121--2147989-

Для выполнения любого вида ввода-вывода исполняемый файл должен взаимодействовать с операционной системой с помощью sys-вызовов. в Windows это вызовы Win32 API и в linux/unit это в основном posix вызовы.

Кроме того, формат исполняемого файла отличается от ОС, путь PNG-файл отличается от GIF-файла. данные упорядочиваются по-разному, и существуют различные заголовки и подзаголовки.

-121--2147990-

Я полностью согласен с комментарием Йена Бойда. Ни в путь не следует пытаться обойти определенное поведение системы. Однако для соблюдения определенного поведения системы и, тем не менее, (может быть) получения того, что вы ищете, вам может потребоваться ознакомиться с использованием appbars для вашего главного окна, которое вы не хотите скрывать. Панель приложений похожа на панель задач, она остается видимой все время, за исключением тех случаев, когда выполняется полноэкранное приложение.

1
ответ дан 17 December 2019 в 07:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: