PrintWindow的好处就在这,只要想截的窗口不是最小化,无论在屏幕外还是只显示一半还是被覆盖,都可以成功截取我们想要的部分。

C#代码如下:(网上代码有些缺陷,略做修改)

public static Bitmap GetWindow(IntPtr hWnd)    //hWnd可以是窗口、控件等的handle,因此这种方法截我们想要的部分非常好用。
        {      
              IntPtr hscrdc = GetWindowDC(hWnd);
              Control control = Control.FromHandle(hWnd);
              IntPtr hbitmap = CreateCompatibleBitmap(hscrdc, control.Width, control.Height);
              IntPtr hmemdc = CreateCompatibleDC(hscrdc);
              SelectObject(hmemdc, hbitmap);
              bool re= PrintWindow(hWnd, hmemdc, 0);
              Bitmap bmp = null;
              if(re)
              {
                 bmp = Bitmap.FromHbitmap(hbitmap);                  
              }
              DeleteObject(hbitmap);
              DeleteDC(hmemdc);//删除用过的对象       
              ReleaseDC(hWnd, hscrdc);
              return bmp;
        }

调用非托管函数如下:

[DllImport("gdi32.dll")]
        public static extern IntPtr CreateDC(
        string lpszDriver, // driver name驱动名
        string lpszDevice, // device name设备名
        string lpszOutput, // not used; should be NULL
        IntPtr lpInitData // optional printer data
        );

[DllImport("gdi32.dll")]
        public static extern IntPtr CreateCompatibleDC(IntPtr hdc);    // handle to DC

[DllImport("gdi32.dll")]
        public static extern IntPtr CreateCompatibleBitmap(
        IntPtr hdc, // handle to DC
        int nWidth, // width of bitmap, in pixels
        int nHeight // height of bitmap, in pixels
        );

[DllImport("gdi32.dll")]
        public static extern IntPtr SelectObject(
        IntPtr hdc, // handle to DC
        IntPtr hgdiobj // handle to object
        );

[DllImport("gdi32.dll")]
        public static extern int DeleteDC( IntPtr hdc );   // handle to DC

[DllImport("gdi32.dll")]
        public static extern IntPtr DeleteObject(IntPtr hObject);

[DllImport("user32.dll")]
        public static extern bool PrintWindow(
        IntPtr hwnd, // Window to copy,Handle to the window that will be copied. 
        IntPtr hdcBlt, // HDC to print into,Handle to the device context. 
        UInt32 nFlags // Optional flags,Specifies the drawing options. It can be one of the following values. 
        );

[DllImport("user32.dll")]
        public static extern IntPtr GetWindowDC( IntPtr hwnd );

[DllImport("user32.dll")]
        public static extern IntPtr ReleaseDC(IntPtr hWnd, IntPtr hDC);

附:有些平台的截图是全黑的,开启视频加速可能会导致这样的问题,关闭就能正常截图了。

