c#使用API跨进程单机TreeView子节点

w7210982 2015-08-09 05:03:26
我通过API能够获得其他进程的TreeView的句柄以及各个子节点的句柄,但是鼠标左右键单机消息无法实现,使用mouse_event的话,无法获得子节点的具体坐标,所以也就没办法实现,有什么方式能获得其他进程的TreeView子节点的坐标吗?或者直接给子节点发单机消息?大神帮帮忙啊。
...全文
162 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
w7210982 2015-08-11
  • 打赏
  • 举报
回复
算了,看来是没人帮忙的,我自己找了几天的资料,搞定了,能获取节点的坐标了,然后通过mouse_event去模拟鼠标单击. bool CTreeVideContrlDlg::GetTreeItemRect(HWND TreeView, HTREEITEM TreeItem, RECT& Rect) { bool result = false; DWORD processId = 0; GetWindowThreadProcessId(TreeView, &processId); HANDLE process = OpenProcess(PROCESS_VM_OPERATION | PROCESS_VM_READ | PROCESS_VM_WRITE, FALSE, processId); if (process != NULL) { LPVOID buffer = VirtualAllocEx(process, NULL, 4096, MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE); if (buffer != NULL) { SIZE_T bytes; WriteProcessMemory(process, buffer, &TreeItem, sizeof(TreeItem), &bytes); result = (::SendMessage(TreeView, TVM_GETITEMRECT, TRUE, (LPARAM)buffer) != 0); ReadProcessMemory(process, buffer, &Rect, sizeof(Rect), &bytes); VirtualFreeEx(process, buffer, 0, MEM_RELEASE); } CloseHandle(process); } return result; } 这是一个兄台写的C++版本的,非常感谢这个兄台的资料
w7210982 2015-08-10
  • 打赏
  • 举报
回复
我也是这么想的,但是我实现不了啊,可能是我技术部过关吧,能具体指点一下吗?我各个节点的句柄都拿到了,就是没办法获得各个子节点的坐标以及大小,还有鼠标的左右键单击消息.
willhuo 2015-08-10
  • 打赏
  • 举报
回复
应该就是根据句柄来操作,别无他法,然后操作msg就行了
w7210982 2015-08-10
  • 打赏
  • 举报
回复
我做一个自动化测试工具啊,你以为我想啊,我都快疯了,要模拟鼠标右键单击树的子节点以及勾选前面的CHECKBOX,我只能去获取子节点的坐标.
於黾 2015-08-10
  • 打赏
  • 举报
回复
新手怎么老是想去hook其他程序的操作呢 你应该找找正规手段,比如让其他程序做个通信,鼠标点击了什么就给你的程序发个消息 而不要老用做外挂和病毒的思路去做这种东西
w7210982 2015-08-10
  • 打赏
  • 举报
回复
没人吗?唉,这可咋弄啊.

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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