
    TVGN_CARET ― получение дескриптора выбранного элемента.
    TVGN_CHILD ― получение дескриптора первого дочернего элемента по отношению к элементу,
                 чей дескриптор указан в параметре hitem.

    TVGN_DROPHILITE ― получение дескриптора элемента, который является целью операции drag-and-drop.
    TVGN_FIRSTVISIBLE ― получение дескриптора первого видимого элемента.
    TVGN_NEXT ― получение дескриптора следующего родственного элемента.
    TVGN_NEXTVISIBLE ― получение дескриптора следующего видимого элемента, который следует за указанным элементом. Указанный элемент должен быть видимым. Используйте сообщение TVM_GETITEMRECT, чтобы определить, является ли элемент видимым.
    TVGN_PARENT ― получение дескриптора указанного родительского элемента по отношению к указанному.
    TVGN_PREVIOUS ― получение дескриптора предыдущего родственного элемента.
    TVGN_PREVIOUSVISIBLE ― получение дескриптора первого видимого элемента, который предшествует указанному элементу, который должен быть видимым. Используйте сообщение TVM_GETITEMRECT, чтобы определить, является ли элемент видимым.
    TVGN_ROOT ― получает дескриптор самого первого из корневых элементов окна просмотра деревьев.

SendMessage,[treehwnd],TVM_GETCOUNT,0,0 ;get num all items in treeview
1)SendMessage,TVM_GETNEXTITEM,TVGN_ROOT,0
2)SendMessage,TVM_GETNEXTITEM,TVGN_CHILD,0
3)SendMessage,TVM_GETNEXTITEM,TVGN_NEXT,0 этот идет и по чилдрен именам и по родителям.
И пройдем по всем именам дерева также.

void TraverseTree(std::wostream& output, HTREEITEM hItem, int depth = 0) const {
    if (!hItem) return;

    auto text = GetItemText(hItem);
    output << std::wstring(depth * 2, L' ') << text << L'\n';

    HTREEITEM hChild = TreeView_GetChild(hTreeView, hItem);
    while (hChild != nullptr) {
      TraverseTree(output, hChild, depth + 1);
      hChild = TreeView_GetNextSibling(hTreeView, hChild);
    }}
  bool SaveToFile(const std::filesystem::path& filename) const {
    try {
      std::wofstream file(filename);
      if (!file.is_open()) return false;

      file.imbue(std::locale(""));

      auto hRoot = TreeView_GetRoot(hTreeView);
      if (hRoot) {
        TraverseTree(file, hRoot);
      }
      return true;
    }
-----------------------CommCtrl.h---Sibling родственный,родыч,собрат или одного уровня.
#define TreeView_GetChild(hwnd, hitem)          TreeView_GetNextItem(hwnd, hitem, TVGN_CHILD)
#define TreeView_GetNextSibling(hwnd, hitem)    TreeView_GetNextItem(hwnd, hitem, TVGN_NEXT)
#define TreeView_GetPrevSibling(hwnd, hitem)    TreeView_GetNextItem(hwnd, hitem, TVGN_PREVIOUS)
#define TreeView_GetParent(hwnd, hitem)         TreeView_GetNextItem(hwnd, hitem, TVGN_PARENT)
#define TreeView_GetFirstVisible(hwnd)          TreeView_GetNextItem(hwnd, NULL,  TVGN_FIRSTVISIBLE)
#define TreeView_GetNextVisible(hwnd, hitem)    TreeView_GetNextItem(hwnd, hitem, TVGN_NEXTVISIBLE)
#define TreeView_GetPrevVisible(hwnd, hitem)    TreeView_GetNextItem(hwnd, hitem, TVGN_PREVIOUSVISIBLE)
#define TreeView_GetSelection(hwnd)             TreeView_GetNextItem(hwnd, NULL,  TVGN_CARET)
#define TreeView_GetDropHilight(hwnd)           TreeView_GetNextItem(hwnd, NULL,  TVGN_DROPHILITE)
#define TreeView_GetRoot(hwnd)                  TreeView_GetNextItem(hwnd, NULL,  TVGN_ROOT)
#define TreeView_GetLastVisible(hwnd)           TreeView_GetNextItem(hwnd, NULL,  TVGN_LASTVISIBLE)

#define TVM_GETNEXTITEM         (TV_FIRST + 10)
#define TreeView_GetNextItem(hwnd, hitem, code) \
    (HTREEITEM)SNDMSG((hwnd), TVM_GETNEXTITEM, (WPARAM)(code), (LPARAM)(HTREEITEM)(hitem))


#define TVGN_ROOT               0x0000
#define TVGN_NEXT               0x0001
#define TVGN_PREVIOUS           0x0002
#define TVGN_PARENT             0x0003
#define TVGN_CHILD              0x0004
#define TVGN_FIRSTVISIBLE       0x0005
#define TVGN_NEXTVISIBLE        0x0006
#define TVGN_PREVIOUSVISIBLE    0x0007
#define TVGN_DROPHILITE         0x0008
#define TVGN_CARET              0x0009
#define TVGN_LASTVISIBLE        0x000A
---------
SendMessage(treeChild, TVM_SELECTITEM, TVGN_CARET, &treeItem); выбрать элемент дерева.

TreeView_DeleteAllItems(hwnd) \
    (BOOL)SNDMSG((hwnd), TVM_DELETEITEM, 0, (LPARAM)TVI_ROOT)