想实现如下功能:1、迅雷正在运行,且有任务正在下载。
2、通过程序,每1分钟获取一次当前下载任务的完成量(百分比)。
3、将获取信息输出为一个文档。关键是第二步获取百分比,请问怎么实现呢?

解决方案 »

  1.   


    /* 这里只是提供一个思路,理论上是可行的. */
    /*<1>获取迅雷悬浮窗句柄(注:MFC中窗口的类名是配合Icon句柄,Handle句柄生成的.所以,这个类名很随机)
    HWND FloatWnd = FindWindow(_T("Afx:25600000:8"),NULL);
    <2>既然现实文本,那么肯定会用到API函数,譬如DrawText.那么就可以对FloatWnd采取APIHook截取到显示百分比的文本了。
    */
      

  2.   


    /* int DrawText(
      HDC hDC,          // handle to DC
      LPCTSTR lpString, // text to draw
      int nCount,       // text length
      LPRECT lpRect,    // formatting dimensions
      UINT uFormat      // text-drawing options
    );
    这里关键的就是HDC,采取APIHOOK的时候有必要对HDC进行检测,是否是FloatWnd的HDC,
    获取HDC前,肯定要GetDc,CreateDc,BeginPaint之类来进行创建设备句柄。
    这时也可以Hook这些函数,根据这些函数的返回值HDC以及参数HWND来判断HDC是否是FloatWnd的句柄,也就可以断定DrawText中的文本是否是百分比了。
    */
      

  3.   

    先用Spy++看看那个显示进度的窗口是个规则的窗口吗?
      

  4.   

    研究一下ThunderAgent.dll这个com接口吧
    里面有个IAgent::GetTaskInfo