我正在编写一个屏幕捕捉工具,这个工具可以对各种应用程序中的各种窗口进行捕捉,捕捉结果存成bitmap。有的窗口有滚动条,因此我必须给这个窗口发送WM_HSCROLL或者WM_VSCROLL消息来滚动窗口,才能捕捉到所有的窗口内容。因为必须等窗口绘制完备后我的程序才可以启动捕捉,因此我必须知道这些窗口何时绘制完毕了。这些窗口不是我自己应用程序产生的,我不清楚他们何时绘制完毕了。我现在用的方法是给窗口发送完WM_HSCROLL或者WM_VSCROLL消息后等待一个固定时间(比如1秒钟)再去捕捉窗口内容。可是这个方法有问题,因为有的窗口需要的绘制时间很长,1秒钟根本不够!如果我此时去捕捉,我取到的内容就是错误的,因此必须等待该窗口绘制完成。而且设一个固定的等待时间,对于一些绘制很快的窗口来说,也很费时间。我觉得设定一个固定的等待时间不是一个很好的方法。请问,是否有方法能确切知道何时一个窗口绘制结束了???(注意:这个窗口是其它应用程序绘制的,不是自己应用程序绘制的)

解决方案 »

  1.   

    有个思路,不知道可不可行,也不知道能否实现。
    1、在“给这个窗口发送WM_HSCROLL或者WM_VSCROLL消息”完后,继续发消息,比如说“WM_XXX”。
    2、窗口在接收“WM_HSCROLL或者WM_VSCROLL消息”后,去绘制窗口了。
    3、这时“WM_XXX”应该还留在消息队列里。
    4、定时去查看消息队列。一旦发现“WM_XXX”没有了。那么应该是绘制完了。
    胡思乱想。^_^
      

  2.   

    你可以到codeproject网站去找些相关的代码读读.
    www.codeproject.com
      

  3.   

    在做Spy软件么?我想更好的方法就是设置一个定时器间隔,然后不停的捕获屏幕保存图像。
      

  4.   

    给你提个建议啊。搞个钩子函数钩到你要监视的窗口,然后监视并且向你自己的应用程序发消息。
    SPY能打出所有被监视窗口的消息,我想应该是这么弄的。怎么样,能给点分嘛!哈哈!我要做这个东东就会这么做。spy好象有源码。好久不折腾忘记了,
    你查看看吧。