c # Как получить все окна с помощью MainWindowHandle

#c# #api

#c# #API

Вопрос:

Взгляните на эту картинку:введите описание изображения здесь

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

           Process[] processes = Process.GetProcessesByName("TopazChat");
          foreach (Process p in processes)
          {  

              MessageBox.Show(p.MainWindowHandle.ToString());
              List<IntPtr> test = GetChildWindows(p.MainWindowHandle);
               foreach (IntPtr IGotIt in test)
               {
                   MessageBox.Show("I got the child windows");
               }
          }
  

Мой вопрос: как получить дескриптор окон, который был заключен в red box?
и что-то не так с моим подходом?

есть предложения? Я просто использую этот подход, потому что он единственный, который мне знаком..

Ответ №1:

Это другое окно является другим окном верхнего уровня в том же процессе, который реализует одно из видимых окон в приложении. Это старое приложение Delphi 7, которое реализует скрытое окно верхнего уровня, которое находится за пределами видимой иерархии окон. Это скрытое окно — то, которое вы нашли, выделено черным цветом, с именем класса TApplication.

На вашем месте я бы вызвал вызов EnumWindows, чтобы получить все окна верхнего уровня, которые будут включать видимые основные окна для этого приложения. Это было бы реализовано очень похоже на ваш метод GetChildWindows.

Комментарии:

1. Спасибо за быстрый ответ, я попробую