如何跨进程对SysTreeView32控件的节点模拟鼠标单击

并不陌生 2016-07-06 12:52:46
如何跨进程对SysTreeView32控件的节点模拟鼠标单击。或者能触发节点对应的单击事件。
...全文
1541 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
鐵蛋 2016-07-07
  • 打赏
  • 举报
回复
引用 6 楼 qixiaonan 的回复:
[quote=引用 4 楼 kiboisme 的回复:] 说起来还有点复杂,Tree的节点(Node)本身是没有句柄的,因此不能直接给节点发消息,只有给SysTreeView32发送消息来模拟点击。。。。 使用SendMessage(mHandle, TVM_SELECTITEM, TVGN_CARET, Integer(vTreeItem));已经能选中节点,但不能触发选中时间。
都已经选中节点了,再出发鼠标点击或双击事件不就行了,重要的难点你都不已解决了吗
并不陌生 2016-07-06
  • 打赏
  • 举报
回复
[quote=引用 4 楼 kiboisme 的回复:] 说起来还有点复杂,Tree的节点(Node)本身是没有句柄的,因此不能直接给节点发消息,只有给SysTreeView32发送消息来模拟点击。。。。 使用SendMessage(mHandle, TVM_SELECTITEM, TVGN_CARET, Integer(vTreeItem));已经能选中节点,但不能触发选中时间。
并不陌生 2016-07-06
  • 打赏
  • 举报
回复
[quote=引用 4 楼 kiboisme 的回复:] 说起来还有点复杂,Tree的节点(Node)本身是没有句柄的,因此不能直接给节点发消息,只有给SysTreeView32发送消息来模拟点击。。。。。 请问你自己实现过吗?如有可否分享代码给我,揭帖并发红给你
蓝色光芒 2016-07-06
  • 打赏
  • 举报
回复
说起来还有点复杂,Tree的节点(Node)本身是没有句柄的,因此不能直接给节点发消息,只有给SysTreeView32发送消息来模拟点击, 参考CommCtrl里的方法, 1.用TreeView_GetRoot得到跟节点, 2.用TreeView_GetNextItem以及TreeView_GetChild,来获取更多的节点几子结点,通过比较得到你想要点击得那个, 3.用SendMessage(hwnd, TVM_GETITEMRECT, 0, NativeInt(pRemoteAddr))得到该节点的显示位置,由于这个地方需要传一个回写地址,因此要用VirtualAllocEx在目标程序内申请一个空间,先写入HTreeItem到该地址,然后用上面这个消息发送, 4.取回数据得到显示位置R(TRect), 然后发送鼠标按下松开的消息,带上这个地址信息,如有必要还需要用SetCursorPos把鼠标移动到那个位置(注意这个函数是绝对位置) 如果要点击得节点位置固定,直接忽略1-4步
鐵蛋 2016-07-06
  • 打赏
  • 举报
回复
别的控件到还好办一点,这个TreeView有很多子节点,模拟点哪个?
鐵蛋 2016-07-06
  • 打赏
  • 举报
回复
关注下
lyhoo163 2016-07-06
  • 打赏
  • 举报
回复
不提倡跨进程对VCL控件操作,会出现迟钝,或不反映。

1,183

社区成员

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

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