问题分析

最近一直上网课,实在不知道孩子在干嘛,忍不住想监控孩子屏幕看看孩子在干嘛。网上有虽然有很多软件,但是总是不满意,(1)有界面,不能无感截屏(2)有的截屏时间属于连续截屏,资源占用高。(3)软件占用空间太。虽然一直没有实际安装到孩子电脑上,但是想想技术实现也行。

需求确定

基本需求

(1)定时器定时调用截屏 (2)隐藏窗口(3)自动启动(4)调用截屏

其他需求

(1)程序小巧简单,准备使用 避免python 之类c++。(2)增加特定时间段不截屏的功能。(3)视频生成?快速浏览?

解决方案

语言选择:最熟悉C++,依赖库少

(1)定时器:

参考 C+CGitHub - collielimabean/Timer: Simple timer that on expiration executes a callback.

示例代码

void Callback()
{time_t current = time(nullptr);std::cout << "Callback executed on " << std::ctime(&current) << std::endl;
}int main()
{Timer t(Interval(2000), &Callback, true);t.Start();
}

(2)截屏软件:

snapaste 属于开源绿色软件,支持命令行截图,可以参考相关命令

c++ 截屏也很简单  参考 C++实现截图截屏的示例代码-云海天教程

本文直接使用下面截屏代码

#include "Timer.h"
#include <ctime>
#include <iostream>#include"windows.h"
#include <atlimage.h>
#include <iomanip>#include <string>
#include <sstream>#define UNICODE
#ifndef ULONG_PTR
#define ULONG_PTR unsigned long*
#endifusing namespace std;
#include "GdiPlus.h"
using namespace Gdiplus;
#pragma comment(lib, "gdiplus.lib")string SavePath = "e:\\";void CaptureScreen()
{string stime;char tAll[255];   auto tm = *std::localtime(&t);strftime(tAll, sizeof(tAll), "%Y-%m-%d-%H-%M-%S", &tm);stime = tAll;//capture screen HDC hdcSrc = GetDC(NULL);int nBitPerPixel = GetDeviceCaps(hdcSrc, BITSPIXEL);//int nWidth = GetDeviceCaps(hdcSrc, HORZRES);//int nHeight = GetDeviceCaps(hdcSrc, VERTRES);//高分屏需要获取不同参数int nWidth = GetDeviceCaps(hdcSrc, DESKTOPHORZRES);int nHeight = GetDeviceCaps(hdcSrc, DESKTOPVERTRES);CImage image;image.Create(nWidth, nHeight, nBitPerPixel);BitBlt(image.GetDC(), 0, 0, nWidth, nHeight, hdcSrc, 0, 0, SRCCOPY);ReleaseDC(NULL, hdcSrc);image.ReleaseDC();string FileName = SavePath + "Save"+ stime+".JPG";image.Save(FileName.c_str(), Gdiplus::ImageFormatJPEG);
}

(3)后台执行c++ 让程序消失并后台运行 开机自动启动_Lo问我为什么看星星的博客-CSDN博客_c++ 锁定鼠标

需要代码

HWND hWnd = GetConsoleWindow();
int SetAutoRun() {LPCTSTR lpSubKey = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run";HKEY hKey;REGSAM flag = KEY_WOW64_64KEY;DWORD dwDisposition = REG_OPENED_EXISTING_KEY;LONG lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, lpSubKey, 0, KEY_ALL_ACCESS | flag, &hKey);if (ERROR_SUCCESS != lRet) return -1;char ExeFile[200];GetModuleFileName(NULL, ExeFile, 200);TCHAR* pchrName = ExeFile;lRet = ::RegSetValueEx(hKey, TEXT("后台截屏"), NULL, REG_SZ, (LPBYTE)pchrName, strlen(pchrName) * sizeof(TCHAR) + 1);if (ERROR_SUCCESS != lRet) return -1;::RegCloseKey(hKey);return 0;
}int main()
{SetAutoRun();int minute = 2; //间隔1分钟int second = minute * 60;long TimeSpan = 1000 * second;Timer t(Interval(TimeSpan), &CaptureScreen, true); t.Start();ShowWindow(hWnd, SW_HIDE);getch(); //不然一消失程序就结束了return 0;
}

VS2019 编译 完美运行。需要注意保存路径默认在e:\ ,发布时,注意需要gdiplus 库。

其他时间匹配以及保存路径 都可以写一个配置文件予以解决。

使用cereal 库 实现了json 配置文件读取,时间匹配也完成。

