Usando ctypes con jython

Tengo problemas con el uso de ctypes lib en mi script de python. Aquí está mi código (que se encuentra en Internet):

if __name__ == "__main__": from ctypes import * user32 = windll.user32 kernel32 = windll.kernel32 class RECT(Structure): _fields_ = [ ("left", c_ulong), ("top", c_ulong), ("right", c_ulong), ("bottom", c_ulong)]; class GUITHREADINFO(Structure): _fields_ = [ ("cbSize", c_ulong), ("flags", c_ulong), ("hwndActive", c_ulong), ("hwndFocus", c_ulong), ("hwndCapture", c_ulong), ("hwndMenuOwner", c_ulong), ("hwndMoveSize", c_ulong), ("hwndCaret", c_ulong), ("rcCaret", RECT) ] def moveCursorInCurrentWindow(x, y): # Find the focussed window. guiThreadInfo = GUITHREADINFO(cbSize=sizeof(GUITHREADINFO)) user32.GetGUIThreadInfo(0, byref(guiThreadInfo)) focussedWindow = guiThreadInfo.hwndFocus # Find the screen position of the window. windowRect = RECT() user32.GetWindowRect(focussedWindow, byref(windowRect)) # Finally, move the cursor relative to the window. user32.SetCursorPos(windowRect.left + x, windowRect.top + y) if __name__ == '__main__': # Quick test. moveCursorInCurrentWindow(100, 100) 

El primer problema fue que Python no pudo encontrar los ctypes, así que copié los archivos descargados del sitio del proyecto a

 netbeans\6.9\jython-2.5.1\Lib\ 

(sí, estoy usando netbeans) y luego muestra este error:

 > from ctypes import * > File "C:\Users\k\.netbeans\6.9\jython-2.5.1\Lib\ctypes\__init__.py", line 10, in  > from _ctypes import Union, Structure, Array 

Al igual que el archivo de inicio tiene algunos errores o_O ¡Ayuda chicos! Saludos, Chris

Jython aún no tiene soporte completo para ctypes: http://bugs.jython.org/issue1328

No puede simplemente tomar la biblioteca de ctypes comstackda para CPython y enchufarla en Jython.

ctypes en Jython experimentales y no completos.

Desde la lista de correo de usuarios de jython en un hilo titulado ” ctypes in Jython “, Jim Baker (un comentarista de Jython ) escribió el 17 de noviembre de 2010:

Hay algo de soporte experimental para ctypes en 2.5.2 [la versión actual], pero en realidad es más un marcador de posición en este punto.

A continuación, sugiere estos alrededores:

Recomiendo JNA si puedes modificar tu código de ctypes. JNA está bastante cerca de ctypes – ¡la API de JNA aparentemente fue influenciada significativamente por ctypes! JNA también parece funcionar bien con Jython.

La otra opción es usar algo como execnet. Específicamente para execnet: te permite emparejar Jython con CPython, y parece que funciona bien. Pero su licencia GPL hace que no sea un motor de arranque para muchas personas. Hay otras opciones por ahí también.

Más adelante en el mismo hilo tenemos esta evaluación de confirmación:

Probé el módulo ctypes en 2.5.2rc2 recientemente, y encontré que: 1) No hay ctypes.util.find_library todavía 2) ctypes. La estructura aún no admite tipos no escalares

Así que estoy de acuerdo con la evaluación “más de un marcador de posición”. Aún así, es emocionante verlo comenzar.

ctypes no es compatible con Jython 2.5.1. Se ha agregado algún soporte experimental en la versión 2.5.2, pero ciertamente no se ha completado. Tal vez tengas mejor suerte usando JNA con Jython en su lugar. Aquí hay un breve tutorial.

Ok, gracias chicos! Acabo de reconfigurar mis NetBeans, ahora está usando cPython. Todo funciona. Solo tuve que cambiar la línea user32.SetCursorPos(windowRect.left + x, windowRect.top + y) a: user32.SetCursorPos(c_ulong(windowRect.left + x), c_ulong(windowRect.left + y))