C++
文章平均质量分 53
狐帝
山不在高,有仙则名;窝不怕破,有狐则灵。
展开
-
利用msys2安装clang和llvm编译器
很多文章介绍了如何从clang官网安装clang和llvm,不过最后都会说缺少include和lib,需要用别的方法。其实用msys2就可以下载基于MinGW-w64项目的clang和llvm。步骤如下:原创 2021-06-01 19:51:53 · 11078 阅读 · 2 评论 -
制作可被svchost调用的服务(下)
上一篇简要介绍了如何制作一个可被svchost调用的服务,本篇介绍如何使得这个服务可以被svchost识别并调用。svchost会到注册表的HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Svchost项中搜索其子项,每一个子项都是一个svchost服务组,svchost项有很多键值,每个键对应一个服务组,其值是该服务组下所有的服务所以,首先要决定我们自己的服务放在哪个服务组里,这里假设是netsvcs组。在nets原创 2021-05-23 12:49:12 · 818 阅读 · 0 评论 -
制作可被svchost调用的服务(上)
一个被svchost调用的服务应该做成DLL,所以必须定义DLLMain函数,做为动态库的入口。DLLMain的代码框架如下:BOOL APIENTRY DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved){ switch (ul_reason_for_call) { case DLL_PROCESS_DETACH: // 将服务状态设置为SERVICE_CONTROL_原创 2021-05-23 10:51:47 · 1013 阅读 · 3 评论 -
一个简单的基于C++的免main函数的主程序框架类
教家里娃儿学习C++语言时,为了讲解C++的封装、继承、多态性等,写了个简单的主程序框架类。应用程序只要从这个主程序框架类派生出子类,实现其run(...)方法,然后定义一个子类实例即可。抽象应用程序类AbstractApplication类的代码如下:// absapp.h#ifndef __ABSAPP_H#define __ABSAPP_H/** * AbstractApplication 应用程序的抽象框架类。 * 应用程序主类应该从此类派生,override其纯虚函数run,随原创 2021-05-03 09:57:18 · 612 阅读 · 0 评论 -
一个简单小巧的日志类
其实网上可以找到很多日志库,不过大多太大、考虑得太细致,所以索性自己写个最适合自己用的。类定义logger.h如下:// logger.h#ifndef __LOGGER_H#define __LOGGER_H#include <string>/** * Logger 通用日志类。 * 日志文本格式为:yyyy-MM-dd hh:mm:ss:sss - log-message-text, message-code, extension-code. *原创 2021-05-03 07:59:24 · 241 阅读 · 0 评论 -
利用Win32 API获取当前登录用户名的几种方法比较
方法一:使用GetUserName函数。GetUserName可以获得创建当前进程的用户名,其函数原型是:BOOL GetUserNameA(LPSTR lpBuffer, LPDWORD pcbBuffer);其中,lpBuffer指向存放用户名的字符数组,pcbBuffer在调用之前需要赋予lpBuffer指向的缓冲区的长度,调用完成后会返回用户名的长度。代码示例如下:string getLoginUsernameByApi(){ char username[1024];原创 2021-05-02 15:36:27 · 4225 阅读 · 0 评论 -
用boost::locale::conv转换字符编码时的坑!
这两天编写一个网络通讯程序的时候,遇到字符编码在GBK和UTF-8之间转换的问题,打算用boost::locale::conv里面的函数来转换。代码很简单,调用boost::locale::conv::between即可。在eclipse cdt中编码,用MinGW作为编译器,在家里的电脑上编译链接调试,一切OK!第二天,在单位电脑上写了同样的代码,按照同样的方式设定了project属性,链接的时候却出错了,提示:undefined reference to `libiconv_open'und原创 2021-04-28 22:17:12 · 1809 阅读 · 1 评论 -
Windows下双显示器截屏方法
网上的Windows环境下截屏的源代码很多,但是看到的都是只能适应单显示器,无法截取桌面扩展到双显示器情况下的完整屏幕。过查找资料和摸索,发现问题的关键就在于正确获得截屏的长宽尺寸。通常,计算屏幕实际大小可以用:HWND hWnd = GetDesktopWindow();RECT re;GetWindowRect(window, &re);int width = re.rig...原创 2020-04-08 18:43:14 · 6260 阅读 · 0 评论 -
C++程序利用Windows API获取GUI程序的主窗口
首先要根据进程名称获取进程的pid:int ProcessUtilities::lookupProcesses(const std::string &procName, std::vector<PROCESSENTRY32> &pes){ string lowProcName = procName; StringUtility::lower(lowP...原创 2020-03-30 21:17:32 · 2685 阅读 · 5 评论 -
笔记:STL的thread库应用
最近研究了一下STL的thread库,做为学习成果,写了几个封装类,把thread封装起来,提供了sleep和stop方法,做为对thread的补充。基类是AbstractThread,定义了start、stop、sleep三个公开的虚函数。start方法用于启动线程代码运行,stop方法用于终止线程代码,sleep方法供AbstractThread的子类使用,可用来暂停一段指定的时间。A...原创 2020-02-14 21:09:20 · 741 阅读 · 0 评论 -
在Eclipse CDT中添加非标准库
默认情况下,在CDT中开发C/C++程序时,如果只是用C/C++标准库,无需任何额外设置。不过,如果要开发的程序使用了非标准库,例如WinSock库,那就得在project中单独设置。鼠标右击project名,在弹出菜单中选择Properties,弹出project属性设置对话框,在左侧视图找到其中的C/C++ Build ——> Settings,先在右侧视图的上方Configuratio...原创 2020-02-01 15:50:28 · 318 阅读 · 0 评论 -
类型无关的C语言通用冒泡排序函数
最近教小家伙C语言,很快就要教到排序了,所以写了个通用的冒泡排序程序。这个函数可以对任意类型数组中的数据排序。需要用到的数据类型和函数声明如下(sort.h):#ifndef __SORT_H#define __SORT_H#include <stdlib.h>#ifndef __cplusplustypedef enum{ false, true,...原创 2019-12-14 12:08:32 · 854 阅读 · 4 评论 -
在Eclipse CDT中利用Build Configuration构建有多个main函数的程序
进来在为家里宝宝编写C/C++教程讲义,想用Eclipse做个project,里面每个文件是一个演示程序或者练习的答案。由于每个源代码文件都是完整的,都会有main函数,因此就会导致链接时出错,提示main函数重复定义。看到Eclipse有多build target的功能,就考虑使用这个功能来为每个源代码文件构建一个target来解决main函数重复定义的问题。查了很多资料,都说要用分别创建不同的...原创 2019-12-08 09:35:46 · 1517 阅读 · 0 评论 -
用MinGW编译boost的方法
最近下载了boost源代码,想在Code::Blocks里面用。C::B配置的配置的编译器是TDM-MinGW-4.7.1,打算用这个版本的gcc来编译boost。看了boost的文档,说是首先运行bootstrap.bat,参数为gcc,然后运行b2.exe即可。可是在运行b2.exe时,总是提示找不到ml.exe。最后虽然也能完成编译,可是总是缺少一些库。我就纳闷,这个ml.exe明明原创 2012-10-30 20:49:52 · 1548 阅读 · 2 评论 -
基于USBDeview的自制USB设备监管系统实现(1)——系统架构
现在各企业对于信息系统中的信息安全都开始重视,对于USB接口的移动设备的监管也越发严格。市面上有很多平台化的USB设备监管工具,多数是包含在主计审计系统中的一项功能。不过这些商业化的工具平台价钱都很贵,在企业里完整部署的话少则数十万元,多则上百万元,对中小企业来说是一笔不小的开销。另外,主机审计工具出于自我防护的需要,一般都要接管/注入操作系统内核,弄得不好就会影响到终端的稳定性。而某些靠行政力量...原创 2019-09-21 19:53:25 · 743 阅读 · 2 评论 -
基于USBDeview的自制USB设备监管系统实现(2)——USBDeview工具
上一章提到,本系统中采用了usbdeview程序作为USB Device Monitor程序。usbdeview是NirSoft出品的一款USB设备控制的小程序,可以列出当前系统曾经插入的所有USB设备的详细信息。这是个绿色软件,可以随用随装,使用非常方便。程序只有一百多KB大小,运行时占用3MB多点内存,资源消耗很少。下图是usbdeview运行时的界面:可以发现,usbdevi...原创 2019-05-04 14:41:27 · 2134 阅读 · 0 评论 -
基于USBDeview的自制USB设备监管系统实现(3)——USB S/N Checker
在本系列文章的第一章已经说明了USBS/N Checker程序的作用,本章将详细说明这个程序的编制思路,并附完整的源代码。由于历史原因,USBS/N Checker在实现时被命名为usbdevicelogger(以下简称UDL)。UDL用C/C++语言写成,其main函数如下:int main(int argc, char* argv[]){ loadConfig(__c...原创 2019-05-04 18:19:14 · 695 阅读 · 0 评论 -
基于USBDeview的自制USB设备监管系统实现(4)——Guard Process
Guard Process是一个守护进程,目的是为了防止用户有意或无意间终止常驻的usbdeview进程。本文中,这个守护进程命名为USB Monitor Service(以下简称“ums”),做为Windows系统服务运行。ums会定时扫描系统进程,检查usbdeivew进程是否处于运行中。若发现当前进程列表中没有usbdeview,则会自主运行usbdeview.exe。以下是ums的完整...原创 2019-05-09 20:21:38 · 744 阅读 · 0 评论