请问 SENDMESSAGE LVM_GETTITEMTEXT消息的参数如何设置

爱我的人请呼吸 2010-04-22 09:12:20

   HDESK = FindWindow("progman", vbNullString)
HDESK = FindWindowEx(HDESK, 0, "shelldll_defview", vbNullString)
HDESK = FindWindowEx(HDESK, 0, "syslistview32", vbNullString)
temp = SendMessage(HDESK, LVM_GETTITEMTEXT, *,*)

  请问上面代码中“*,*”的位置两个参数如何设置? 感谢!
...全文
304 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 pctgl 的回复:]
LVM_GETTITEMTEXT 使用这个消息,则必须要跨进程了
openprocess 之类的不可避免,因为要在进程之间传递自定义数据内容,没办法了

原理其实很简单,就是多了解一下进程的概念,进程之间是相互隔离的,数据是不能共享的(有些特例)
LVM_GETTITEMTEXT 要将一个数据缓冲区提供给listview32控件,你不能把你的进程的数据缓冲提供给另外的程序,所以要用open……
[/Quote]


试过了。用在其它程序上可以正常获取信息,但是用在桌面上就直接引起EXPLORER.EXE崩溃。纠结
PctGL 2010-04-26
  • 打赏
  • 举报
回复
LVM_GETTITEMTEXT 使用这个消息,则必须要跨进程了
openprocess 之类的不可避免,因为要在进程之间传递自定义数据内容,没办法了

原理其实很简单,就是多了解一下进程的概念,进程之间是相互隔离的,数据是不能共享的(有些特例)
LVM_GETTITEMTEXT 要将一个数据缓冲区提供给listview32控件,你不能把你的进程的数据缓冲提供给另外的程序,所以要用openprocess 打开桌面进程, 然后在桌面进程中申请足够长度的内存,virxxxallocxxEx,将这个内存地址提供给listview32,使用 sendmessage 发送,LVM_GETTITEMTEXT消息,待sendmessage返回后,用readprocessmemory 读取这段内存的数据..自己再处理
这是流程,还有就是插入dll,就更麻烦了,就这个吧,算是最简单的了
舉杯邀明月 2010-04-26
  • 打赏
  • 举报
回复
友情Up………………
贝隆 2010-04-25
  • 打赏
  • 举报
回复
UPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUP
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 chinaboyzyq 的回复:]
LVM_GETTITEMTEXT是什么常量? VB的API浏览器中查不到。
[/Quote]

这是SysListView控件类的消息常量

http://www.th7.cn/Article/bc/vb/200702/11130_2.html

这上面有
  • 打赏
  • 举报
回复

感谢几位的回答

TO Tiger_Zhao:

  LVM_GETITEMCOUNT能获取项目的总数。现在根据你提供的思路根据ID逐个用LVM_GETITEMTEXT取得项目的文本
  
SendMessage(HDESK, LVM_GETTITEMTEXT, id,varptr(LVITEM))


  这条消息最后一个参数是一个LVITEM的结构体指针吗?我不知道这个结构体的原型,请指点一下
Tiger_Zhao 2010-04-23
  • 打赏
  • 举报
回复
用 LVM_FINDITEM 进行查找。

负责的查找需要自己实现:
先用 LVM_GETITEMCOUNT 取得项目总数;
然后逐个用 LVM_GETITEMTEXT 取得每个项目的文本,分别进行文本判断。
chinaboyzyq 2010-04-23
  • 打赏
  • 举报
回复
LVM_GETTITEMTEXT是什么常量? VB的API浏览器中查不到。
bcrun 2010-04-23
  • 打赏
  • 举报
回复
可以设计个标准的EXPLORER插件试试
a1875566250 2010-04-23
  • 打赏
  • 举报
回复
ListView 这控件,LZ需要详细了解的话请学习SDK开发。
Tiger_Zhao 2010-04-23
  • 打赏
  • 举报
回复
装个 APIViewer
Private Type LVITEM
mask As Long
iItem As Long
iSubItem As Long
state As Long
stateMask As Long
pszText As String
cchTextMax As Long
iImage As Long
lParam As Long
iIndent As Long
End Type
  • 打赏
  • 举报
回复
谢谢楼上的

我是要做一个能设置桌面图标位置的程序。

因为LVM_SETITEMPOSITION消息的参数使用的是ITEM的ID

我想找到一种方法能将快捷方式的名称与该快捷方式的在SysLISTVIEW中的ID对应起来,从而可以根据快捷方式的名称来放置到对应的位置。因为操作对象可能是EXPLORER.EXE进程,所以希望能尽量避免使用OpenProcess或CopyMemory这些操作。请问除此之外还有没有好点的方法?
bcrun 2010-04-22
  • 打赏
  • 举报
回复
参考下这个吧

http://www.vbgood.com/viewthread.php?tid=69158
获取其他进程中ListView的文本!(原码)

1,486

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