64,654
社区成员
发帖
与我相关
我的任务
分享
HWND hTree = HWND(0x60842);//systreeview32的hwnd,直接从spy++获得,暂且写死
HTREEITEM hItemRoot = TreeView_GetRoot(hTree);
HTREEITEM hItem = TreeView_GetNextSibling(hTree, hItemRoot);//这是卖出图标的hitem
::SendMessage(hTree, TVM_SELECTITEM, TVGN_CARET, (LPARAM)hItem);//这时候“卖出”图标会变成蓝色,表示被选中
DWORD pid = 0;
GetWindowThreadProcessId(hTree, &pid);
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, true, pid);
RECT *prect = (RECT*)VirtualAllocEx(hProcess, NULL, sizeof(RECT), MEM_COMMIT, PAGE_READWRITE);
RECT rect = { 0 };
unsigned long n = 0;
*(HTREEITEM*)&rect = hItem;
WriteProcessMemory(hProcess, prect, &rect, sizeof(RECT), NULL);
::SendMessage(hTree, TVM_GETITEMRECT, (WPARAM)TRUE/*FALSE*/, (LPARAM)prect);
ReadProcessMemory(hProcess, prect, &rect, sizeof(RECT), &n);
POINT pt = { 0 };
pt.x = rect.left + (rect.right - rect.left) / 2;
pt.y = rect.top + (rect.bottom - rect.top) / 2;
NMHDR nm;
nm.hwndFrom = hTree;
nm.idFrom = GetDlgCtrlID(hTree);//这个在spy++里核实,control id确实是这个数
nm.code = NM_CLICK;
HWND hParent = GetParent(hTree);
::PostMessage(hTree, WM_LBUTTONDOWN, MK_LBUTTON, MAKELPARAM((WORD)pt.x, (WORD)pt.y));
SendMessage(hParent, WM_NOTIFY, nm.idFrom, (LPARAM)&nm);
::SendMessage(hTree, WM_LBUTTONUP, MK_LBUTTON, MAKELPARAM((WORD)pt.x, (WORD)pt.y));
//释放内存
CloseHandle(hProcess);
VirtualFreeEx(hProcess, prect, 0, MEM_RELEASE);