使用Windows API SendMessage()可以对TreeView控件进行各种操作。
  我现在需要对一个其他程序中的一个TreeView(如Windows资源管理器,MSDN的contents树)进行操作,其中一个操作时取出一个节点的文本,按理,使用SendMessage(IntPtr tvHandle, TVM_GETITEM, 0, ref tvItem)即可取得tvItem信息,并通过tvItem得到文本。(tvItem是结构TVITEM的实例,并且其中的mask赋值为TVIF_TEXT)
  但是实际操作时,使用了多种方法仍不可行,现象是没有取到任何信息,或者导致目标TreeView的应用程序崩溃。  谁有做过这方面操作经验的大师分享一下经验。
  开发环境:VS 2005,C#,Windows Server 2003+SP1public struct TVITEM
{
  public int mask;
  public IntPtr hItem;
  public int state;
  public int stateMask;
  public IntPtr pszText;
  public int cchTextMax;
  public int iImage;
  public int iSelectedImage;
  public int cChildren;
  public IntPtr lParam;
}

解决方案 »

  1.   

    另外,在网上见到有人用下面的方法获取TreeView信息:TreeView treeView = (TreeView)TreeView.FromHandle(tvHandle);
    TreeNode node = TreeNode.FromHandle(treeView, itemHandle);tvHandle 是用GetChildWindows取到的TreeView句柄(IntPtr)
    itemHandle是用SendMessage(tvHandle, TVM_GETNEXTITEM, TVGN_CARET, 0)取到的句柄(IntPtr)但TreeView.FromHandle(tvHandle)返回的是null,所以node就不能产生郁闷:(