下面这个贴的原代码用来获取同一个程序中的Treeview中各节点的标题没有问题,但是当我试图用这方法去获取另外一个程序上的Treeview的节点的标题时,却没能返回想要的结果,而是诸如x?、^p之类的象是乱码一样的东西,是不是CopyMemory函数只能复制同一个线程内的内存?
参考资料:http://search.csdn.net/Expert/topic/1717/1717633.xml?temp=1.174563E-02请问,在已经得到另外一个程序的Treeview控件及其节点的句柄的情况下,怎么才能得到该节点的标题(文本)。请大家不吝赐教!
参考资料:http://search.csdn.net/Expert/topic/1717/1717633.xml?temp=1.174563E-02请问,在已经得到另外一个程序的Treeview控件及其节点的句柄的情况下,怎么才能得到该节点的标题(文本)。请大家不吝赐教!
现在我说一下程序的最新症状:
我程序的运行过程是这样的:当用户移动鼠标的时候,检测鼠标所在处的控件是不是Treeview控件,如果是,则取得控件中已被选择的节点的句柄,然后取得节点的文本。
1、现在我在自己的程序里面放置了一个Treeview,运行程序后,在自己的Treeview中点击Treeview(的任何位置),能够正确取得Treeview中已选择的节点的句柄和文本,但是当我把鼠标移出自己的窗口去点击别的程序中的Treeview时,能取的节点的句柄,但不能获得正确的字符串。(我的窗口总是在最上层,用了几个LABEL来显示获得的句柄、类名、窗口标题、字符串等信息)
2、不论是在自己的Treeview还是在别的程序的Treeview里面,点击不同的节点时,会返回不同的句柄,但是pszText并不随着变,但是也不是固定不变,如果你不停的点来点去,它偶尔会随机变一下。
3、我觉得这可能是一个重要的现象:当我的程序刚启动的时候,Treeview没有获得焦点,也没有任何节点被选择,这时候我把鼠标移动到Treeview上,返回的节点句柄是0,◆◆但是取得的字符串和我移动鼠标到别的程序的Treeview上取得的是一样的,比如“?8”这样的字符◆◆我只要点一下我的Treeview使其得到焦点(根节点自动被选择),然后即使重新使它失去焦点,还是能得到正确的结果,而别的程序上,我确认该Treeview拥有焦点并有节点被选择,返回的还是“?8”
我的目的就是要取得别的程序上Treeview控件的节点上的字符串。
最终目的是要把我们正在用的一个软件的Treeview节点上的文字自动填到该软件上面的一个Edit文本框中去,那个软件没有考虑到这一点,每次都要我动手去填,还要切换大小写,真是失败
===================================================
hStr = GlobalAlloc(GMEM_FIXED, 1024)
tv.mask = TVIF_TEXT '获取标题文本
tv.HTreeItem = temp 'Item句柄
tv.pszText = hStr
tv.cchTextMax = 1023
'发送TVM_GETITEM获得标题文本
Call SendMessageRef(TVHwnd, TVM_GETITEM, 0, tv)
'将标题文本拷贝到字符串astr中
CopyMemory astr, hStr, 1024
bstr = Left$(astr, (InStr(astr, Chr(0)) - 1))
'释放分配的内存空间
Label2.Caption = tv.pszText
Label3.Caption = bstr
GlobalFree hStr
====================================================
tv.pszText是我自己的程序分配的内存地址,难道是说,我们饶了一大圈,却是SendMessageRef(TVHwnd, TVM_GETITEM, 0, tv)根本就没有取回正确的数据?
====================================================
Dim aaa As Boolean
aaa = SendMessageRef(TVHwnd, TVM_GETITEM, 0, tv)
'将标题文本拷贝到字符串astr中
If aaa Then
Label5.Caption = "成功"
Else
Label5.Caption = "失败"
End If
===================================================
结果把鼠标移动到别的程序的Treeview的时候,返回全部是false,果然没能取回正确的结果。
现在该怎么办呢?急,在线等!