使用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;
}
我现在需要对一个其他程序中的一个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;
}
TreeNode node = TreeNode.FromHandle(treeView, itemHandle);tvHandle 是用GetChildWindows取到的TreeView句柄(IntPtr)
itemHandle是用SendMessage(tvHandle, TVM_GETNEXTITEM, TVGN_CARET, 0)取到的句柄(IntPtr)但TreeView.FromHandle(tvHandle)返回的是null,所以node就不能产生郁闷:(