首先,我想表明一下,我不平时开发语言不是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++高手帮我看看,
小弟在这里先谢过了。

解决方案 »

  1.   

    不同的进程不能直接获取数据,可以参考一下这篇文章:向其他程序的ListView控件发送LVM_GETITEMTEXT
    http://www.vckbase.com/document/viewdoc/?id=1223
      

  2.   

    已经能顺利读到文字了,谢谢了
    我上面说的需求里,想删除好友,
    就是遍历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按键消息
    也没有任何反映,不知道我该怎么发送消息?
      

  3.   

    用PostMessage试试,还有lParam参数,
    你可以用spy++,看你按键时的消息,然后原样发送消息,就行了
      

  4.   

    模拟按键要用PostMessage发送WM_KEYDOWN和WM_KEYUP消息,最后参数不能给0,参考MSDN中这两个消息的说明。
      

  5.   

    楼主,求分享。现在旺旺的好友列表类型是SuperListView啊