api操作treeview (操作阿里旺旺的好友列表)

lovewindy 2009-05-07 01:57:44
首先,我想表明一下,我不平时开发语言不是C++,而是c#,所以这里贴的代码,我都是不完整的,或是伪代码,希望大家见谅。

因为想做一个针对阿里旺旺的辅助软件,需要操作好友列表(删除好友,不知道旺旺的协议)。
我在网上找了一些基本的方法(是c++的,我转成了c#),

首先,我已经成功找到好友列表那个TreeView的句柄。hWnd
rootHwnd = SendMessage(hWnd, TVM_GETNEXTITEM, TVGN_ROOT, 0);//获取树的根结点,也就是列表中第一个分类
nodeHwnd = SendMessage(hWnd, TVM_GETNEXTITEM, TVGN_CHILD, rootHwnd);//取得第一个分类下面的第一个好友节点
SendMessage(hWnd, TVM_SELECTITEM, TVGN_CARET, nodeHwnd);//选中指定节点,这里能操作成功,执行后,是选中了第一个好友,表示找到的结点句柄是正确的。
IntPtr hStr = Marshal.AllocHGlobal(1024);//定义一个1024字节的空间,反回指针
TVITEM tv = new TVITEM();//实例化一个TVITEM
tv.hItem = nodeHwnd;//刚才找到的第一个好友节点
tv.mask = TVIF_TEXT;
tv.pszText = hStr;//1024字节空间指针
tv.cchTextMax = 1024;//空间容量

StringBuilder sb = new StringBuilder(1024);//c#中字符串变量
int result = SendMessage(hWnd, TVM_GETITEM, 0, tv);
int iCopy = CopyMemory(sb, hStr, 1024);//把hStr的内容拷到字符串变量中

按道理,上面的语句完成了,应该会得到第一个好友的名字。但我得到的是乱码(而且有时候重复执行,得到的乱码字符串也会不太一样)

我试了下,自己写了个窗体,在上面放了个TreeView,用上面的程序去读TreeView节点的文字,一切都顺利,能正确得到文字,
是不是旺旺软件有做过处理?

自己C++实在不懂,所以只能求救各位大哥了,请各位C++高手帮我看看,
小弟在这里先谢过了。
...全文
939 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
ttbaobao888 2010-12-31
  • 打赏
  • 举报
回复
同上,求分享
cbyrh 2010-10-16
  • 打赏
  • 举报
回复
楼主,求分享。。。。现在旺旺的好友列表类型是SuperListView啊
uionghh 2010-07-21
  • 打赏
  • 举报
回复
dgfsfsf
lovewindy 2009-05-08
  • 打赏
  • 举报
回复
谢谢了,上面的可行,顺利解决,结分
lzh9955 2009-05-07
  • 打赏
  • 举报
回复
学习!
cnzdgs 2009-05-07
  • 打赏
  • 举报
回复
模拟按键要用PostMessage发送WM_KEYDOWN和WM_KEYUP消息,最后参数不能给0,参考MSDN中这两个消息的说明。
shenqhy 2009-05-07
  • 打赏
  • 举报
回复
用PostMessage试试,还有lParam参数,
你可以用spy++,看你按键时的消息,然后原样发送消息,就行了
lovewindy 2009-05-07
  • 打赏
  • 举报
回复
已经能顺利读到文字了,谢谢了
我上面说的需求里,想删除好友,
就是遍历TreeView上所有节点,如果名字是我想要的那个,那就删除(这里的删除不是删除结点)
在旺旺的软件里,要删除好友操作如下:点中一个好友(即节点),然后按Delete,弹出的确认框中,点确定,就删除成功了。
但是我用
SendMessage(hWnd, TVM_SELECTITEM, TVGN_CARET, nodeHwnd);//选中指定节点,这里能操作成功,执行后,是选中了第一个好友。
能选中那个好友了,然后我
SendMessage(nodeHwnd, WM_KEYDOWN, VK_DELETE, 0);//向节点发送一个Del按键消息
没有任何反映。

我又偿试
SendMessage(hWnd, WM_KEYDOWN, VK_DELETE, 0);//向TreeView发送一个Del按键消息
也没有任何反映,

不知道我该怎么发送消息?
oldnwind 2009-05-07
  • 打赏
  • 举报
回复
应该是进程间访问问题。
大概可以在目标进程中开辟缓存并读取,暂时没试过。
shenqhy 2009-05-07
  • 打赏
  • 举报
回复
需要在对方进程中读写内存
lwx300 2009-05-07
  • 打赏
  • 举报
回复
不同的进程不能直接获取数据,可以参考一下这篇文章:

向其他程序的ListView控件发送LVM_GETITEMTEXT
http://www.vckbase.com/document/viewdoc/?id=1223

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