可以使Qt下的

grabWindow(WId window, int x = 0, int y = 0, int width = -1, int height = -1)

创建并返回一个QPixmap,通过抓取给定窗口的内容(x、y、width、height)。 
参数(x、y)指定窗口中的偏移量,而(width、height)指定要复制的区域。如果宽度为负,则函数将所有内容复制到窗口的右边界。如果高度为负,则该函数将所有内容复制到窗口的底部。 
可以使用QWidget::winId()函数检索窗口系统标识符(WId)。使用窗口标识符而不是QWidget的基本原理是,允许抓取不属于应用程序、窗口系统框架的窗口,等等。

主要实现代码:

    QPixmap m_pixmap = QPixmap::grabWindow(QApplication::desktop()->winId());m_pixmap ->save("test.jpg");

但是这种方法有一个缺点,就是无法抓取鼠标;这是QT grabWindow实现里面就不抓mouse cursor的
具体实现如下

QPixmap QPixmap::grabWindow(WId winId, int x, int y, int w, int h )
{RECT r;GetClientRect(winId, &r);if (w < 0) w = r.right - r.left;if (h < 0) h = r.bottom - r.top;#ifdef Q_WS_WINCE_WMif (qt_wince_is_pocket_pc()) {QWidget *widget = QWidget::find(winId);if (qobject_cast<QDesktopWidget *>(widget)) {RECT rect = {0,0,0,0};AdjustWindowRectEx(&rect, WS_BORDER | WS_CAPTION, FALSE, 0);int magicNumber = qt_wince_is_high_dpi() ? 4 : 2;y += rect.top - magicNumber;}}
#endif// Create and setup bitmapHDC display_dc = GetDC(0);HDC bitmap_dc = CreateCompatibleDC(display_dc);HBITMAP bitmap = CreateCompatibleBitmap(display_dc, w, h);HGDIOBJ null_bitmap = SelectObject(bitmap_dc, bitmap);// copy dataHDC window_dc = GetDC(winId);BitBlt(bitmap_dc, 0, 0, w, h, window_dc, x, y, SRCCOPY
#ifndef Q_WS_WINCE| CAPTUREBLT
#endif);// clean up all but bitmapReleaseDC(winId, window_dc);SelectObject(bitmap_dc, null_bitmap);DeleteDC(bitmap_dc);QPixmap pixmap = QPixmap::fromWinHBITMAP(bitmap);DeleteObject(bitmap);ReleaseDC(0, display_dc);return pixmap;
}

所以还是换别的思路吧;那就自己将方法实现。不多说直接上代码

QPixmap MainWindow::grabWindow(HWND winId, int x, int y, int w, int h)
{RECT r;GetClientRect(winId, &r);if (w < 0) w = r.right - r.left;if (h < 0) h = r.bottom - r.top;HDC display_dc = GetDC(winId);HDC bitmap_dc = CreateCompatibleDC(display_dc);HBITMAP bitmap = CreateCompatibleBitmap(display_dc, w, h);HGDIOBJ null_bitmap = SelectObject(bitmap_dc, bitmap);BitBlt(bitmap_dc, 0, 0, w, h, display_dc, x, y, SRCCOPY | CAPTUREBLT);CURSORINFO ci;ci.cbSize = sizeof(CURSORINFO);GetCursorInfo(&ci);if((ci.ptScreenPos.x > x) && (ci.ptScreenPos.y > y) && (ci.ptScreenPos.x < (x+w)) && (ci.ptScreenPos.y < (y+h)))DrawIcon(bitmap_dc, ci.ptScreenPos.x-x, ci.ptScreenPos.y-y, ci.hCursor);// clean up all but bitmapReleaseDC(winId, display_dc);SelectObject(bitmap_dc, null_bitmap);DeleteDC(bitmap_dc);QPixmap pixmap = QtWin::fromHBITMAP(bitmap);DeleteObject(bitmap);return pixmap;
}

