
【C/C++编程】
文章平均质量分 66
C/C++编程点滴
重庆李四
追求卓越,过完一生
展开
-
Linux或Windows下判断socket连接状态
场景:客户端程序需要实时知道和服务器的连接状态。比较通用的做法应用层是采用心跳机制,每隔一端时间发送心跳能回复说明服务器正常。实际应用场景中,服务端和客户端并不是一家厂商的,比如说笔者这种情况,服务端是其他厂商,应用层协议没有心跳机制,客户端显示的连接状态需要客户端自己处理。笔者最开始使用的QTcpSocket进行socket连接,在客户端程序监听下面3个信息。原创 2024-03-01 11:59:46 · 1668 阅读 · 0 评论 -
Qt编程-QTableView同时冻结行和列
Qt编程-QTableView同时冻结行和列。如题,先看效果是不是你需要的。网上找到的代码片段要么不全要么不是想要的。如果你只需要需要冻结行或冻结列,请看上篇博客,代码更少一些。原创 2023-10-10 13:57:12 · 1593 阅读 · 2 评论 -
Qt编程-QTableView冻结行或冻结列或冻结局部单元格
Qt编程-QTableView冻结行或冻结列或冻结局部单元格。如题,先看效果是不是你需要的。网上找到的代码片段要么不全要么不是想要的。如果你需要同时冻结行和列的效果,请看下篇博客。原创 2023-10-10 13:56:08 · 2264 阅读 · 1 评论 -
Windows编程—杀死指定路径程序文件的进程
由于Windows命令 taskkill 无法通过程序文件的完整路径匹配来杀死指定进程,通过程序名称容易误杀进程,所有笔者做了一个简单的封装做了个mytaskkill.exe,用来杀死指定路径的程序文件的进程。支持Windows xp 及以上版本,用法为:mytaskkill.exe “C:\xxx1.exe” “C:\xxx2.exe” “C:\xxx3.exe”原创 2021-12-17 19:52:03 · 2536 阅读 · 2 评论 -
C/C++: OpenSSL实现https GET POST请求
前言笔者这里有需求,需要用C++实现 https 的GET、POST请求 以及GET下载文件 而且需要实现跨平台 在Linux、Windows都能正常运行。最好的是 只用一套代码 而不是根据具不同平台 跑不同代码,所以我们得找一个跨平台的支持https协议的库。都不用想,最好的当然是 OpenSSL啦。也有其他的比如libcurl 啥的,但是libcurl如果要支持https的也要链接OpenSSL了,还不如直接用OpenSSL。当然这里还有个不错的选择就是使用boost::asio库,但是笔者觉得使用上原创 2021-01-30 22:27:38 · 8636 阅读 · 28 评论 -
C++面试题-青蛙跳台阶的2种解法
文章目录前言实现代码结果验证前言分享一道算法面试题。题目描述如下:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法?当然各种编程语言都是可以实现的。这里我们用C++语法去完成。这道题难度属于中等偏下,考验面试这的基本而已。考查面试者有没有递归思想,如果会递归写法,考官也会继续问有没有更好的解法。思路如下:/*题目描述:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。思路:先找规律,n级台阶 :1 2 3 4原创 2020-12-09 20:31:46 · 1522 阅读 · 0 评论 -
Effective C++ 读后感
文章目录前言读后感结语前言从开始学习Effective C++ 到今天为止 第一遍学习完,历时42天。为什么说是第一遍学习完呢?因为后面肯定还有第二遍第三遍…复习与巩固。**谈谈为啥要学习这本书呢?**其实笔者很久之前都听说过这本书的大名,早早的都下载好了,这本书的pdf一直被尘封在我的笔记本上的Book目录。源于之前在北京某互联网教育公司的一次面试,问了很多问题 来源这本书,笔者没准备当然被虐的很惨。所以笔者当然要把这本书拿下。学习完这本书,你应该会对C++编程有一个更深刻的认识,当然也不限于面试,也原创 2020-12-06 21:57:44 · 1186 阅读 · 1 评论 -
C++:C++中public protected private关键字用法
C++:C++中public protected private关键字用法笔者这里主要针对C++中public protected private关键字做一个较全面的总结。首先public protected private关键字用于访问控制的,也被称为访问说明符。主要用途有2种。用法1:在class类(含struct结构体,struct在C++中是所有成员都公开的类)中 作为成员变量/成员函数的修饰符。用法2:在C++的继承体系中作为从继承修饰符使用。下面我们分开进行介绍。在class类中原创 2020-11-20 16:21:54 · 1363 阅读 · 0 评论 -
MFC使用http post请求上传文件
文章目录前言代码前言笔者在Windows编程开发时候,有个上传文件的需求,服务端给的接口是http接口,和网页上面 表单上传文件一样(form-data方式)。当然我们拿到这需求,一想 用Windows原生的API去做 肯定麻烦一点 当然也能做,再一想 我们用支持http协议的框架不就行了嘛,MFC、libcurl、OpenSSL等等应该很多。笔者比较熟悉的2个库,MFC和libcurl,所以决定用这2个库来做文件上传。和大家一样,刚开始觉的很简单,网上搜下然后改下就OK。但是笔者却花费了些时间才完成原创 2020-05-30 23:53:29 · 2759 阅读 · 0 评论 -
Windows编程—获取操作系统默认浏览器路径
文章目录前言分析代码前言笔者有需求,需要获取当前的默认浏览器的路径。网上的其他方法笔者没有去试。这里笔者采用的方式在win10 下是可行的,win7、winXp 没有测试。笔者使用 QQ电脑管家—>工具箱—>上网—>浏览器保护 进行默认浏览器设置 是不成功的。所以还是到 Win10 设置—>默认应用—>Web浏览器 进行设置是可行。分析笔者这里那 QQ浏览器...原创 2020-04-05 16:25:11 · 3142 阅读 · 1 评论 -
Windows编程—获取Chrome浏览器的安装目录
文章目录前言方式一说明代码方式二说明代码前言在Windows平台开发时,有时候需要唤起Chrome浏览器访问指定url, 这时就需要知道Chrome浏览器的安装路径了。笔者这里总结了2种方式,建议使用方式二。方式一说明方式一,我们可以使用 Chrome浏览器 桌面图标的快捷方式找到Chrome的安装路径。博主这里是:C:\Users\Lisi\AppData\Local\Google\C...原创 2020-04-05 01:33:26 · 6744 阅读 · 0 评论 -
C/C++:Windows编程—MFC基于CWnd自绘CListCtrl控件且带滚动条
文章目录前言效果图代码思路滚动条思路完整代码前言由于工作需要,需要自绘类似CListCtrl那种控件 而且每项能带类似按钮的点击事件。所以笔者去进行研究,费了点时间写了个简单的自绘窗口 顺带也研究了下滚动条。博主在网络搜索的时候经常遇到只有代码没有效果图,这样有意思吗,既然都写了 弄全一点不行吗。在这里也呼吁一下广大博友,写博客的时候都把效果图带上。我们也先看效果图。效果图代码思...原创 2020-02-16 00:42:25 · 1503 阅读 · 0 评论 -
C/C++:Windows编程—Hook IE浏览器实现URL拦截及更改(下)
Hook IE浏览器实现URL拦截及更改(下)前言接上一篇 C/C++:Windows编程—Hook IE浏览器实现URL拦截及更改(上),本节为了实现上一篇待优化部分。实现IE进程时时监控,当有新的IE进程打开时注入我们的动态库。如何使用时时监控IE进程呢?笨方法就是 开一个线程 一直去遍历 IE进程 发现有新的IE进程就注入。这种方法有点low,笔者当然不想用,所以在网络上寻找,有说在驱动...原创 2020-01-12 12:13:36 · 2343 阅读 · 1 评论 -
C/C++:Windows编程—IAT Hook实例(程序启动拦截)
C/C++:Windows编程—IAT Hook实例(程序启动拦截)前言+思路本文默认读者有IAT Hook的相关的基础知识了哈,记录笔者在IAT Hook实战中遇到到问题以及解决思路。笔者想实现一个功能能够拦截到程序的启动。经过调研,大多程序如果是通过双击或者鼠标启动的 一般都是有 Windows资源管理器explorer.exe进程进行创建的。最近刚好学习了IAT Hook就用IAT H...原创 2020-01-08 23:31:47 · 3480 阅读 · 6 评论 -
C/C++:Windows编程—Hook IE浏览器实现URL拦截及更改(上)
Hook IE浏览器实现URL拦截及更改前言+思路笔者这里有个需求,针对IE浏览器 用户访问URL 做一个判断,是否为 限制访问的url,如果是 在另一个软件上给与警告提示。笔者在拿到这个需求的时候也是网上一顿找,在csdn上找到一篇 hook IE 总结。这篇文章给我一些思路,获取IE浏览器访问的URL 那么需要知道 IE浏览器访问URL 用的那种方式,从这文章提示使用 WININET.dl...原创 2019-12-29 18:33:08 · 5282 阅读 · 2 评论 -
CEF3:https 请求返回状态码canceled
CEF3:https 请求返回状态码canceled客户端项目中浏览器内核用的cef3,最近在测试的时候 服务器配置的为https但是使用IP访问的。像如果 https服务器并没有完全安装正规的配置进行配置好,用浏览器直接访问经常会报一些 证书状态无效,证书作者 啥啥的问题,当然 直接用MFC的 CHttpFile 访问 一样也会报这些问题,如果是MFC中 我们一般是设置 安全参数 去忽略 一...原创 2019-11-25 23:46:39 · 2758 阅读 · 0 评论 -
C/C++:Windows编程—Inline Hook内联钩子(下)
前言在上节中介绍了 InlineHook 钩子函数,主要是通过jmp 目标地址(转为机器码E9 偏移量) 来实现的,是修改被Hook函数首地址处的 5个字节的内容。这里再介绍另一种方法,修改被Hook函数首地址处的7字节的内容。我们看下图的汇编指令之前是jmp 目标地址(5字节),这次是将目标地址放到 eax寄存器中 这里是2条汇编指令(00B417E4-00B417DF = 7字节)。他们...原创 2019-06-10 00:17:26 · 1817 阅读 · 0 评论 -
C/C++:Windows编程—Inline Hook内联钩子(上)
前言先介绍下Windows中的Hook技术。Hook是Windows中提供的一种用以替换DOS下“中断”的系统机制,中文译为“挂钩”或“钩子”。在对特定的系统事件进行hook后,一旦发生已hook事件,对该事件进行hook的程序就会收到系统的通知,这时程序就能在第一时间对该事件做出响应。Windows中的Hook技术的方法较多,常见的有Inline Hook、IAT Hook、EAT Hook ...原创 2019-06-10 00:12:34 · 4695 阅读 · 0 评论 -
C/C++:Windows编程—Windows RPC 传递自定义数据类型、自定义数据类型数组、指针数组
前言该篇博文不是讲Windows rpc入门的。是笔者在实际使用Windows RPC时 所遇到的问题,以及解决方法。笔者有这样的需求,需要从RPC Server获取大量数据,而且该数据是动态分配的。故此RPC Client在调用RPC Server方法是 需要动态获取空间。笔者在中文社区没有找到相关资料,最后只有去看官方文档,下面几个链接是官方文档。https://docs.microso...原创 2019-03-28 22:46:21 · 2217 阅读 · 0 评论 -
C/C++:Windows获取电脑机器指纹
介绍很多时候我们需要为一台Windows设备生成一个机器指纹来标识一台设备。当然标识设备最好的是与硬件相关的标识,应该硬件一般不会被改变。笔者参考了获取设备唯一标识这篇博客。笔者将使用下面几个字段进行机器指纹的生成。主板UUIDwmic csproduct get UUID唯一值,缺陷并不是所有的厂商都提供UUID(可以使用)CPUIDwmic cpu get processorid...原创 2019-03-07 21:58:46 · 7295 阅读 · 5 评论 -
MFC:移动对话框到右下角
代码在MFC中将dlg移动到右下角的代码如下:先通过SystemParametersInfo获取屏幕宽度,再获取当前对话框的长高,在使用MoveWindow就OK了// 移动到右下角void CMoveDlgTestDlg::OnBnClickedButton1(){ // TODO: 在此添加控件通知处理程序代码 RECT rectDesktop; SystemParameter...原创 2019-02-22 22:07:44 · 1210 阅读 · 1 评论 -
C++:gloox库进行协议扩展(使用自定义标签)
前言直接使用gloox库源码中examples下面的示例,采用开源的openfire搭建的xmpp的服务器,是可以直接进行连接、注册和消息推送。 使用AndroidPN作为xmpp服务器可以可以直接使用 gloox的示例进行注册,但是连接 和 消息推送不行。连接的问题咋们就不说了,咋们直接说 消息推送的问题。因为AndroidPN作为服务器 给客户端推送的消息是扩展了协议,所以直接使用示例代码...原创 2019-02-19 21:48:33 · 852 阅读 · 0 评论 -
Qt:Windows编程—代码注入
前言 这里所说的代码注入和上篇的DLL注入有类似之处。DLL文件的注入与卸载在上篇中都完成了,整个注入与卸载的过程其实就是让远程线程执行一次LoadLibrary函数或者FreeLibrary函数。远程线程装载或者卸载一个DLL文件,通过dllMain()调用DLL中具体功能代码,这样注入DLL以后就可以让DLL做很多事情了。 是否可以不依赖DLL文件直接向目标进程写入要执行的代码,完成特...原创 2019-02-01 14:58:23 · 2590 阅读 · 4 评论 -
Qt:Windows编程—DLL注入与卸载
前言这里说的DLL注入 是将我们指定的DLL注入到指定的进程中,DLL卸载也就是将指定进程中的DLL卸载下来。在Windows提供的API中有 CreateRemoteThread函数 见名知意 创建远程线程函数,这的远程指定的垮进程,让远程进程执行我们指定的线程回调函数。这就提供操作其他进程的契机。CreateRemoteThread 函数原型// 函数是不是和CreateThread非常...原创 2019-01-27 14:20:39 · 4732 阅读 · 8 评论 -
C/C++:Windows编程—调用DLL程序的2种方法
前言先简单介绍下DLL。DLL:Dynamic Link Library 动态链接库 是一个被其他应用程序调用的程序模块,其中封装了可以被调用的资源或函数。DLL 文件属于可执行文件,它符合Windows系统的PE文件格式,不过它是依附于EXE文件创建的的进程来执行的,不能单独运行。为了演示调用DLL程序的2种方法,我们先建一个简单的DLL程序。建一个简单的DLL程序IDE 使用vs2015...原创 2019-01-23 23:17:08 · 64189 阅读 · 2 评论 -
Qt:Windows编程—Qt实现进程管理
前言继续学window编程,学呀学呀 学无止境,学到Windows进程相关API了。利用相关的API使用Qt写界面实现了一个简单的进程管理。主要用到 进程的创建、进程的枚举、线程的枚举、DLL的枚举、进程提权等功能。相关API的介绍可以看 C/C++:Windows编程—创建进程、终止进程、枚举进程、枚举线程、枚举DLL界面先看看qt写的界面吧。代码创建进程// 创建进程void ...原创 2019-01-20 23:04:44 · 4699 阅读 · 0 评论 -
MFC:Socket编程—TCP服务端和多个客户端通信
前言MFC是微软基础类库,于 C++ 对于 C语言来说,MFC对于window API ,MFC 就相当于C++,window API 相当于C。MFC 封装了 window API 使用起来更加的方便。MFC中封装的socket 直接就有事件回调,就不需要我们自己去轮询 自己去处理,我们只需要写好对于的事件回调函数即可,系统帮我们进行调用 方便了很多,而且 不需要多线程就可以实现 单个TCP服...原创 2019-01-12 20:58:56 · 13454 阅读 · 36 评论 -
Qt:Windows编程—Qt实现本地服务管理
Qt实现本地服务管理前言本节将使用Windows的几个API,使用qt实现 本地服务 简单管理。这里简单介绍下服务。几乎每一种操作系统都有一种在系统启动时启动的进程机制,这种机制不会依赖于用户的交互。在Windows下,类似的基础称为Windows服务。服务是一种程序类型,它在后台运行,服务程序通常可以在本地和通过网络为用户提供一些功能,服务在操作系统启动时就会随之启动的程序。效果实现效...原创 2018-12-14 22:58:04 · 4781 阅读 · 1 评论 -
Qt:Windows编程—Qt实现注册表启动项管理
Qt实现注册表启动项管理前言Windows的开机启动项在很多地方都有设置,这次我们在注册表 子键"HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run" 这个位置也有 Windows的开机启动。这次我们用qt实现 开启启动项管理,有 启动项 添加、删除 功能。这里 简单说说 注册表相关的概念。注册表是Windows系...原创 2018-12-09 22:42:08 · 2050 阅读 · 0 评论 -
Qt:Qt实现飞秋拦截助手—ARP攻击
Qt:Qt实现飞秋拦截助手—ARP攻击前言继续我们的飞秋拦截助手开发,上篇是Qt:Qt实现飞秋拦截助手—Mac地址扫描器 ,本篇将介绍 如何进行ARP攻击,也叫ARP欺骗。我们知道本机有个ARP缓存表 存储的是IP地址和物理地址的映射 IP_A -> MAC_A 是一一对应的。我们这里还是拿 A、B、C 3台主机做比喻,A和B通信,C是攻击者。ARP攻击 就是,主机C 一直给 攻击目...原创 2018-12-07 15:19:30 · 2095 阅读 · 1 评论 -
Qt:Qt实现飞秋拦截助手—Mac地址扫描器
Qt实现飞秋拦截助手—Mac地址扫描器前言准备好了就开干,利用业余时间,开始着手写 飞秋拦截助手,按照Qt:Qt实现飞秋拦截助手—介绍 中的4步骤来走。4步骤中,Mac地址扫描器是第一步,因为网络传输中 最底层协议 就是网卡层,得到了局域网中的所有IP和对应的物理地址 才会有攻击的目标,拦截的对象。后面的ARP欺骗和飞秋消息拦截和飞秋欺骗会在这个基础上添加。效果什么都不说,先看看MAC地址...原创 2018-12-06 17:54:52 · 1625 阅读 · 0 评论 -
Qt:Qt实现飞秋拦截助手—介绍
Qt实现飞秋拦截助手—介绍前言以前看见有人在Linux下面实现过飞秋消息拦截、修改和转发功能,我呢 寻思在Windows平台使用Qt编写一个飞秋拦截工具,能够对飞秋消息进行拦截 修改 转发功能。当然别小瞧这个软件,软件虽小 五脏俱全。会用的Windows API ,WinPcap 库,ARP协议、IP 协议、UDP协议,字节对齐 等知识,用Qt编写当然大量会用到Qt的很多知识呗。我也是边查资...原创 2018-12-06 16:07:07 · 1012 阅读 · 1 评论 -
Qt:Qt实现Winsock网络编程—非阻塞模式下的简单远程控制的开发(WSAAsyncSelect)
Qt实现Winsock网络编程—非阻塞模式下的简单远程控制的开发(单线程)前言这边博客应该是 Qt实现Winsock网络编程—TCP服务端和客户端通信(多线程) 的姐妹篇,上篇博客中的socket通信中所用的Windows api函数 都是阻塞函数,而一般图形界面编程中的UI进程一般不能阻塞,所以上篇博客 采用的是多线程,将接受连接请求 和 通信的socket处理都放在单独的后台线程中,这样就...原创 2018-11-18 20:30:00 · 2575 阅读 · 2 评论 -
Qt:Qt实现Winsock网络编程—TCP服务端和客户端通信(多线程)
Qt实现Winsock网络编程—Tcp服务端和Tcp客户端通信(多线程)前言感觉Winsock网络编程的api其实和Linux下网络编程的api非常像,其实和其他编程语言的网络编程都差不太多。博主用Qt实现的,当然不想用黑窗口呗,有界面可以看到,由于GUI编程的话 一般UI进程不能阻塞,肯定需要多线来实现,在等待用户连接的时候accept,和客户端通信 等待消息的时候recv这些都是阻塞的 都...原创 2018-11-06 21:31:46 · 14851 阅读 · 7 评论 -
Qt:Qt使用WM_COPYDATA消息进行进程通信
Qt使用WM_COPYDATA消息进行进程通信如题,Qt使用WM_COPYDATA消息进行进程通信,这次我们使用windows相关api,来实现不同的 Qt窗口进程间的通信,使用的window的 WM_COPYDATA消息来实现。实现效果实现效果是 ,多个客户端 窗口向服务端窗口发送消息,服务端接受到消息后 给客户端一个回馈。效果截图:代码解读Qt中截获Windows消息,是使用qt...原创 2018-10-28 22:07:02 · 4547 阅读 · 4 评论 -
Qt:Qt使用鼠标模拟函数mouse_event和按键模拟函数keybd_even实现网页刷新功能
用Qt实现网页刷新功能前言在上一篇博客Qt:使用Qt实现网页自动刷新工具,使用了PostMassage函数 通过Windows的消息机制实现的网页刷新功能。因为消息种类太多,不方便使用和记忆,所以Windows下的大部分消息可以使用对应等价的API函数,不必直接通过消息进行沟通。这节我们使用mouse_event鼠标模拟函数和keybd_event键盘模拟函数继续来实现网页刷新功能。界面界...原创 2018-10-26 22:21:44 · 6071 阅读 · 5 评论 -
Qt:Qt实现网页自动刷新工具
使用Qt实现网页刷新工具前言最近在看一本《C++黑客编程揭秘和防范》 ,刚开始学,感觉书还不错,有讲一些windows API,不过里面的工具都是使用VC++写的,界面部分使用的mfc的一些API,感觉太不友好来,笔者 想的是 界面部分当然应该可以用,当下桌面端最流行的 Qt 来写呀,windows api相关的可以直接 引入相关的头文件即可。说的容易,做的难,以前没学过windows ap...原创 2018-10-24 23:32:10 · 2345 阅读 · 0 评论 -
C/C++面试题—序列化二叉树
题目描述请实现两个函数,分别用来序列化和反序列化二叉树。题目思路在剑指offer中是采用的流的形式进行编写,这里将二叉树序列化为字符串,反序列化的时候将字符串反序列化为二叉树。序列化的时候用了 C++中现成的string数据结构,就不用担心空间容量的问题了。题目代码#include <iostream>#include <string>#in...原创 2018-06-10 10:36:19 · 1727 阅读 · 0 评论 -
C/C++面试题—合并两个排序的链表【递归和循环两种方式】
题目描述输入两个单调递增的链表,输出两个链表合成后的链表, 当然我们需要合成后的链表满足单调不减规则。解题思路这道题既可以采用递归的方式,也可以采用循环的方式。 2者的思路都是殊途同归的。 合并后的链表头结点指向值域较小的头结点,然后较小的链表往后移动继续和另外一个链表的头结点值域进行比较。 直到将其中一个链表链接完毕,再链接另外一个链表。解题代码...原创 2018-06-02 22:41:09 · 902 阅读 · 0 评论 -
C/C++面试题—链表中倒数第k个结点
题目描述输入一个链表,输出该链表中倒数第k个结点。解题思路顺数第1个结点和顺数第k个结点 倒数第k个结点和倒数第1个结点 神马关系?顺数第k个结点指针走到倒数第1个结点时候,顺数第1个结点指针刚好走到倒数第k个结点!解题代码/*题目描述输入一个链表,输出该链表中倒数第k个结点。*/#include <iostream>#include "Li...原创 2018-06-02 22:28:32 · 520 阅读 · 0 评论