Try реализует сообщение TVM_GETITEMRECT https://docs.microsoft.com/en-us/windows/desktop/controls/tvm-getitemrect
Более конкретно, пример:
RECT rc;
*(HTREEITEM*)&rc = hTreeItem;
SendMessage(hwndTreeView, TVM_GETITEMRECT, FALSE, (LPARAM)&rc);
WinDef.HWND mainWindowHwnd = null;//third-party function
WinDef.HWND treeViewHwnd = null;//third-party function by mainWindowHwnd
int processId = -1;//third-party function by mainWindowHwnd
WinNT.HANDLE processHandle = Kernel32.INSTANCE.OpenProcess(WinNT.PROCESS_VM_OPERATION | WinNT.PROCESS_VM_READ | WinNT.PROCESS_VM_WRITE, false, processId);
WinNT.HANDLE rootTreeViewItemHandle = User32Ext.INSTANCE.SendMessage(treeViewHwnd, /*TVM_GETNEXTITEM*/4362, new WinDef.WPARAM(/*TVGN_ROOT*/0), null);
WinDef.LPVOID lpvoid = Kernel32Ext.INSTANCE.VirtualAllocEx(processHandle, null, new BaseTSD.SIZE_T(new WinDef.RECT().size()), new WinDef.DWORD(Kernel32.MEM_RESERVE | Kernel32.MEM_COMMIT), new WinDef.DWORD(Kernel32.PAGE_READWRITE));
Kernel32Ext.INSTANCE.WriteProcessMemory(processHandle, lpvoid.getPointer(), rootTreeViewItemHandle, 8, null);
WinDef.LRESULT lresult = User32Ext.INSTANCE.SendMessage(treeViewHwnd, /*TVM_GETITEMRECT*/4356, false, lpvoid.getPointer());
//lresult return 0. what am I doing wrong?