如何使用ctypes在AutoIt中调用'AU3'u wingtittle'?

2024-04-18 17:43:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用ctypes为AutoIt制作一个python包装器。在

我的问题是:

例如,AU3峎wingtext的原型是:

void AU3_WinGetTitle(LPCWSTR szTitle, LPCWSTR szText, LPWSTR szRetText, int nBufSize);

我使用流动代码调用函数:

import ctypes
from ctypes.wintypes import *

AUTOIT = ctypes.windll.LoadLibrary("AutoItX3.dll")


def win_get_title(title, text="", buf_size=200):
    AUTOIT.AU3_WinGetTitle.argtypes = (LPCWSTR, LPCWSTR, LPWSTR, INT)
    AUTOIT.AU3_WinGetTitle.restypes = None
    rec_text = LPWSTR()
    AUTOIT.AU3_WinGetTitle(LPCWSTR(title), LPCWSTR(text),
                          ctypes.cast(ctypes.byref(rec_text), LPWSTR),
                          INT(buf_size))
    res = rec_text.value
    return res

print win_get_title("[CLASS:Notepad]")

运行这些代码后我得到了一个异常:

^{2}$

Tags: 代码textimportsizegettitlectypeswin
1条回答
网友
1楼 · 发布于 2024-04-18 17:43:32

szRetText用于接收输出文本缓冲区

import ctypes
from ctypes.wintypes import *

AUTOIT = ctypes.windll.LoadLibrary("AutoItX3.dll")


def win_get_title(title, text="", buf_size=200):
    # AUTOIT.AU3_WinGetTitle.argtypes = (LPCWSTR, LPCWSTR, LPWSTR, INT)
    # AUTOIT.AU3_WinGetTitle.restypes = None
    rec_text = ctypes.create_unicode_buffer(buf_size)
    AUTOIT.AU3_WinGetTitle(LPCWSTR(title), LPCWSTR(text),
                          rec_text, INT(buf_size))
    res = rec_text.value.rstrip()
    return res

print win_get_title("[CLASS:Notepad]")

相关问题 更多 >