JNA, как реализовать сообщение TVM_GETITEMRECT? - PullRequest
0 голосов
/ 12 октября 2018

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?
...