Как использовать win32api из IronPython
-
02-07-2019 - |
Вопрос
Написав несколько тестовых сценариев на IronPython, я хочу проверить, отображается окно или нет.У меня есть pid основного процесса приложения, и я хочу получить список заголовков окон, связанных с pid.
Я пытался избегать использования вызовов win32api, таких как FindWindowEx, поскольку (насколько мне известно) вы не можете получить доступ к win32api напрямую из IronPython.Есть ли способ сделать это, используя встроенные классы .net?В большинстве случаев, с которыми я столкнулся, рекомендуется использовать win32api, как показано ниже.
.NET (С#):Получение дочерних окон, когда у вас есть только дескриптор процесса или PID?
ОБНОВЛЯТЬ:Я нашел обходной путь к тому, что пытался сделать.Ответ ниже.
Решение
В статье ниже показано, как получить доступ к win32api косвенно из IronPython.Он использует метод CSharpCodeProvider CompileAssemblyFromSource для компиляции сборки в памяти из предоставленной строки исходного кода C#.IronPython затем сможет импортировать сборку.
Другие советы
Начиная с IronPython 2.6 cтипы модуль поддерживается.Этот модуль предоставляет типы данных, совместимые с C, и позволяет вызывать функции в DLL.Быстрый пример:
import ctypes
buffer = ctypes.create_string_buffer(100)
ctypes.windll.kernel32.GetWindowsDirectoryA(buffer, len(buffer))
print buffer.value
Это все равно, что спросить, умеешь ли ты плавать, не заходя в воду.Если вам нужна информация из Windows, единственный вариант — использовать файл win32api.Можно найти множество примеров того, как это сделать.
Если вам не нравится этот ответ, просто оставьте комментарий к своему вопросу, и я удалю этот ответ, поэтому ваш вопрос останется в списке вопросов без ответа.