简单截图软件的编写——心得总结

作者因工作需要无法使用QQ截图功能,遂决定自行开发一款类似工具。利用Visual Studio 2005和C++,借助Windows API,实现了创建透明窗口及截图保存等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在公司不能用QQ,简单快捷的QQ截图就不能用了,面对工作中有时需要截屏记录的数据,时而感到烦躁不已。于是在某晚下定决心,自己编写一个截屏的小程序,以QQ截图为蓝本,打造山寨版QQ截图。

 


开发工具为:Visual Studio 2005

代码托管到了GitHub上:win32-screen-capture

语言用的是C++,此程序用纯Windows API编写。

 


一开始的想法就是要做成跟QQ截图差不多的玩意儿,所以在设计思路上参考了QQ的做法。首先QQ是通过点击按钮或触发快捷键来启动截图这个功能,在功能启动之后,会给屏幕“蒙”上一层深灰色的“膜”。随后通过鼠标左键的点击拖拽来确定截图区域,在确定截图区域之后就可以将该区域的图像截取并保存。



我的猜想是QQ在收到“启动截图”功能的消息时会创建一个新的窗口,此窗口为透明且永远在最前,这就是我们观感上那层灰色的“膜”。然后由此窗口来接受鼠标的划定区域消息,此区域通过在膜窗口中点击鼠标左键和拖拽创建矩形而确定。在划定区域后,所要做的事情就比较简单了,主要有两件:1. 将位图信息写入剪切板。2. 将截图区域保存为常见图像格式。

 


好了,到目前为止,我已经完成了对QQ截图设计思路的分析,接下来的一步就是要想办法实现了。

 


首先要解决的问题是如何创建“膜”窗口,此窗口为透明且无标题栏。

我在网上搜索了一下如何建立透明窗口的文章,得到了以下结果:


 



在使用以上代码创建正常窗口后,在WM_CREATE响应代码中插入以上函数,即可实现窗口的无标题透明化。其中SetLayeredWindowsAttributes函数的功能是调整窗口的透明度,trans_degree即为窗口透明程度。0x80000为WS_EX_LAYERED属性,在为窗口设置该属性后才能将其变为透明。

 


接下来问题就是要保存截下来的图片,用以下代码实现:


 


至此,这个小截图工具就能够基本实现了,如何通过鼠标消息获取矩形区域在这里不再赘述。最后完成的程序能够截图保存为.BMP格式,但是图像未写入剪切板,此功能尚待添加。并且QQ截图圈定区域后能显示出该区域原本的像素值,此功能在最后完成的程序中也未实现。

 


这个小程序虽然很简单,但还是能够Windows程序设计的一些基本元素均有体现,但是功能尚未完善,还是那句老话,学习无止境,编程无黎明!

 

### RC4加密算法实验心得与总结报告编写技巧 RC4是一种流密码算法,广泛应用于各种安全协议中,如SSL/TLS。以下是关于如何撰写RC4加密算法实验的心得、总结和报告的一些专业建议。 #### 1. 实验背景介绍 在撰写RC4加密算法的实验报告时,应先简要说明RC4的历史及其重要性。作为一种经典的对称密钥流密码算法,它由Ron Rivest设计并于1987年首次发布[^5]。其核心特点是速度快且实现简单,在许多场景下被广泛应用。 #### 2. 算法原理描述 RC4的核心机制包括两个主要阶段:初始化向量(Key-Scheduling Algorithm, KSA)和伪随机数生成器(Pseudo-Random Generation Algorithm, PRGA)。 - **KSA**:此过程将密钥转换为初始状态数组S,并通过一系列交换操作打乱该数组顺序[^6]。 - **PRGA**:基于已初始化的状态数组S生成连续字节序列作为密钥流,用于异或运算完成数据加解密处理[^6]。 ```python def ksa(key): """ Key Scheduling Algorithm (KSA) """ key_length = len(key) s = list(range(256)) j = 0 for i in range(256): j = (j + s[i] + key[i % key_length]) % 256 s[i], s[j] = s[j], s[i] return s def prga(s): """ Pseudo-random generation algorithm (PRGA) """ i = 0 j = 0 while True: i = (i + 1) % 256 j = (j + s[i]) % 256 s[i], s[j] = s[j], s[i] t = (s[i] + s[j]) % 256 yield s[t] def rc4_encrypt(key, plaintext): """ Encrypt using the RC4 algorithm """ s = ksa([ord(c) for c in key]) keystream = prga(s) ciphertext = ''.join(chr(ord(c) ^ next(keystream)) for c in plaintext) return ciphertext.encode('latin-1') def rc4_decrypt(key, ciphertext): """ Decrypt using the RC4 algorithm """ decrypted_text = rc4_encrypt(key, ciphertext.decode('latin-1')) return decrypted_text ``` 上述代码展示了完整的RC4加密/解密流程[^7]。 #### 3. 实验数据分析 对于RC4加密算法的研究,可以通过模拟测试来验证其实现效果。例如: - 使用Python或其他编程语言实现RC4算法并运行多次试验; - 对比明文与密文差异,分析安全性特点; - 探讨可能存在的漏洞(如弱密钥问题)及改进措施[^8]。 #### 4. 结果讨论 根据实际编码经验得出结论——尽管RC4曾经非常流行,但由于近年来发现的安全隐患(比如偏倚攻击),现代应用更多倾向于采用AES等替代方案[^9]。然而,研究RC4仍然具有教育意义,有助于理解基础密码学概念和技术发展脉络。 #### 5. 总结陈词 综上所述,撰写一份详尽而专业的RC4加密算法实验心得需涵盖理论依据、具体实施步骤以及最终成果评估等内容。这不仅能够加深个人对该主题的理解程度,同时也为进一步探索信息安全领域奠定坚实的基础。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值