![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Windows实训
文章平均质量分 95
艺术人生666
这个作者很懒,什么都没留下…
展开
-
Windows Practice_闹钟(一)_简易记事本
Windows界面实现一个简易的记事本// PoEduNotepad.cpp : 定义应用程序的入口点。//#include "stdafx.h"#include <string>#include "PoEduNotepad.h"#define MAX_LOADSTRING 100// 1 有一个窗口类,并且是在系统中注册的,也就说有两个窗口只需要注册一次就可以了。窗口类中有很多信息,这会决定W原创 2017-08-23 01:13:30 · 375 阅读 · 0 评论 -
Windows Practice(八)_MFC
简单的Spy++实现从Spy++运行的效果来看,我们不难推测出,它是根据鼠标移动的位置来进行窗口的查找。那么是什么API呢?那就需要靠万能的谷歌和百度了。源码实现: 解决方案结构如下: 运行效果如下图: 主要代码如下:// Spy++DemoDlg.cpp : 实现文件//#include "stdafx.h"#include "Spy++Demo.h"#include "Spy++原创 2017-09-08 01:31:33 · 430 阅读 · 0 评论 -
Windows Practice_文件_文件分割器(二)
文件分割器实现时注意的几点分割文件的头信息结构体的设计,如果里面需要存储字符串的信息,我们必须使用字符串数组来存储,而不能使用类似于CString、string等字符串对象来存储,因为使用这些对象在存储的时候还好,可以知道它的长度进行文件的写入,但是在读取的时候就会出现问题了,因为不知道读取多少。 解决方法有两个: 1. 在头文件信息结构体中加上构造函数和一些其它的辅助函数(这样就相当于类的功能原创 2017-09-17 11:02:33 · 358 阅读 · 0 评论 -
Windows Practice第3方库的学习方式
界面库的使用这里我们主要是开源的duilib为例来简单的学习一下第3方界面库的使用。 目前比较流行的库是一般只做一件事,这样做的目的是使得我们的库变得很轻,而不像MFC那样的笨重。 duilib的文档给出了类的继承关系图,如下所示: 迅雷的界面库不是开源的,但是做的十分的炫酷。在使用第3方库的时候一定要先看它的文档,否则我们是无法使用的。文档里面一般会有例子和使用说明。总之,这些第3方库都需要原创 2017-09-08 22:49:12 · 175 阅读 · 0 评论 -
Windows Practice_文件_文件分割器(三)
两种开发方式瀑布式开发 有需求 -> 分析 -> 建模 -> 编码 -> 维护 所有的类全部是自己设计编码的敏捷开发 需求 -> 编码 -> 重构(建模) -> 编码 需求总是变化的 -> 代码也需要变化 所谓的敏捷开发就是拿着开源项目修改为自己的项目,随着时间的推移,改变的越来越多的内容,最后可能将原来开源项目中的所有内容都改为自己的内容。当前类的性质, 类方法及类成员设计的时候原创 2017-09-17 23:33:20 · 304 阅读 · 0 评论 -
Windows Practice_文件_文件基础操作
Windows中文件在Windows编程中,少不了打交道的肯定是文件,但是我们绝大多数接触到的都是文件的表象。 在Windows中有各种各样的文件,大致有: - exe dll:可执行文件 - txt:文本文件 - jpg bmp gif: 图像图形文件 - lnk: 快捷方式文件 - rar 7z zip iso:压缩文件 - avi mp4 rmvb 影音文件这些文件实原创 2017-09-10 10:50:42 · 444 阅读 · 0 评论 -
Windows Practice_文件_注册表操作
Windows中的注册表我们会好奇,为什么在我们双击一个文件的时候,会用合适的程序来运行呢?比如说.jpg文件在双击的时候就会用图片查看软件打开,这是为什么呢? 因为文件的后缀名帮助操作系统如何打开,也可以自定义。 我们知道notepad可以打开.txt文件,但是notepad不能打开.mystyle的后缀名,如果我们想用notepad打开这样的后缀名的文件,那么应该对操作系统进行设置,具体的说原创 2017-09-10 13:30:44 · 354 阅读 · 0 评论 -
Windows Practice_文件_内存映射(一)
大文件数据操作我们以全国开放数据(数据纯属伪造)为例,它的文件格式是csv,也是经常使用的一种文件存储格式,它是以逗号和换行来进行区分数据段和行来进行数据的区分。 今天我们把一个文件中的2000000条数据进行处理。文件操作的几种方式#include <stdio.h>#include <Windows.h>#include <clocale>const UINT MAXLINESIZE =原创 2017-09-10 13:39:31 · 403 阅读 · 0 评论 -
Windows Practice_Dll&Hook_DetourHook库
DetoursDetours是经过微软认证的一个开源软件,下载地址,虽然是开源软件,但是它又分成了两个版本,分别是:Detours Professional 3.0 is available for commercial use.Detours Express 3.0 is available for immediate download under a no-fee license for r原创 2017-10-03 01:13:41 · 698 阅读 · 0 评论 -
Windows Practice_Socket
TCP/IP在世界各地,各种各样的电脑运行着各自不同的操作系统,从而为大家服务,这些电脑在表达同一种信息的时候使用的方法千差万别。就好像圣经中上帝打乱了各地人的口音,让他们无法合作一样。计算机使用者意识到,计算机只是单兵作战并不能发挥太大的作用。也只有把它们联合在一起,电脑才会发挥出它最大的潜力。于是人们就想方设法的用电线或者光纤将电脑连接到了一起。 但是简单的连到一起是远远不够的,就好像语言不通原创 2017-10-03 11:37:57 · 354 阅读 · 0 评论 -
Windows Practice_Dll&Hook_封装IAT Hook
进程保护器的实现本程序实现了一个简单的暴力的进程保护器,其原理也很简单,就是修改导入表,挂钩TerminateProcess函数,因为这个函数可以远程无条件的结束其它进程,所以我们要挂钩这个函数。 因为每一个程序都有可能结束要保护的程序,所以我们必须以Dll的形式注入到每一个进程中,这就涉及到注入的问题了,而Windows给我们提供了一个简单的全局挂钩的函数,即SetWindowsHook函数。原创 2017-09-24 12:32:19 · 391 阅读 · 0 评论 -
Windows Practice_Dll&Hook_IAT Hook
PE结构PE结构时Windows中一个比较大的结构体,它的整个结构体图如下所示: 给MessageBoxW函数挂钩我们自己的函数就是我们挂钩之后,调用MessageBoxW函数后,会进入到我们自己的函数中执行我们自己的代码。挂钩还原之后,还可以正常的调用MessageBoxW函数,这就是这个测试程序的功能。// IATHookDemo.cpp : 定义控制台应用程序的入口点。//#includ原创 2017-09-24 11:30:55 · 298 阅读 · 0 评论 -
Windows Practice_Socket 错误封装
UDP简单通讯例子需要注意的是: inet_addr函数如果使用的是VS2014以上的库编译时,会报错,所以我们需要选择兼容XP的编译方式,具体设置在项目属性中设置。如图所示: 服务端// SocketUDPServer.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <WinSock2.h>#include <Windows.h>#i原创 2017-10-03 12:45:08 · 325 阅读 · 0 评论 -
Windows Practice_文件_文件分割器(一)
文件分割的意义有以下几点需要进行文件分割:以前的硬盘格式是FAT32,也是意味着最大的内存放的单个文件是4GB,如果文件超过4GB,就需要进行分割成小于4GB的文件才能存储到硬盘上;网络虚度比较慢,并且还会出现中断,一旦中断,下载的文件就会失效。我们在做分割时候,除了考虑分割外,还需要考虑合并,否则分割也就没有意义了。CFile函数注意事项CFile默认打开的是文本格式,这不符合文件风格的要求原创 2017-09-17 01:08:45 · 538 阅读 · 0 评论 -
Windows Practice_内存映射_加载BMP
什么是BMP,为什么我们会经常使用这种图片格式?微软给我们专门提供了一个加载位图的LoadBitmap函数,这说明bmp格式图片在Windows中使用的比较多。 我们知道没一种文件都有它自己的文件结构,那么bmp就是一种位图形式的文件格式。既然bmp也是一种文件,那么我们也可以使用CreateFile函数进行打开。bmp文件格式详解先看下面一个简单的例子:void CFileMapBMPDlg::原创 2017-09-17 00:20:23 · 440 阅读 · 0 评论 -
Windows Practice_闹钟(二)_简易记事本
Windows 编程学习方法对于常用的几千个Windows API,我们是记不住的,所以我们需要常用常查,用多了自然而然的就熟悉了,有的API记得不是很清楚我们查文档,上网查资料就可以解决了。简易记事本的完善这个记事本支持在窗口上任意位置输入字符串,还有行与行以及字符与字符之间的对齐。// Notepad.cpp : 定义应用程序的入口点。//#include "stdafx.h"#includ原创 2017-08-29 01:41:46 · 416 阅读 · 0 评论 -
Windows Practice_闹钟(三)_作业讲解和GDI概述
作业讲解在使用GDI的时候,需要安装原版的Windows系统,不可以安装精简版的或者GOST版的系统,因为这些系统把GDI去掉了。 GetWindowRect获取指定窗口的边框矩形的尺寸; GetClientRect获取窗口客户区的大小。窗口的客户区为窗口中除标题栏、菜单栏之外的地方。 **DPI缩放**Dots Per Inch,每英寸点数。GDI概述在Windows中GDI是graphic原创 2017-08-29 01:43:29 · 330 阅读 · 0 评论 -
Windows Practice_文件搜索器(二)_多线程调试
多线程如何进行调试呢?上一节中我们滥用多线程,导致扫描结果不正确,并且好费时间也增加,但是,有一点我们也是需要注意的,多线程以后肯定使用的比较较多的,我们怎样才能很好的对多线程进行调试呢? visual studio集成开发环境给我们提供了一个线程调试的功能。界面如下所示: 当启动的线程比较多的时候,设置断点可能会导致电脑卡死 所以我们在调试多线程的时候,不能在开启很多条线程之后让它中断下来,原创 2017-08-19 09:41:31 · 290 阅读 · 0 评论 -
Windows Practice_文件搜索器(三)_线程池
线程池由于上一节滥用多线程,导致扫描时间变长,并且结果也不正确,原因就在于开启的线程太多太多了,导致很多时候开启线程失败,并且我们那样做的方式也不对,因为一个文件夹中也就几十个文件,扫描一个文件夹也就是1um,而开启一个线程就需要2us,关闭一个线程也需要2us。一个C盘有好几万个文件夹,也就是说我们需要开启好几万个线程,天哪!!!这简直就是一个天文数字!!!这样一来,开启新线程反而降低了效率,所以原创 2017-08-19 10:12:34 · 336 阅读 · 0 评论 -
Windows Practice_文件搜索器(一)递归
背景由于Windows自带的文件搜索的搜索速度比较慢,所以我们需要自己写一个文件搜索器来提高文件的扫描速度。文件搜索需要用到两个Windows API,一个是FindFirstFile,另一个是FindNextFile函数。 首先我们先来看一下这两个函数的原型:HANDLE WINAPI FindFirstFile( _In_ LPCTSTR lpFileName,原创 2017-08-16 18:32:37 · 591 阅读 · 0 评论 -
Windows Practice_文件搜索器(四)_封装文件扫描器
类的封装虽然前面几节实现了一个文件扫描器,但是总的来说都比较不好,因为我们无法对这些代码重用,所以我们要对文件扫描器进行封装。 但是一般的对于查找器的封装有两种查询方式,一种是阻塞的方式,另一种是非阻塞的方式,相信大家对这两种工作方式都已经很熟悉了。但是我还是要简单的介绍一下吧! 阻塞方式就是程序在执行这个函数的时候是被卡主的,直到所有的文件找完之后才退出; 非阻塞方式执行这个函数时候,会立即原创 2017-08-23 01:07:43 · 367 阅读 · 0 评论 -
Windows Practice_闹钟(四)_GDI对象概述
GDI对象概述在使用GDI绘制的时候,我们需要注意两套坐标体系,一个是对于当前界面程序的原点坐标,一个是对于桌面(系统)的原点坐标。 所以以后在看到和DC相关的函数时,它都代表和DC有关的坐标,比如TExtOut函数,它的就是和DC相关的函数。 TextOut在指定位置输出指定长度的字符串。函数原型如下:BOOL TextOut( _In_ HDC hdc, _In_ int原创 2017-08-29 01:44:52 · 271 阅读 · 0 评论 -
Windows Practice_闹钟(五)_GDI绘制工具
GDI的应用简单画图软件,实现了画笔、直线、圆以及贴图的功能。 解决方案如下图所示: // Paint.cpp : 定义应用程序的入口点。//#include "stdafx.h"#include <commdlg.h>#include <Windowsx.h>#include "DrawDemo.h"#define MAX_LOADSTRING 100typedef enum tagD原创 2017-09-07 01:46:27 · 321 阅读 · 0 评论 -
Windows Practice_闹钟(六)_控件对象
Windows API封装思想MFC之所以好用,那是因为MFC把Windows所有API都封装起来了,我们在使用的时候就会很方便,所以我们以后在使用Windows API的时候就需要适当的将一些Windows API封装起来,这样使用起来就会很方便了。Win32 API创建一些列的控件Win32 API也可以使用CreateWindow函数来创建像MFC里面的按钮(Button)、编辑框(Edit)原创 2017-09-07 20:16:33 · 309 阅读 · 0 评论 -
Windows Practice_Dll&Hook_消息钩子
DllDll就是我们通常所说的动态链接库(Dynamic Link Library),它和应用程序在本质是没有任何区别的,它也是一个可执行文件,它们都有相同的PE结构。 但是两者在应用上面还是有一些区别的,Dll一般作用exe应用程序的补充体,它是一个模块,用来被exe文件加载。 在Windows中有一部分exe文件也是能够被加载的,比如.oxc后缀的控件格式。为什么大部分应用程序喜欢使Dll?原创 2017-09-24 10:20:39 · 366 阅读 · 0 评论 -
Windows Practice_Dll&Hook_Hook是什么?
Hook是什么?Hook能够改变软件的功能,比如添加新功能和修改原功能的执行流程。使用Hook是针对于没有源码的情况下才使用的,如果有源码,就没必要Hook了。Hook是如何改变程序的流程的程序块程序块结构(program block struction)是一种程序结构形式。这种结构将整个程序分为若干个信息快或子程序块,使程序变得清晰,便于阅读和修改。 所以程序中的每一块,都是Hook的一个点。作原创 2017-09-24 11:06:48 · 339 阅读 · 0 评论 -
Windows Practice(七)_MFC
简单计算器实现注意事项由于计算器中有很多的窗口,那么我们就需要使用很多次CreateWindow函数,但是我们在使用的时候,有一些参数是固定不变的,所以我们就有必要对CreateWindow函数进行封装。 还有,如果我们使用了c++中的string类的时候,就不需要使用c语言的字符串拼接函数了,直接使用string中的+=等符号重载就可以了,否则我们失去了一些运行效率,但是也没有得到开发效率的提升原创 2017-09-08 00:42:12 · 279 阅读 · 0 评论 -
Windows Practice_作业 Easy QQ的实现
QQ原理对于qq这样的聊天软件来说,简单的来讲,它有一个服务端、多个客户端,因为服务端只有一个,所以也就没什么区别,而所有的客户端也是一模一样。 每个客户端只能通过向服务端发送消息,服务端通过解析,从而决定下一步怎样做。 比如一个客户端1想给客户端2发送一条“Hello”的消息,服务器收到后,就会将这条消息发送给客户端2(这里所说的都是在线的,不在线的情况暂不考虑)。WSAAsyncSelect原创 2017-10-03 14:20:12 · 442 阅读 · 0 评论