通过API能够获得其他进程的TreeView的句柄以及各个子节点的句柄,但是鼠标左右键单机消息无法实现,使用mouse_event的话,无法获得子节点的具体坐标,所以也就没办法实现,有什么方式能获得其他进程的TreeView子节点的坐标吗?或者直接给子节点发单机消息? |
|
#120分 |
应该就是根据句柄来操作,别无他法,然后操作msg就行了
|
#2 |
我也是这么想的,但是我实现不了啊,可能是我技术部过关吧,能具体指点一下吗?我各个节点的句柄都拿到了,就是没办法获得各个子节点的坐标以及大小,还有鼠标的左右键单击消息.
|
#420分 |
怎么老是想去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++版本的 |