windows 下使用Qt抓取桌面和鼠标相关推荐

  1. Windows下用批处理抓取smart日志

    Windows下硬盘数量较少时可以用HDDScan这个工具来抓取硬盘smart日志,但硬盘数来如果较多时,鼠标点来点去的就太费劲了.用smartmontools这个工具可以很简单的抓取硬盘smart日 ...

  2. linux获取笔记本摄像头视频,如何在windows下用ffmpeg抓取笔记本电脑摄像头视频

    我有一个很小的python程序,它可以很好地使用ffmpeg的子进程从linux中的网络摄像头(至少对于有内置网络摄像头的笔记本电脑)捕获短视频.在 现在我正试图编写同样的程序来捕捉windows中的 ...

  3. mac下面用ffmpeg抓取桌面以及摄像头推流进行直播

    OSX下面用ffmpeg抓取桌面以及摄像头推流进行直播 这个可以推桌面+麦克风,并且摄像头把人头放在界面下面 在osx系统下通过ffmpeg查看设备 1 ffmpeg -f avfoundation ...

  4. windows下发布Qt程序

    From: http://hi.baidu.com/limingfantasy/blog/item/22f6c459b8720086810a182e.html windows下发布Qt程序 2008- ...

  5. 大盘点|基于RGB图像下的机器人抓取

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 前言 近期读取了一些最新基于RGB图像下的机器人抓取论文,在这里分享下思路. 1.Optimizing ...

  6. oracle tcpdump生成bpf,[20140212]linux下使用tcpdump抓取sql语句

    [20140212]linu下使用tcpdump抓取sql语句.txt 我们生产系统问题多多,经常要跟踪用户执行的sql语句,当出现问题时要跟踪比较麻烦,我需要一个快捷的方式"看到" ...

  7. Windows下的Qt Creator的安装

    采用Qt和Qt creator分别下载和安装的方式:(需要手动设置关联Qt和Qt Creator) 一.软件下载 从http://qt-project.org/downloads分别下载Qt和Qt C ...

  8. 如何在Windows下发布QT应用程序

    如何在Windows下发布QT应用程序 [环境介绍] [操作系统]:Windows 10 64bit [IDE套件]:QT Creator 4.8.0 [编译器版本]:QT5.12.0 MSVC201 ...

  9. git ssh配置完后拉取代码_二、windows下使用git拉取github上的项目(通过设置ssh key方式)...

    一.windows下使用git拉取github上的项目 1.创建仓库 说明: 2.打开git bash 3.使用ssh-keygen命令生成自己的公钥和私钥 首先输入ssh-keygen,这里会提示你 ...

最新文章

  1. 配置ssh公钥登录提示还是输入密码
  2. 阿里云accessKey如何创建?~ 2015.08.25
  3. 《现代操作系统》第4章读书笔记--文件系统(未完成)
  4. 0R电阻的12种妙用---摘自:俸禄的小三
  5. vant.dialog.alert什么方法让他隐藏_今天才发现,美工刀上面还隐藏着一个小机关,厉害又实用,学学吧...
  6. linux中模拟延时与丢包的实现
  7. (22)FPGA面试题名词解释IRQ、BIOS、USB、VHDL、SDR
  8. 音视频之——FFmpeg教程(二)——Windows10下搭建nginx-rtmp流媒体服务器
  9. 【元胞自动机】基于matlab元胞自动机单车道交通流(时空图)【含Matlab源码 1681期】
  10. 科学计算机算ph,科学计算器TechCalc v4.8.0特别高级会员版
  11. 保密协议与竞业限制协议,在劳动法上有什么相关规定吗?
  12. 周鸿祎亲自站台,360年度新旗舰究竟有何特别?
  13. hadoop 不能加载native-hadoop library问题
  14. c语言中能逐个使用下标变量,在C语言中能逐个地使用下标变量,也能一次引用整个数组...
  15. 时尚新享受,告别鼠标手
  16. Win10删除IE图标
  17. 神经网络入门经典书籍,神经网络的书籍推荐
  18. 五个思路,教你如何建立金融业的数据分析管理模型
  19. Java生成二维码,扫描后跳转到指定的网站
  20. Navicat Premium 12 下载、安装、及注册机破解

热门文章

  1. 基于麻雀搜索算法优化的lssvm回归预测
  2. .NET ASP.NET App_Code介绍和App_Code里的类引用问题
  3. 软件架构视图—4+1视图模式
  4. 刑事案件什么情况下可以申请回避?
  5. find和find_if用法
  6. SHELL/SSH基础知识(入门篇)-包含 shell 脚本语言的基本用法、 shell 脚本语言的基本用法、流程控制、函数 function、其它脚本相关工具、数组 array(欢迎留言交流)
  7. 嵌入式QT开发复习笔记
  8. powerdesigner生成sql增加注释
  9. win7+ubuntu 20.0双系统安装
  10. 立即执行函数-有关js里function前面加!