请教高手,如何解决。
我的问题和
http://bbs.csdn.net/topics/390382009?page=1#post-393820469
这个帖子里的问题是一模一样的,看到最后说他用setredrew解决了。可是我没搞懂怎么用 setrefrew,对我要截屏的窗口禁制redrew么?我的程序里,有一个timer,每隔一秒,就去printwindow特定句柄的窗口屏幕
另外,在我的笔记本win8.1里,这段代码printwindow没有任何问题,好得很,每隔一秒都能截取到,但是跑到一台windows7的机器上,就出现了上述问题
也不是截取不到,是截取很多次后,才有一次截取到。肯请解答!

解决方案 »

  1.   

    抓的是游戏窗口。在我自己的win8.1笔记本上,跑没任何问题,在win7台式机上,就出现截图黑屏的情况,我目前的代码如下public static Bitmap GetWindowBMPAndRedraw(IntPtr hWnd)    //hWnd,被遮挡的游戏窗口
            {
                IntPtr hscrdc = GetWindowDC(hWnd);
                //Control control = Control.FromHandle(hWnd);
                IntPtr hbitmap = CreateCompatibleBitmap(hscrdc, 1024, 768);   //游戏窗口是 1024*768 的
                IntPtr hmemdc = CreateCompatibleDC(hscrdc);
                SelectObject(hmemdc, hbitmap);           SendMessage(hWnd, WM_SETREDRAW, FALSE, 0);              bool re = PrintWindow(hWnd, hmemdc, 0);
                Bitmap bmp = null;
              
                if (re)
                {
                    bmp = Bitmap.FromHbitmap(hbitmap);
                }            SendMessage(hWnd, WM_SETREDRAW, TRUE, 0);  
                            DeleteObject(hbitmap);
                DeleteDC(hmemdc);  
                ReleaseDC(hWnd, hscrdc);
                return bmp;
            }
      

  2.   

    那就黑得很正常。  像游戏这样的  win8可以后台截图。  但win7  xp 等 最小化了或者被挡了  就有问题了。
      

  3.   

    问题是,我把游戏窗口放到最前面,无遮挡,printwindow 也是一张大黑图
      

  4.   

    这种截取方式对win7directx窗口无效。
      

  5.   

    你运行游戏时,将游戏设置为非directx模式就可以,对directx模式截屏,我也不明白,留待专家。
      

  6.   

    using PW_RENDERFULLCONTENT flag
      

  7.   

    directx窗口无效,因为这个截屏方式是基于GDI模式的。好多游戏都有directx模式和GDI模式的切换,你试一下切到GDI模式。