极简定时截屏代码C++相关推荐

  1. android开发截屏代码,android截屏代码:C++实现

    android截屏代码:C++实现 示例代码在: frameworks\base\services\surfaceflinger\tests\screencap\screencap.cpp /* * ...

  2. X11 Xlib截屏代码所遇问题及初步分析

    综合了两篇博客中的例程并做一定修改,得到了基于X11 Xlib的截屏代码. 两篇博客链接分别如下: X11 截图与鼠标事件-SkyMei777-ChinaUnix博客 xlib实现截图报错-编程语言- ...

  3. android长截屏代码,android长截屏原理及实现代码

    android长截屏原理及实现代码 发布时间:2020-08-31 06:55:16 来源:脚本之家 阅读:158 作者:Android笔记 小米系统自带的长截屏应该很多人都用过,效果不错.当长截屏时 ...

  4. js截屏代码_JavaScript网页截屏方法,你get到了嘛?

    之前我曾写过如何将canvas图形转换成图片和下载canvas图像的方法,这些都是在为这个插件做技术准备. 技术路线很清晰,将网页的某个区域的内容生成图像,保持到canvas里,然后将canvas内容 ...

  5. 【转】Android 音量键+电源键 截屏代码小结

    http://104zz.iteye.com/blog/1752961 原文地址:http://blog.csdn.net/hk_256/article/details/7306590 ,转载请注明出 ...

  6. js截屏代码_服务端浏览器截屏

    服务端浏览器截屏是结合 selenium + html2canvas 实现的通过在 Chrome 环境下生成图片. selenium是最广泛使用的开源Web UI自动化测试套件之一.本文中使用sele ...

  7. Windows定时截屏、后台自动截屏工具,带有密码保护功能 —— 定时执行专家

    目录 一.软件简介 二.使用教程 1.软件下载 2.软件的安装方法 3.无察觉自动截屏(例如:间隔每 10分钟,执行 1次) 一.软件简介 <定时执行专家>是一款制作精良.功能强大.简单易 ...

  8. l1-039 古风排版 20分 极简七行逻辑代码版

    7-6 古风排版 (20分) 中国的古人写文字,是从右向左竖向排版的.本题就请你编写程序,把一段文字按古风排版. 输入格式: 输入在第一行给出一个正整数N(<100),是每一列的字符数.第二行给 ...

  9. android截屏代码实现方法

    最近由于项目需要,在学习android系统.android是一个基于linux的专门针对手机平台的操作系统.当然,现在的android 3似乎也将进入平板电脑的市场.由于至今为止,大部分的智能手机采用 ...

最新文章

  1. linux卸载数据库后还在吗,oracle停止数据库后linux完全卸载oracle的详细步骤
  2. 第12章 样式(三)
  3. Django框架环境搭建遇到的问题
  4. junit4/5 getDefaultClassLoader()Ljava/lang/ClassLoader;
  5. bom .dom_MicroProfile 2.2 BOM导入支持
  6. linux 2.6 hash表作用,高性能分布式哈希表FastDHT介绍及安装配置
  7. linux nfs配置
  8. 图卷积神经网络入门详解
  9. [转]nonlocal和global
  10. 基本信息项目目标文档
  11. Duplicate spring bean id
  12. java 函数委托_Java反射实现.NET委托
  13. 初识python: 生成器并行(做包子,吃包子)
  14. 数分下第5讲(8.3节) 二次曲面方程和曲线方程
  15. Android—项目结构
  16. 模仿全能扫描王实现文档和证件扫描
  17. android电视投屏 源码,【精品工具】简单、流畅、易用的安卓android投屏软件
  18. 白帽子黑客:手把手教你如何在Kali使用ibus拼音输入法?
  19. 操作Windows文件夹时,弹出文件夹正在使用,操作无法完成【解决】
  20. 大二学生《Web编程基础》期末网页制作 HTML+CSS个人网页设计实例

热门文章

  1. LeetCode455——分发饼干
  2. 20200515省选模拟赛B、幻化成风(毒瘤容斥题+构造容斥系数+生成函数+hash状压DP+Trie树优化背包)
  3. js split 的用法
  4. opencv常见用法和opencv3->opencv4版本切换
  5. K8S node亲和与反亲和:affinity应用
  6. 2020-11-17 1)C标准库头文件 2)C ++标准库标头
  7. Nand Flash结构及错误机制
  8. linux进程优先级与nice,Linux之renice和nice调整进程的优先级
  9. XML的SAX解析以及DOM解析和SAX解析区别
  10. 传奇2私服XP下启动解决方法