Как показать / скрыть приложение с Visible и ShowInTaskBar как false - PullRequest
0 голосов
/ 20 января 2012

Как показать / скрыть приложение, которое работает как:

Visible = false; 
ShowInTaskBar = false; 

с использованием C #?

Я попытался безуспешно, используя:

ShowWindow(handle, SW_SHOWNORMAL);

но не показывает, работает ли приложение в этой ситуации.

UPDATE; Мои пейзажи:

У меня есть приложение (написанное мной), которое, когда WindowState равно FormWindowState.Minimized, скрывает приложение панели задач и переводит его в «режим значка в трее». Я использую следующий метод для обеспечения единственного экземпляра приложения:

[STAThread]
static void Main()
{

    bool createdNew;
    Mutex m = new Mutex(true, "...", out createdNew);

    if (!createdNew)
    {
        Process currentProc = Process.GetCurrentProcess();

        foreach (Process proc in Process.GetProcessesByName(currentProc.ProcessName))
        {
            if (proc.Id != currentProc.Id)
            {
                IntPtr handle = currentProc.Handle;
                SetForegroundWindow(handle);
                break;
            }
        }

    }
    else
    {
        Application.SetCompatibleTextRenderingDefault(false);
        Application.EnableVisualStyles();           
        Application.Run(new Form1());
    }
}

проблема в том, что он работает нормально для обеспечения единственного экземпляра, но я хочу показать приложение (выход из режима иконки в трее), если приложение запущено. Я подумал о том, чтобы установить связь в приложениях, что-то вроде отправки сообщения из app1 (1) в app2, app2, прочитать сообщение 1 и выполнить какое-то действие. но я понятия не имею, как это сделать, ShowWindow() казалось в прошлые часы лучшим способом сделать это, но @Hans Passant указал некоторые моменты, что это невозможно. Надеюсь, это понятно. Различные способы решить это очень ценится. Еще раз спасибо!

1 Ответ

3 голосов
/ 20 января 2012

Изменение свойства ShowInTaskbar приводит к изменению значения дескриптора. Это одно из нескольких свойств класса Form, которые могут быть указаны только в собственном вызове CreateWindowEx () и не могут быть изменены позже. Таким образом, изменение свойства требует Winforms для воссоздания окна. И это дает ему другой дескриптор, делая очень вероятным, что вызов ShowWindow () использует неправильное значение.

Вы не обнаружили, что это была проблема, потому что вы не проверяете возвращаемое значение ShowWindow (). Очень важно, когда вы вводите вызовы Windows, у вас нет дружественного .NET-исключения, которое может ударить вас по голове, когда вызов не удался.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...