Написав несколько тестовых скриптов в IronPython, я хочу проверить, отображается ли окно или нет. У меня есть идентификатор процесса основного приложения, и я хочу получить список заголовков окон, связанных с этим идентификатором.
Я пытался избежать использования вызовов win32api, таких как FindWindowEx, поскольку (насколько мне известно) вы не можете получить доступ к win32api непосредственно из IronPython. Есть ли способ сделать это с помощью встроенных классов .net? Большинство материалов, с которыми я столкнулся, рекомендует использовать win32api, например, ниже.
.NET (C#): получение дочерних окон, когда у вас есть только дескриптор процесса или PID?
ОБНОВЛЕНИЕ: я нашел способ обойти то, что пытался сделать. Ответ ниже.





Это все равно, что спрашивать, умеешь ли ты плавать, не заходя в воду. Если вам нужна информация из окон, единственный вариант - использовать файл win32api. Можно найти множество примеров, как это сделать.
Если вам не нравится этот ответ, просто оставьте комментарий в своем вопросе, и я удалю этот ответ, поэтому ваш вопрос останется в списке неотвеченных вопросов.
В статье ниже показано, как получить доступ к win32api косвенно из IronPython. Он использует метод CSharpCodeProvider CompileAssemblyFromSource для компиляции сборки в памяти из предоставленной строки исходного кода C#. Затем IronPython может импортировать сборку.
Начиная с IronPython 2.6 поддерживается модуль ctypes. Этот модуль предоставляет типы данных, совместимые с C, и позволяет вызывать функции в библиотеках DLL. Быстрый пример:
import ctypes
buffer = ctypes.create_string_buffer(100)
ctypes.windll.kernel32.GetWindowsDirectoryA(buffer, len(buffer))
print buffer.value