在jython中使用ctypes

时间:2011-03-03 21:17:10

标签: python jython ctypes

我在python脚本中使用ctypes lib时遇到了麻烦。这是我的代码(在互联网上找到):

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)

第一个问题是python无法找到ctypes所以我将从项目站点下载的文件复制到

netbeans\6.9\jython-2.5.1\Lib\

(是的,我正在使用netbeans)然后它显示了这个错误:

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

就像init文件有一些错误o_O帮助家伙! 问候,克里斯

4 个答案:

答案 0 :(得分:8)

Jython实验中的

ctypes并未完成。

来自标题为“ctypes in Jython”的线程中的jython-users邮件列表,Jim Baker(一名Jython提交者)于2010年11月17日写道:

  

有一些实验支持   2.5.2 [当前版本]中的ctypes,但实际上更多   此时占位符。

然后他建议这些工作:

  

如果您可以修改,我建议您使用JNA   你的ctypes代码。 JNA非常接近   对ctypes - JNA的API显然是   受到ctypes的显着影响!   JNA似乎也很好用   Jython的。

     

另一种选择是使用某些东西   喜欢execnet。对于execnet   特别是:它允许你配对   使用CPython进行Jython,看起来确实如此   工作得很好但它的GPL许可证   使它成为许多人的首选   人。还有其他选择   那里也是。

在同一主题中,我们进行了这一确认评估:

  

我在2.5.2rc2中尝试了ctypes模块   最近,发现:1)有   还没有ctypes.util.find_library 2)   ctypes.Structure不支持   非标量类型

     

所以我同意“更多的一个   占位符“评估。但仍然是   很高兴看到它开始。

答案 1 :(得分:3)

Jython 2.5.1不支持

ctypes。在2.5.2中增加了一些实验性支持,但它肯定远未完成。也许你会更好地使用JNA和Jython。有一个简短的教程here

答案 2 :(得分:1)

Jython尚未完全支持ctypes:http://bugs.jython.org/issue1328

你不能简单地为CPython编译ctypes库,并将其插入Jython。

答案 3 :(得分:0)

好的,老兄!我只是重新配置我的NetBeans,现在它使用cPython。一切正常。我只是改变了界限 user32.SetCursorPos(windowRect.left + x, windowRect.top + y)user32.SetCursorPos(c_ulong(windowRect.left + x), c_ulong(windowRect.left + y))