【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;/* * 目…...

黑马Mybatis
Mybatis 表现层:页面展示 业务层:逻辑处理 持久层:持久数据化保存 在这里插入图片描述 Mybatis快速入门 
Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...

SCAU期末笔记 - 数据分析与数据挖掘题库解析
这门怎么题库答案不全啊日 来简单学一下子来 一、选择题(可多选) 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘:专注于发现数据中…...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...

【单片机期末】单片机系统设计
主要内容:系统状态机,系统时基,系统需求分析,系统构建,系统状态流图 一、题目要求 二、绘制系统状态流图 题目:根据上述描述绘制系统状态流图,注明状态转移条件及方向。 三、利用定时器产生时…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)
宇树机器人多姿态起立控制强化学习框架论文解析 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一) 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...
C# SqlSugar:依赖注入与仓储模式实践
C# SqlSugar:依赖注入与仓储模式实践 在 C# 的应用开发中,数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护,许多开发者会选择成熟的 ORM(对象关系映射)框架,SqlSugar 就是其中备受…...

Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

Springboot社区养老保险系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,社区养老保险系统小程序被用户普遍使用,为方…...
Pinocchio 库详解及其在足式机器人上的应用
Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库,专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性,并提供了一个通用的框架&…...