作者ckclark (大资佬)
看板Python
标题[问题] 用ctypes抓ListView的资讯
时间Fri Jul 25 14:04:21 2008
学Python没多久 第一次用ctypes 结果弄了好几天还是没办法
要怎麽抓像vista下的档案总管里面的图示资讯呢
我可以确定的是 我有找到windows的handle和他下面的listview的handle
(他的classname是SysListView32)
一些不需要传struct的好像都是ok的
n_item = SendMessage(hList, LVM_GETITEMCOUNT, 0, 0)
和
SendMessage(hList, LVM_SETHOTITEM, 3, 0)
都是ok的
然後我想使用的是LVM_FINDITEM和LVM_GETITEM
不过可能是我struct的地方写烂掉了 常常回传的值都不一样
多试次几还会当掉 (Windows档案总管已经停止运作)
下面是我写的code 不知道哪边有问题呢
网路上找不太到用python要抓listview资讯的code
class POINT(ctypes.Structure):
_fields_ = [
("x", ctypes.c_int),
("y", ctypes.c_int)]
class LVFINDINFO(ctypes.Structure):
_fields_ = [
("flags", ctypes.c_uint),
("psz", ctypes.c_char_p),
("lParam", ctypes.c_int),
("pt", POINT),
("vkDirection", ctypes.c_uint)]
class _LVITEM(ctypes.Structure):
_fields_ = [
("mask", ctypes.c_uint),
("iItem", ctypes.c_int),
("iSubItem", ctypes.c_int),
("state", ctypes.c_uint),
("stateMask", ctypes.c_uint),
("pszText", ctypes.c_char_p),
("cchTextmax", ctypes.c_int),
("iImage", ctypes.c_int),
("lParam", ctypes.c_int),
("iIndent", ctypes.c_int),
("iGroupId", ctypes.c_int),
("cColumns", ctypes.c_uint),
("puColumns", ctypes.POINTER(ctypes.c_uint)),
("piColFmt", ctypes.POINTER(ctypes.c_int)),
("iGroup", ctypes.c_int)]
def getItem(hList, n):
s_item = _LVITEM()
s_item.mask = LVIF_TEXT
s_item.pszText = ctypes.c_char_p('A' * 1024)
s_item.iItem = n
s_item.cchTextmax = 1024
tmp1 = ctypes.c_uint(0)
tmp2 = ctypes.c_int(0)
s_item.puColumns = ctypes.pointer(tmp1)
s_item.piColFmt = ctypes.pointer(tmp2)
print 'SendMessage = %d' % SendMessage(hList, LVM_GETITEMA, 0, ctypes.byref(s_item))
return s_item
def findItem(hList, string):
s_info = LVFINDINFO()
s_info.flags = LVFI_NEARESTXY
s_info.vkDirection = VK_HOME
s_info.psz = ctypes.c_char_p(string)
#s_info.lParam = 0
s_info.pt.x = 1291
s_info.pt.y = 297
print s_info
print s_info.flags
print s_info.psz
print s_info.lParam
print s_info.pt.x, s_info.pt.y
print s_info.vkDirection
print
n_find = SendMessage(hList, LVM_FINDITEMA, -1, ctypes.byref(s_info))
return n_find
学Python没多久 上面也是自己写的 如果有些用法或观念不正确也请多指正 谢谢
还有 用win32api的话会比较方便吗 因为它好像也没有listview的相关函式
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.30.36
2F:→ ckclark:相关的msdn网页 07/25 14:24