原来是用bitblt截图的,但是这个方法截不到非当前窗口的图,后来找到了一种调用win32api的printwindow代码的截图方法,这次可以截取非当前窗口的图片了,但还是不完美,就是如果一个控件窗口只显示了一半,它就不能完全截取。代码如下:            IntPtr hscrdc = GetWindowDC(hWnd);
            Control control = Control.FromHandle(hWnd);
            IntPtr hbitmap = CreateCompatibleBitmap(hscrdc, control.Width, control.Height);
            IntPtr hmemdc = CreateCompatibleDC(hscrdc);
            SelectObject(hmemdc, hbitmap);
            PrintWindow(hWnd, hmemdc, 0);
            Bitmap bmp = Bitmap.FromHbitmap(hbitmap);
            DeleteDC(hscrdc);//删除用过的对象
            DeleteDC(hmemdc);//删除用过的对象进行控件截图,只需要传一个hwnd进去就可以了,现在问题是只能截到程序窗口能看到的部分,看不到的部分就截不到,大家有什么办法?看不到的部分是指:例如你的winform程序窗口很小,只有400*300这么大,但是一个控件放在了380*280的这个位置,但是这个控件长有200,宽有200,也就是说,在这个winform窗口中,这个控件只能显示一小部分出来,这时调用截图,他只能截到这一小部分出来,其他部分全是黑的,想截到全部图象,必须把这个控件移到中间让它全部显示出来才行。大家有什么办法没有呢。