Cómo listar ventanas de aplicaciones activas usando C #

Necesito poder listar todas las aplicaciones activas en una máquina Windows. Yo había estado usando este código ...

  Process[] procs = Process.GetProcesses(".");
  foreach (Process proc in procs)
  {
      if (proc.MainWindowTitle.Length > 0)
      {
          toolStripComboBox_StartSharingProcessWindow.Items.Add(proc.MainWindowTitle);
      }
  }

hasta que me di cuenta de que esto no incluye casos como WORD o ACROREAD cuando se abren varios archivos en su propia ventana. En esa situación, solo se muestra la ventana superior utilizando la técnica anterior. Supongo que es porque solo hay un proceso a pesar de que se abren dos (o más) archivos. Entonces, supongo que mi pregunta es: ¿Cómo enumero todas las ventanas en lugar de su proceso subyacente?

Respuestas a la pregunta(1)

Su respuesta a la pregunta