运行一个只有可执行代码的程序A,弹出一个dialog窗口,该dialog窗口中有一ListBox,该ListBox中有很多文字,这些文字再ListBox中一屏现不下,可通过ListBox右面的滑块拖动全部看到。现希望能写一个程序或用一个工具,获取ListBox中的全部文字。另外,程序A运行的过程中,有时会弹出另一个dialog,该窗口中有一个表格状之窗口,该表格状之窗口内也有很多文字,也希望能获取这些文字。不知哪里有这样的例程、库或工具。

解决方案 »

  1.   

    思路:
    1.通过FindWindow找到A窗口句柄hwnda
    2.通过EnumChildWindow 或者 FindWindowEx找到listbox的句柄
    3. 然后得到其值。。
    程序A运行的过程中,有时会弹出另一个dialog---
    这个也和上面的处理方式一样
      

  2.   

    关于得到listbox的值
    ::SendMessage(hwndlistbox, LB_GETTEXT, nIndex, (LPARAM)lpszBuffer);
      

  3.   

    普通的窗口标题可以用楼上说的方法,SendMessage可以取得。不过ListBox的文字信息有可能不是全局空间中的,这时候需要增加一个全局钩子,在被测应用程序的地址空间运行代码来读取,这个时候即使借助窗口句柄复原整个CListBox对象也是可行的。至于Dialog的表格窗口,用Spy++看看是否是标准控件或者ActiveX组件,如果是,看是否可以借助窗口句柄或者其他的方法,复原原控件/组件对象。如果不是,恭喜你,遇上了一项不可能的任务。当然,前提是我对hack工具并不熟悉。
      

  4.   

    用::SendMessage(hwndlistbox, LB_GETTEXT, nIndex, (LPARAM)lpszBuffer);时,nIndex参数的可取值范围我怎样才能获得?
      

  5.   

    or, you can use like:#include <windowx.h>ListBox_GetCount(hwndlistbox);ListBox_GetText(.....);
      

  6.   

    用::SendMessage(hwndlistbox, LB_GETTEXT, nIndex, (LPARAM)lpszBuffer);前,我先执行了下述语句:
       char * m_pBuf;
       m_pBuf=new char[200];
    之后,执行
       ::SendMessage(hwndlistbox, LB_GETTEXT, 2, m_pBuf);
    编译时报错,提示不能将“char *”类型转化为“long”类型。我该怎样才能将存在m_pBuf中的缓冲区首位置通过::SendMessage()发出去?
      

  7.   

    ::SendMessage(hwndlistbox,LB_GETTEXT,(WPARAM)2,(LPARAM)pBuf);