c#使用API跨进程获取句柄、坐标,单击TreeView子节点

.Net技术 码拜 9年前 (2015-08-12) 2483次浏览
 

通过API能够获得其他进程的TreeView的句柄以及各个子节点的句柄,但是鼠标左右键单机消息无法实现,使用mouse_event的话,无法获得子节点的具体坐标,所以也就没办法实现,有什么方式能获得其他进程的TreeView子节点的坐标吗?或者直接给子节点发单机消息?

#1

20分

应该就是根据句柄来操作,别无他法,然后操作msg就行了
#2
我也是这么想的,但是我实现不了啊,可能是我技术部过关吧,能具体指点一下吗?我各个节点的句柄都拿到了,就是没办法获得各个子节点的坐标以及大小,还有鼠标的左右键单击消息.
#4

20分

怎么老是想去hook其他程序的操作呢

你应该找找正规手段,比如让其他程序做个通信,鼠标点击了什么就给你的程序发个消息

而不要老用做外挂和病毒的思路去做这种东西

#5
我做一个自动化测试工具啊,要模拟鼠标右键单击树的子节点以及勾选前面的CHECKBOX,我只能去获取子节点的坐标.
#6
自己找了几天的资料,搞定了,能获取节点的坐标了,然后通过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++版本的


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明c#使用API跨进程获取句柄、坐标,单击TreeView子节点
喜欢 (0)
[1034331897@qq.com]
分享 (0)