PrintWindow截取隐藏窗口相关推荐

  1. WGCLOUD在windows部署运行怎么实现隐藏窗口

    1.将WGCLOUD的server端注册为windows系统服务,就可以实现隐藏窗口和开机启动 使用NSSM将server注册为windows系统服务说明 - WGCLOUDhttps://www.w ...

  2. picpick截图工具截取滚动窗口只滚动一次就结束了解决办法

    描述:picpick截图工具截取滚动窗口只滚动一次就结束了解决办法 步骤: 这是窗口尺寸造成的,将窗口进行缩小即可

  3. 隐藏窗口和任务栏图标的实现

    网上也有这类小程序,用过2个都觉得不够方便,所以就想着自己来实现一个. 功能:响应快捷键或者按钮隐藏(显示)包含关键字的窗口和任务栏图标,可设定隐藏关键字.设定快捷键.程序最小化到托盘. 主要包含以下 ...

  4. 在任务栏上显示/隐藏窗口

    在任务栏上显示/隐藏窗口 WS_EX_APPWINDOW Forces a top-level window onto the taskbar when the window is visible. ...

  5. C# 实现窗口程序winform像QQ一样靠近桌面边缘自动隐藏窗口

    实现原理: 实现这个功能的原理步骤如下: 1.判断窗体程序是否靠近桌面边缘: 2.获取桌面屏幕大小与窗体程序大小: 3.把窗体程序显示在桌面以外隐藏起来,预留部分窗体方便用户拉出程序: 4.判断鼠标是 ...

  6. python 隐藏进程_python在windows下创建隐藏窗口子进程的方法

    python在windows下创建隐藏窗口子进程的方法 发布于 2015-11-08 20:56:53 | 213 次阅读 | 评论: 0 | 来源: 网友投递 Python编程语言Python 是一 ...

  7. C++ 实现隐藏窗口和任务栏图标,再也不用担心玩游戏被发现了

    # 前言 大家在日常生活中经常会遇到玩游戏被发现的情况,在我们使用电脑的时候,即使将窗口最小化,任务栏上仍然会留下图标,非常容易被发现. 为了解决这个问题,我使用 C++ 编写了一个可以一键隐藏窗口的 ...

  8. [VC/MFC]一条语句实现程序运行时隐藏窗口

    因为受到经济危机的影响,我在 bokee.com 的博客可能随时出现无法访问的情况:因此将2005年到2006年间在 bokee.com 撰写的博客文章全部迁移到 csdn 博客中来,本文正是其中一篇 ...

  9. WinForm隐藏窗口控制最大化最小化按钮

    设置对窗口大小不能调整 找到[FormBorderStyle]选项,在选项列表中选择[FixedDialog],这样就可以固定窗口大小,禁止对窗口的自由调整了. 隐藏窗口的最大化和最小化按钮: 在选项 ...

  10. 5e怎么绑定一键跳投_想上班摸鱼?分享一款超好用软件,一键隐藏窗口,摸鱼一时爽,一直摸鱼一直爽!...

    点击蓝字即可快速关注我,分享好软件~ 平时小林君分享的一般都是非常实用或者比较增加工作效率的软件,今天就不一样了,今天教大家怎么上班摸鱼(误),隐藏电脑窗口,设置一个老板键 今天要介绍的这款软件名叫H ...

最新文章

  1. 在论坛中出现的各种疑难问题:性能优化
  2. MVC的增删改和Razor
  3. 混沌图像---三翅鹰
  4. .NET(C#)有哪些主流的ORM框架,FreeSql,SqlSugar,Dapper,EF还是...
  5. Thundernet
  6. LeetCode 17. Letter Combinations of a Phone Number
  7. selenium-webdriver(python) (十六) --unittest 框架
  8. 传入json对象_【Python基础】可迭代对象amp;迭代器对象及其实现
  9. LintCode 125. 背包问题 II(DP)
  10. 基于WDF的PCI/PCIe接口卡Windows驱动程序(3)- 驱动程序代码(头文件)
  11. Struts2之自定义转换器
  12. spring配置c3p0连接池
  13. java中面向对象的例子_java面向对象九个经典例子程序
  14. mysql 64 免安装_MYSQL 免安装版(windows 7/64)
  15. Html漂亮的table样式模板
  16. Linux命令—— expect: command not found
  17. 机器学习实战ch03
  18. oracle批量替换保留字,Oracle中的关键字保留字
  19. DiI(细胞膜红色荧光探针)被广泛应用于神经等细胞或组织的示踪剂或长期示踪剂
  20. 把项目从meeclipces转移到idead中遇见的问题

热门文章

  1. SPSS学习(四)单样本t检验
  2. 【全志T113-S3_100ask】9-音频输入与输出(amixer、aplay、arecord)
  3. aplay,arec,amix使用
  4. spring aop 切面执行顺序和常见问题
  5. 如何用python编写财务记账软件_python实现日常记账本小程序
  6. 单片机很简单?我们来聊聊如何进阶
  7. 神器-数学公式识别工具-mathpix
  8. 拟人拟物法求解不等圆Packing问题
  9. 核方法也称为核技巧(Kernel method)
  10. ipa在线安装搭建_免电脑 iOS 12 一键越狱+手机端直接自动安装插件教程