【C语言实现花屏效果并打包程序为exe可执行文件】
说明:该程序为临摹改良(😀)作品,源地址C/C++屏幕恶搞程序
效果展示

上代码
#include <windows.h>#define NUM 11451LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);int main() // Renamed WinMain to main
{static int iKeep[NUM][4];HDC hdcScr, hdcMem;int cx, cy;HBITMAP hBitmap;HWND hwnd;int i, j, x1, y1, x2, y2;if (LockWindowUpdate(hwnd = GetDesktopWindow())){hdcScr = GetDCEx(hwnd, NULL, DCX_CACHE | DCX_LOCKWINDOWUPDATE);hdcMem = CreateCompatibleDC(hdcScr);cx = GetSystemMetrics(SM_CXSCREEN) / 10;cy = GetSystemMetrics(SM_CYSCREEN) / 10;hBitmap = CreateCompatibleBitmap(hdcScr, cx, cy);SelectObject(hdcMem, hBitmap);asrand((int)GetCurrentTime());for (i = 0; i < 2; i++)for (j = 0; j < NUM; j++){LockWindowUpdate(hwnd = GetDesktopWindow());if (i == 0){iKeep[j][0] = x1 = cx * (rand() % 10);iKeep[j][1] = y1 = cy * (rand() % 10);iKeep[j][2] = x2 = cx * (rand() % 10);iKeep[j][3] = y2 = cy * (rand() % 10);}else{x1 = iKeep[NUM - 1 - j][0];y1 = iKeep[NUM - 1 - j][1];x2 = iKeep[NUM - 1 - j][2];y2 = iKeep[NUM - 1 - j][3];}BitBlt(hdcMem, 0, 0, cx, cy, hdcScr, x1, y1, SRCCOPY);BitBlt(hdcScr, x1, y1, cx, cy, hdcScr, x2, y2, SRCCOPY);BitBlt(hdcScr, x2, y2, cx, cy, hdcMem, 0, 0, SRCCOPY);}DeleteDC(hdcMem);ReleaseDC(hwnd, hdcScr);DeleteObject(hBitmap);}return 0;
}
代码会在桌面上随机选取一些区域,并将它们的内容进行快速的随机移动和交换,产生一种视觉上的动态效果。
原理:
- 定义了一个较大的二维数组
iKeep来存储一些坐标信息。 - 通过
GetDesktopWindow获取桌面窗口句柄,使用相关的图形设备接口(GDI)函数进行操作。 CreateCompatibleDC和CreateCompatibleBitmap创建与屏幕兼容的设备上下文和位图。- 使用
rand函数生成随机数来确定移动区域的起始和结束坐标。 - 通过
BitBlt函数在不同的设备上下文之间复制位图,实现区域的移动效果。
这边也改良了一个加速版本
通过减少循环次数和每次操作之间的等待时间来加快随机移动的速度:
#include <windows.h>
#include <ctime>#define NUM 5000 // 减少循环次数以加快速度LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);int main()
{static int iKeep[NUM][4];HDC hdcScr, hdcMem;int cx, cy;HBITMAP hBitmap;HWND hwnd;int i, j, x1, y1, x2, y2;srand(static_cast<unsigned int>(time(nullptr))); // 初始化随机数生成器if (LockWindowUpdate(hwnd = GetDesktopWindow())){hdcScr = GetDCEx(hwnd, NULL, DCX_CACHE | DCX_LOCKWINDOWUPDATE);hdcMem = CreateCompatibleDC(hdcScr);cx = GetSystemMetrics(SM_CXSCREEN) / 10;cy = GetSystemMetrics(SM_CYSCREEN) / 10;hBitmap = CreateCompatibleBitmap(hdcScr, cx, cy);SelectObject(hdcMem, hBitmap);for (i = 0; i < 1; // 将循环次数从 2 减少为 1i++){for (j = 0; j < NUM; j++){LockWindowUpdate(hwnd = GetDesktopWindow());if (i == 0){iKeep[j][0] = x1 = cx * (rand() % 10);iKeep[j][1] = y1 = cy * (rand() % 10);iKeep[j][2] = x2 = cx * (rand() % 10);iKeep[j][3] = y2 = cy * (rand() % 10);}else{x1 = iKeep[NUM - 1 - j][0];y1 = iKeep[NUM - 1 - j][1];x2 = iKeep[NUM - 1 - j][2];y2 = iKeep[NUM - 1 - j][3];}BitBlt(hdcMem, 0, 0, cx, cy, hdcScr, x1, y1, SRCCOPY);BitBlt(hdcScr, x1, y1, cx, cy, hdcScr, x2, y2, SRCCOPY);BitBlt(hdcScr, x2, y2, cx, cy, hdcMem, 0, 0, SRCCOPY);// 此处可以添加一些短暂的暂停来控制速度,例如 Sleep(1) 表示暂停 1 毫秒// Sleep(1); }}DeleteDC(hdcMem);ReleaseDC(hwnd, hdcScr);DeleteObject(hBitmap);}return 0;
}
将其打包成可执行程序
当然,把代码写出来,想整人的话还得研究怎么用,所以就得把程序打包
我用的是Visual Studio所以就以VS为例
按照以下步骤进行:
第一步:点击 扩展》管理扩展

