CTreeView,如何确定其他程序的SysTreeView32当前节点是否为子节点
{
tvitem.mask=TVIF_TEXT;
tvitem.cchTextMax=512;
tvitem.pszText=pItem;
tvitem.hItem=(HTREEITEM)::SendMessage(hwnd, TVM_GETNEXTITEM,TVGN_ROOT, 0x0);//得到根句柄
tvitem.cChildren = ::SendMessage(hwnd, TVM_GETNEXTITEM,TVGN_CHILD, (long)tvitem.hItem);//判断是否为叶子节点0x0
::SendMessage(hwnd, TVM_SELECTITEM,TVGN_CARET, (long)tvitem.hItem);//选中状态
WriteProcessMemory(hProcess, ptvitem, &tvitem, sizeof(TVITEM), NULL);//将设置好的结构插入目标进程
::SendMessage(hwnd, TVM_GETITEM,0, (LPARAM)ptvitem);//发送TVM_GETITEM消息
ReadProcessMemory(hProcess, pItem, ItemBuf, 512, NULL);//获取pszText
//MessageBox(ItemBuf,"ITEM TEXT");
//保存找到的记录写入到xml文件中
xml.AddElem("ALL");
xml.IntoElem();
if (tvitem.cChildren)
{
//xml.IntoElem();
xml.AddElem("ITEM", ItemBuf);
//xml.IntoElem();
++i;
}
else
{
xml.AddElem("ITEM", ItemBuf);
xml.OutOfElem();
--i;
}
while((long)tvitem.hItem)
{
while(::SendMessage(hwnd, TVM_EXPAND,TVE_EXPAND, (long)tvitem.hItem))//当此项目能展开时
{
tvitem.hItem=(HTREEITEM)::SendMessage(hwnd, TVM_GETNEXTITEM,TVGN_NEXTVISIBLE, (long)tvitem.hItem);//选择下一个可见项目
tvitem.cChildren = ::SendMessage(hwnd, TVM_GETNEXTITEM,TVGN_CHILD, (long)tvitem.hItem);//判断是否为叶子节点---该方法判断不了。有问题。
::SendMessage(hwnd, TVM_SELECTITEM,TVGN_CARET, (long)tvitem.hItem);//选中状态
WriteProcessMemory(hProcess, ptvitem, &tvitem, sizeof(TVITEM), NULL);//将设置好的结构插入目标进程
::SendMessage(hwnd, TVM_GETITEM,0, (LPARAM)ptvitem);//发送TVM_GETITEM消息
ReadProcessMemory(hProcess, pItem, ItemBuf, 512, NULL);//获取pszText
//保存找到的记录写入到xml文件中
if (tvitem.cChildren)
{
//xml.IntoElem();
xml.AddElem("ITEM", ItemBuf);
xml.IntoElem();
++i;
}
else
{
xml.AddElem("ITEM", ItemBuf);
while (--i)
{
xml.OutOfElem();
}
}
//MessageBox(ItemBuf,"ITEM TEXT");
if( strnicmp( ItemBuf,str_item_text,strlen(str_item_text) ) == 0)
{
MessageBox("已经找到!","恭喜");
Bingo=1;
tvitem.hItem=(HTREEITEM)0x0;//如果发现我们要找的目标,那么程序执行到这里就可以结束了。
break;
}
continue;
}
if(Bingo!=1)
{
tvitem.hItem=(HTREEITEM)::SendMessage(hwnd, TVM_GETNEXTITEM,TVGN_NEXTVISIBLE, (long)tvitem.hItem);//当不能再展开的时候,选择下一个可见项目
tvitem.cChildren = ::SendMessage(hwnd, TVM_GETNEXTITEM,TVGN_CHILD, (long)tvitem.hItem);//判断是否为叶子节点
::SendMessage(hwnd, TVM_SELECTITEM,TVGN_CARET, (long)tvitem.hItem);//选中状态
WriteProcessMemory(hProcess, ptvitem, &tvitem, sizeof(TVITEM), NULL);//将设置好的结构插入目标进程
::SendMessage(hwnd, TVM_GETITEM,0, (LPARAM)ptvitem);//发送TVM_GETITEM消息
ReadProcessMemory(hProcess, pItem, ItemBuf, 512, NULL);//获取pszText
//保存找到的记录写入到xml文件中
if (tvitem.cChildren)
{
//xml.IntoElem();
xml.AddElem("ITEM", ItemBuf);
xml.IntoElem();
++i;
}
else
{
xml.AddElem("ITEM", ItemBuf);
while (--i)
{
xml.OutOfElem();
}
}
//MessageBox(ItemBuf,"ITEM TEXT");
if( strnicmp( ItemBuf,str_item_text,strlen(str_item_text) ) == 0)
{
MessageBox("已经找到!","恭喜");
Bingo=1;
tvitem.hItem=(HTREEITEM)0x0;//如果发现我们要找的目标,那么程序执行到这里就可以结束了。
break;
}
}
}
xml.Save(g_oFileName);
}
}