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.

È stato utile?

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.

Compilazione dinamica di C # da IronPython

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top