第二步:搜索Installer,找到第一个微软的那个,然后安装它

下载好之后你需要关闭VS,然后会弹出一个安装程序,一直下一步跟着安装好就行,安装好之后再次打开VS
第三步:在当前的“解决方案” 右键》添加》新建项目

在新建项目这里搜索“setup”,选择第一个Setup Project

选择在setup下的Detected Dependencies,在右侧的Application Folder上找到Add,点击右侧的“项目输出”

弹出的窗口中选择“主输出”即可,点解“确定”,下一步

第四步:生成打包文件
右击 setup 在弹出来的菜单中选择重新生成即可

在资源管理器中选择

进入Debug文件夹,这里的都是安装程序

OK
相关文章:
【C语言实现花屏效果并打包程序为exe可执行文件】
说明:该程序为临摹改良(😀)作品,源地址C/C屏幕恶搞程序 效果展示 上代码 #include <windows.h>#define NUM 11451LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);int main() // Renamed WinMain to main {static int iKeep[NU…...
数据结构——排序(2):选择排序+交换排序
目录 一、选择排序 (1)直接选择排序 ①思路 ②过程图示 ③代码实现 ④代码解释 ⑤优化 1.代码实现 2.过程图示 3.代码解释 4.注意 ⑥直接选择排序的复杂度 (2)堆排序 ①注意 ②代码实现 二、交换排序 (…...
jenkins升级踩坑记录
1. 直接用java 1.8版本启动最新版jenkins.war,直接失败 2. 下载java 11启动,依然失败,换成java17版本可以启动,但会报错 解决报错1: java.io.IOException: Failed to load: Parameterized Remote Trigger Plugin (Pa…...
mysql笔记第二篇
平时业务开发,大部分业务逻辑是使用sql还是代码编写呢? 这个每个公司可能要求不同,其实是每个公司负责人根据公司业务制定的规定。或者根本没有规定,每个负责单个项目的人领到需求直接开整,sql一把梭导致后面其他人维护…...
Facebook的区块链技术:提升数据安全与隐私保护
去中心化的优势 随着数字化时代的快速发展,数据安全和隐私保护已成为全球范围内备受关注的话题。Facebook作为全球最大的社交平台之一,正在积极探索如何通过区块链技术来提升数据的安全性和用户的隐私保护。区块链技术以其去中心化、不可篡改和透明的特…...
⌈ 传知代码 ⌋ Visual SLAM函数
💛前情提要💛 本文是传知代码平台中的相关前沿知识与技术的分享~ 接下来我们即将进入一个全新的空间,对技术有一个全新的视角~ 本文所涉及所有资源均在传知代码平台可获取 以下的内容一定会让你对AI 赋能时代有一个颠覆性的认识哦&#x…...
Vue组件之间的通信
一、通信方式 Props 和 Events:通过父组件传递 props 给子组件,子组件使用 $emit 发送事件到父组件。Event Bus:使用一个中央事件总线来跨组件通信。Vuex:使用 Vuex 进行全局状态管理,以便在任何组件间共享状态。Prov…...
【AI 绘画】模型转换与快速生图(基于diffusers)
AI 绘画- 模型转换与快速生图(基于diffusers) 1. 本章介绍 本次主要展示一下不同框架内文生图模型转换,以及快速生成图片的方法。 SDXL文生图 2. sdxl_lightning基本原理 模型基本原理介绍如下 利用蒸馏方法获取小参数模型。首先&#x…...
甄选范文“论软件设计方法及其应”软考高级论文系统架构设计师论文
论文真题 软件设计(Software Design,SD)根据软件需求规格说明书设计软件系统的整体结构、划分功能模块、确定每个模块的实现算法以及程序流程等,形成软件的具体设计方案。软件设计把许多事物和问题按不同的层次和角度进行抽象,将问题或事物进行模块化分解,以便更容易解决…...
leetcode线段树(2940. 找到 Alice 和 Bob 可以相遇的建筑)
前言 经过前期的基础训练以及部分实战练习,粗略掌握了各种题型的解题思路。现阶段开始专项练习。 描述 给你一个下标从 0 开始的正整数数组 heights ,其中 heights[i] 表示第 i 栋建筑的高度。 如果一个人在建筑 i ,且存在 i < j 的建筑…...
用于不平衡医疗数据分类的主动SMOTE
一、主动学习如何应用于不平衡数据的处理 首先,主动SMOTE不是像经典的SMOTE那样从训练集中随机选择一个样本作为生成合成样本的轴心点,而是通过不确定性和多样性采样来智能地进行样本选择,这是主动学习的两种技术。 在数据不平衡的情况下&…...
linux文件更新日期与系统日期比较
项目说明: 要获取linux系统中某目录下最新文件的修改时间并与当前系统时间进行比较,可以使用以下步骤: 使用 ls 命令获取最新文件的修改时间。 使用 date 命令获取当前时间。 计算时间差并打印结果。 实例脚本如下: #!/bin/…...
leetCode - - - 哈希表
目录 1.模拟行走机器人(LeetCode 874) 2.数组的度(LeetCode 697) 3.子域名访问次数(LeetCode 811) 4.字母异位词分组(LeetCode 49) 5.小结 1.常见的哈希表实现 2.遍历Map 1.模…...
NGINX自动清理180天之前的日志
需求描述 日志每天会以天为单位产生一个日志,不清理的话会越来越多。这里写一个Lua自定定时清理日志目录下的日志文件。 依赖安装 安装 lfs 模块 yum install luarocks yum install lua-develluarocks install luafilesystem 创建模拟旧文件 创建了一个1月的旧…...
jackson 轻松搞定接口数据脱敏
一、简介 实际的业务开发过程中,我们经常需要对用户的隐私数据进行脱敏处理,所谓脱敏处理其实就是将数据进行混淆隐藏,例如下图,将用户的手机号、地址等数据信息,采用*进行隐藏,以免泄露个人隐私信息。 如…...
Nginx 正则表达式与rewrite
目录 一、正则表达式 二、rewrite 2.1 rewrite简述 2.2 rewrite 跳转 2.3 rewrite 执行顺序 2.4 rewrite 语法格式 三、location 3.1 location 类别 3.2 location常用匹配规则 3.3 location优先级 3.4 示例说明 3.5 匹配规则总结 3.6 三个匹配规则定义 四、实战…...
tekton什么情况下在Dockerfile中需要用copy
kaniko配置如下 如果docker中的workDir跟tekton中的workDir不一致需要copy。也可以通过mv,cp达到类似效果...
第九届世界渲染大赛在哪里提交作品呢?
自第九届世界渲染大赛开放投稿以来,已经过去了10天。在这段时间里,众多CG爱好者已经完成了他们的动画创作。然而,许多参赛者对于如何提交他们的作品仍然感到困惑。接下来,让我们一起了解具体的投稿流程和入口,确保每位…...
fastjson(autoType)反序列化漏洞
1. 温少和他的fastjson 阿里巴巴的 FastJSON,也被称为 Alibaba FastJSON 或阿里巴巴 JSON,是一个高性能的 Java JSON 处理库,用于在 Java 应用程序中解析和生成 JSON 数据。FastJSON 以其卓越的性能和功能丰富的特点而闻名,并在…...
Java入门基础16:集合框架1(Collection集合体系、List、Set)
集合体系结构 Collection是单列集合的祖宗,它规定的方法(功能)是全部单列集合都会继承的。 collection集合体系 Collection的常用方法 package com.itchinajie.d1_collection;import java.util.ArrayList; import java.util.HashSet;/* * 目…...
XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...
C++实现分布式网络通信框架RPC(3)--rpc调用端
目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...
模型参数、模型存储精度、参数与显存
模型参数量衡量单位 M:百万(Million) B:十亿(Billion) 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的,但是一个参数所表示多少字节不一定,需要看这个参数以什么…...
centos 7 部署awstats 网站访问检测
一、基础环境准备(两种安装方式都要做) bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats࿰…...
电脑插入多块移动硬盘后经常出现卡顿和蓝屏
当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时,可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案: 1. 检查电源供电问题 问题原因:多块移动硬盘同时运行可能导致USB接口供电不足&#x…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...
相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...
稳定币的深度剖析与展望
一、引言 在当今数字化浪潮席卷全球的时代,加密货币作为一种新兴的金融现象,正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而,加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下,稳定…...
Yolov8 目标检测蒸馏学习记录
yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...
