Come usare win32api da IronPython
-
02-07-2019 - |
Domanda
Scrivendo alcuni script di test in IronPython, voglio verificare se viene visualizzata o meno una finestra. Ho il pid del processo dell'app principale e desidero ottenere un elenco di titoli di finestre correlati al pid.
Stavo cercando di evitare di usare le chiamate win32api, come FindWindowEx, poiché (per quanto ne so) non è possibile accedere a win32api direttamente da IronPython. C'è un modo per farlo usando le classi .net integrate? La maggior parte delle cose che ho incontrato consiglia di utilizzare win32api, come di seguito.
. NET (C #): ottenere finestre secondarie quando si ha solo un handle di processo o PID?
AGGIORNAMENTO: ho trovato una soluzione a ciò che stavo cercando di fare. Risposta sotto.
Soluzione
L'articolo seguente mostra come accedere indirettamente a win32api da IronPython. Utilizza il metodo CSharpCodeProvider CompileAssemblyFromSource per compilare un assembly in memoria dalla stringa di codice sorgente C # fornita. IronPython può quindi importare l'assembly.
Altri suggerimenti
A partire da IronPython 2.6 è supportato il modulo ctypes . Questo modulo fornisce tipi di dati compatibili con C e consente di chiamare funzioni nelle DLL. Esempio rapido:
import ctypes
buffer = ctypes.create_string_buffer(100)
ctypes.windll.kernel32.GetWindowsDirectoryA(buffer, len(buffer))
print buffer.value
È come chiedere se sai nuotare senza andare in acqua. Se hai bisogno di informazioni da Windows, l'unica opzione è usare win32api. Ci sono molti esempi da trovare su come farlo.
Se non ti piace questa risposta, lascia un commento nella tua domanda e rimuoverò questa risposta, quindi la tua domanda rimarrà nell'elenco delle domande senza risposta.