Скрыть несколько окон по процессу - PullRequest
1 голос
/ 01 сентября 2011

У меня есть процесс, и я хотел бы скрыть окно.

Это прекрасно работает, если у процесса есть только одно окно.

Но если имеется диалоговое окно с приглашением, диалоговое окно с предупреждением или другое вспомогательное окно, метод скрытия скрывает только главное окно, а не диалоговое окно ...

Можете ли вы помочь мне скрыть все окна процесса, пожалуйста?

Большое спасибо

Это мой код:

[DllImport("user32.dll")]
private static extern Boolean ShowWindow(IntPtr hWnd, Int32 nCmdShow);


    public void Show()
    {
        ShowWindow(_processHwnd, SwShow);
    }

    public void Hide()
    {
        Process[] processRunning = Process.GetProcesses();

        foreach (Process pr in processRunning)
        {

            if (pr.Id == _process.Id)
            {
                _processHwnd = pr.MainWindowHandle;
            }
        }

        ShowWindow(_processHwnd, SwHide);
    }

1 Ответ

1 голос
/ 01 сентября 2011

Вам нужно использовать немного больше Win32 API через P / invoke, чтобы получить дескрипторы окон для других окон верхнего уровня.

  • Позвоните GetWindowThreadProcessId(), чтобы получить идентификатор потока в главном окне.
  • Вызовите EnumThreadWindows(), чтобы перечислить все окна верхнего уровня этого потока.

Возможно, что в процессе есть окна, связанные с другим потоком, но вероятность этого исчезающе мала.

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