python调用ctypes 调用win32_在Win32上使用python和ctypes获取列表框的内容时出现问题...

在Windows环境下,使用Python的ctypes库调用Win32 API来获取列表框内容时遇到错误。尽管能正确获取到项的数量,但获取的文本内容不正确,所有文本长度为4,且值显示为类似'0xd9xeex02x90'的格式。当尝试使用Unicode缓冲区时,问题依然存在。这可能与列表框被设置为owner-drawn且没有LBS_HASSTRINGS样式有关,导致接收到的是项的数据而非字符串。
摘要由CSDN通过智能技术生成

I would like to get the content of a list box thanks to python and ctypes.

item_count = ctypes.windll.user32.SendMessageA(hwnd, win32con.LB_GETCOUNT, 0, 0)

items = []

for i in xrange(item_count):

text_len = ctypes.windll.user32.SendMessageA(hwnd, win32con.LB_GETTEXTLEN, i, 0)

buffer = ctypes.create_string_buffer("", text_len+1)

ctypes.windll.user32.SendMessageA(hwnd, win32con.LB_GETTEXT, i, buffer)

items.append(buffer.value)

print items

The number of items is correct but the text is wrong. All text_len are 4 and the text values are something like '0\xd9\xee\x02\x90'

I have tried to use a unicode buffer with a similar result.

I don't find my error. Any idea?

解决方案

If the list box in question is owner-drawn, this passage from the LB_GETTEXT documentation may be relevant:

If you create the list box with an owner-drawn style but without the LBS_HASSTRINGS style, the buffer pointed to by the lParam parameter will receive the value associated with the item (the item data).

The four bytes you received certainly look like they may be a pointer, which is a typical value to store in the per-item data.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值