Cómo usar win32api de IronPython
-
02-07-2019 - |
Pregunta
Escribiendo algunos scripts de prueba en IronPython, quiero verificar si se muestra una ventana o no. Tengo el pid del proceso principal de la aplicación y quiero obtener una lista de títulos de ventana relacionados con el pid.
Estaba tratando de evitar el uso de llamadas a win32api, como FindWindowEx, ya que (que yo sepa) no puede acceder a win32api directamente desde IronPython. ¿Hay alguna manera de hacer esto usando clases .net integradas? La mayoría de las cosas que he encontrado recomienda utilizar win32api, como se muestra a continuación.
. NET (C #): ¿Obtener ventanas secundarias cuando solo tiene un identificador de proceso o PID?
ACTUALIZACIÓN: encontré una solución a lo que estaba tratando de hacer. Responda abajo.
Solución
El siguiente artículo muestra cómo acceder a win32api indirectamente desde IronPython. Utiliza el método CSharpCodeProvider CompileAssemblyFromSource para compilar un conjunto en la memoria a partir de la cadena de código fuente C # suministrada. IronPython puede importar el ensamblaje.
Otros consejos
A partir de IronPython 2.6, se admite el módulo ctypes . Este módulo proporciona tipos de datos compatibles con C y permite funciones de llamada en DLL. Ejemplo rápido:
import ctypes
buffer = ctypes.create_string_buffer(100)
ctypes.windll.kernel32.GetWindowsDirectoryA(buffer, len(buffer))
print buffer.value
Es como preguntar si puedes nadar sin entrar al agua. Si necesita información de Windows, la única opción es usar win32api. Hay muchos ejemplos para encontrar cómo hacerlo.
Si no te gusta esta respuesta, solo deja un comentario en tu pregunta y la eliminaré, por lo que tu pregunta permanecerá en la lista de preguntas sin respuesta.