Comment utiliser win32api d'IronPython
-
02-07-2019 - |
Question
Rédaction de scripts de test dans IronPython, je souhaite vérifier si une fenêtre est affichée ou non. J'ai le pid du processus de l'application principale et je souhaite obtenir une liste des titres de fenêtre liés au pid.
J'essayais d'éviter d'utiliser des appels win32api, tels que FindWindowEx, car (à ma connaissance), vous ne pouvez pas accéder à win32api directement à partir d'IronPython. Y a-t-il un moyen de faire cela en utilisant les classes .net intégrées? La plupart des choses que j'ai rencontrées recommandent d'utiliser win32api, comme ci-dessous.
MISE À JOUR: j'ai trouvé un moyen de contourner ce que j'essayais de faire. Réponse ci-dessous.
La solution
L'article ci-dessous montre comment accéder à win32api indirectement à partir d'IronPython. Il utilise la méthode CSharpCodeProvider CompileAssemblyFromSource pour compiler un assembly en mémoire à partir de la chaîne de code source C # fournie. IronPython peut ensuite importer l'assembly.
Autres conseils
Depuis IronPython 2.6, le module ctypes est pris en charge. Ce module fournit des types de données compatibles C et permet d’appeler des fonctions dans des DLL. Exemple rapide:
import ctypes
buffer = ctypes.create_string_buffer(100)
ctypes.windll.kernel32.GetWindowsDirectoryA(buffer, len(buffer))
print buffer.value
C'est comme si vous pouviez nager sans entrer dans l'eau. Si vous avez besoin d’informations à partir de Windows, la seule option est d’utiliser le win32api. Il y a beaucoup d'exemples à trouver sur la façon de le faire.
Si vous n'aimez pas cette réponse, laissez un commentaire dans votre question et je la supprimerai. Votre question restera donc dans la liste des questions sans réponse.