自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(117)
  • 资源 (6)
  • 收藏
  • 关注

原创 QT添加图标、打包应用程序

Qt添加图标以及打包

2023-02-10 11:24:33 1000 1

原创 ScreenShot

截取当前目录的全屏c++

2022-11-10 09:04:06 390

原创 查看电脑的相机和麦克风名称

查看电脑的相机和麦克风,使用ffmpeg打开相机和麦克风

2022-10-11 10:30:25 409

原创 sqlite多线程并发

sqlite在同一个进程里面多线程并发

2022-08-16 21:20:29 688

原创 虚函数讨论

c++虚函数是否需要实现

2022-08-16 21:19:41 300

原创 获取windows锁屏消息

获取windows锁屏状态

2022-08-11 17:24:35 738

原创 uml学习笔记

uml的类图,以及时序图相关笔记

2022-08-10 15:39:00 274

原创 windows的commonfiles

获取common files的时候建议从注册表获取

2022-06-29 18:14:27 544

原创 AppData文件夹下Local,Locallow和Roaming

Appdata下有三个子文件夹local,locallow,roaming的具体含义

2022-06-27 10:36:53 8020

原创 关闭SQLite3中的journal暂存档

相信很多使用SQLite3当做数据库的人都会一个现象,那就是当SQLite3有做写入的动作时,SQLite3会自动产生一个名为"数据库名称-journal"的暂存档。这是做什么用的呢?答案是用来Rollback ,换句话说,就是当数据写入数据库有失败动作时,透过journal档案予以复原到未更动前(原始)数据,来确保数据完整与一致性。如果在每次写入的时间很长或频繁的进行数据库写入情况下,因系统(主机)电力不稳或突然断电时,那么下次重新启动,而journal档案若存在,则在开启SQLite数据库时,若发现有

2022-05-23 10:43:46 1482

原创 c+11新特性-thread

1.std::thread类成员函数:(1) get_id:获取线程ID,返回一个类型为std::thread::id的对象。(2) joinable:检查线程是否可被join。检查thread对象是否标识一个活动(active)的可行性线程。缺省构造的thread对象、已经完成join的thread对象、已经detach的thread对象都不是joinable。(3) join:调用该函数会阻塞当前线程。阻塞调用者(caller)所在的线程直至被join的std::thread对象标识的线程执行结束

2022-05-15 16:08:28 566

原创 基于CS模式的共享内存与事件

基于CS模式的共享内存与事件//service.cpp#include <windows.h>#include <iostream>using namespace std;#define BUF_SIZE 4096 //size of Share memory File mapping#define FM_RECV_NAME "Global\\Send" //name of the file mapping to receive #de

2022-05-13 22:00:52 142

原创 进程间通信-互斥锁

1.CreateMutex()//创建一个互斥体,已经存在会直接返回句柄OpenMutex()//打开一个互斥体WaitForSingleObject()//尝试加锁ReleaseMutex()//解锁2.进程间互斥通过互斥锁的名称进行3.如果是服务进程与普通进程进行通信要注意!!!!!!!!!!!!!!!!!!!HANDLE hNutex = CreateMutex(NULL, FALSE, L"Local\\eee"); //创建本地内核对象 HANDLE hNutex = Create

2022-04-26 15:17:10 602

转载 声明为全局变量

声明为全局变量C++中定义全局变量是应该尽量在.cpp文件中定义,而不要在.h 文件中 定义,定义好了之后,可以在.h文件中利用extern关键字进行声明。如果在.h文件中定义的话,多层包含可能会引起重复定义的错误。下面是一个示例:在g_bash.cpp中定义全局变量:// g_bash.cpp#include “g_base.h”int g_TicketCount = 0; // 定义全局变量并初始化在g_bash.h文件中利用extern关键字进行声明:// g_bash.h#ifnd

2022-04-20 23:15:26 2266

原创 windows 系统开启的端口调研

WINDOWS常用端口列表1.windows常见端口端口号的范围是从1~65535。其中1~1024是被RFC 3232规定好了的,被称作“众所周知的端口”(Well Known Ports);从1025~65535的端口被称为动态端口(Dynamic Ports),可用来建立与其它主机的会话,也可由用户自定义用途。一些常见的端口号及其用途如下:21端口:FTP 文件传输服务22端口:SSH 端口23端口:TELNET 终端仿真服务25端口:SMTP 简单邮件传输服务53端口:DNS 域名解

2022-04-20 14:42:49 952

原创 vs中的多字节与unicode

ANSI(即MBCS): 为多字节字符集,它是不定长表示世界文字的编码方式。ANSI表示英文字母时就和ASCII一样,但表示其他文字时就需要用多字节(在处理中文字符时 使用双字节方式)。ANSI字符采用8bit,能表示256种字符,表示26个英文字母是绰绰有余的,但是表示汉字,韩国语,日语等有着成千上万个字符的非西方字符肯定就不够了。Unicode: 不管是英文字符还是中文字符都是采用双字节方式表示。比如字符 ‘A’ 在 ASCII 下面用一个字节表示,而在Unicode下面用两个字节表示,其中高字节用

2022-02-27 16:24:28 818

原创 sqlite3加密版

sqlite3加密版1.lib、dll 在github上的下载地址https://github.com/rindeal/SQLite3-Encryption2.加密接口相关说明// 解密或用于第一次加密int sqlite3_key(sqlite3 *db, const void *zKey, int nKey);// 重设密码int sqlite3_rekey(sqlite3 *db, const void *zKey, int nKey);sqlite3_key是输入密钥,如果数据库已加

2022-02-22 15:31:16 1716

原创 sqlite编译

1、下载sqlite3源码:http://www.sqlite.org/download.html主要是sqlite-amalgamation-XXXXXXX.zip、sqlite-dll-win32-x86-XXXXXXX.zip、sqlite-dll-win32-x64-XXXXXXX.zip动态库编译:ps:如果没有特殊要求,可直接使用下载的sqlite-dll-*********.zip内的dll,那如果不放心就自己编译。1、使用vs2010创建win32工程,然后选择DLL和空项目,正常情

2022-01-28 18:26:11 904

原创 修改注册表的值

#include<iostream>#include <string>#include <vector>#include <windows.h>#include <wincrypt.h>#include <Windows.h>#include <iostream>#include "shellapi.h"#include <locale>#include <codecvt>#inc

2022-01-07 15:31:38 944

原创 客户端软件增量更新

增量更新使用到一个开源库bsdiff,bsdiff是一个差分算法,原理是旧文件跟新文件对比,尽可能多的利用old文件中已经有的内容,尽可能少的加入新的内容来构建new文件。通常的做法是对旧文件和新文件做字符串匹配或者使用hash技术提取公共部分,然后把新文件的剩余部分打成patch包(差分包中记录着新内容相对旧内容的偏移地址),在Patch阶段中用copying和insertion两个操作把旧文件和patch文件合成新文件。增量更新的流程: 在服务器端,使用bsdiff工具把旧的apk和新的apk进

2022-01-07 10:37:45 2781

原创 生成快捷方式

void MakeShortCut() { HRESULT hr = CoInitialize(NULL); if (SUCCEEDED(hr)) { IShellLink* pisl; hr = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (void**)&pisl); if (SUCCEEDED(hr)) { IPersistFile* pIPF;

2022-01-07 10:12:48 99

原创 自删除c++代码

void InitFile::DeleteApplicationSelf(){ char szCommandLine[MAX_PATH + 10]; //设置本进程为实时执行,快速退出。 SetPriorityClass(GetCurrentProcess(), REALTIME_PRIORITY_CLASS); SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_TIME_CRITICAL); //通知资源管理器不显示本程序,当然如果程

2021-12-28 17:35:28 2191

转载 vs中能编译通过,但是会有红色下划线提示未定义标示符问题

项目能编译通过,但是代码中会有红色下划线提示未定义标示符。就连BOOL TRUE FALSE等都会有下划线。这通常是该代码文件包含在项目文件夹的子文件夹中。解决办法是配置包含项目目录即可:打开项目属性-》配置属性-》C/C++常规-》附加包含目录-》填入:$(ProjectDir)...

2021-11-18 14:09:51 455

原创 vs2019开发linux的cmake项目

开发环境:vs2019+Ubuntu 20.04.3 LTS linux环境配置1.ubuntu服务器设置允许root用户登录修改ssh配置文件sudo vim /etc/ssh/sshd_config后进入配置文件中修改PermitRootLogin后的默认值为yessudo service ssh restart 重新登录即可2.opnssh 用于vs进行远程连接:安装命令sudo apt-get install openssh-server4.安装C++ 编译器 gdb CMa

2021-11-11 17:28:10 2102

原创 日志写法(带时间)

#include <windows.h>#include <stdio.h> /// <summary>/// 写日志文件/// </summary>/// <param name="msg"></param>/// <param name="value"></param>void CwriteLog(std::string msg) { SYSTEMTIME sys; GetLocalTi

2021-10-28 17:44:16 141

原创 KMP算法

#include <iostream>#include <cstring>#include <string>#include <set>#include <map>using namespace std;void BuildPatchMatchTable(int* partMatchTable, char* findstr){ if (findstr == NULL) return; partMatc

2021-10-25 19:37:28 73 1

原创 WMI技术介绍和应用

1.WMI技术介绍和应用——WMI概述https://fangliang.blog.csdn.net/article/details/8424317总结:WMI由三部分组成: WMI Consumers(WMI使用者) WMI Infrastructure(WMI基础结构)---WMI基础结构是Windows系统的系统组件。它包含两个模块:包含WMI Core(WMI核心)的WMI Service(WMI服务)(Winmgmt)和WMI Repository(WMI存储库)。 Manage

2021-10-25 00:36:03 769

原创 SSH 公钥 私钥的理解

https://zhuanlan.zhihu.com/p/134349361

2021-09-17 15:27:36 114

转载 Windows 下 根据进程名获取进程ID 以及该进程下所有窗口的句柄

#include <windows.h>#include <stdint.h>#include <tlhelp32.h>#include <stdio.h>#include <iostream>#include <vector>typedef struct EnumHWndsArg{ std::vector<HWND>* vecHWnds; DWORD dwProcessId;}EnumHWndsArg

2021-09-16 17:15:36 3623

转载 Windows 下 根据进程名获取进程ID 以及该进程下所有窗口的句柄

#include <windows.h>#include <stdint.h>#include <tlhelp32.h>#include <stdio.h>#include <iostream>#include <vector>typedef struct EnumHWndsArg{ std::vector<HWND>* vecHWnds; DWORD dwProcessId;}EnumHWndsArg

2021-09-16 17:14:59 1454

原创 C++11 unique_ptr、shared_ptr 以及 weak_ptr 智能指针

1.引言在实际的 C++ 开发中,我们经常会遇到诸如程序运行中突然崩溃、程序运行所用内存越来越多最终不得不重启等问题,这些问题往往都是内存资源管理不当造成的。比如:有些内存资源已经被释放,但指向它的指针并没有改变指向(成为了野指针),并且后续还在使用;有些内存资源已经被释放,后期又试图再释放一次(重复释放同一块内存会导致程序运行崩溃);没有及时释放不再使用的内存资源,造成内存泄漏,程序占用的内存资源越来越多。针对以上这些情况,很多程序员认为 C++ 语言应该提供更友好的内存管理机制,这样就可以将精

2021-09-08 21:45:08 114

原创 C++11 nullptr:初始化空指针

C++11 nullptr:初始化空指针1.NULL 并不是 C++ 的关键字,它是 C++ 为我们事先定义好的一个宏,并且它的值往往就是字面量 0(#define NULL 0)。C++ 中将 NULL 定义为字面常量 0,虽然能满足大部分场景的需要,但个别情况下,它会导致程序的运行和我们的预期不符。2.#include <iostream>using namespace std;void isnull(void *c){ cout << "void*c" &

2021-09-08 21:08:32 542 1

原创 C++11引用限定符的用法

C++11引用限定符的用法C++11 新添加了引用限定符。所谓引用限定符,就是在成员函数的后面添加 “&” 或者 “&&”,从而限制调用者的类型(左值还是右值)。const 和引用限定符修饰类的成员函数时,都位于函数的末尾。C++11 标准规定,当引用限定符和 const 修饰同一个类的成员函数时,const 必须位于引用限定符前面。需要注意的一点是,当 const && 修饰类的成员函数时,调用它的对象只能是右值对象;当 const & 修饰类的

2021-09-06 20:32:17 279

原创 C++11 constexpr和const的区别详解

C++11 constexpr和const的区别详解1.const 用于为修饰的变量添加“只读”属性;2.而 constexpr 关键字则用于指明其后是一个常量(或者常量表达式),编译器在编译程序时可以顺带将其结果计算出来,而无需等到程序运行阶段,这样的优化极大地提高了程序的执行效率。3.C++ 11标准中,为了解决 const 关键字的双重语义问题,保留了 const 表示“只读”的语义,而将“常量”的语义划分给了新添加的 constexpr 关键字。因此 C++11 标准中,建议将 con

2021-09-06 18:02:38 600 2

转载 C++ 11 标准for循环

C++ 11 标准中,除了可以沿用前面介绍的用法外,还为 for 循环添加了一种全新的语法格式,如下所示:for (declaration : expression){//循环体}其中,两个参数各自的含义如下:declaration:表示此处要定义一个变量,该变量的类型为要遍历序列中存储元素的类型。需要注意的是,C++ 11 标准中,declaration参数处定义的变量类型可以用 auto 关键字表示,该关键字可以使编译器自行推导该变量的数据类型。expression:表示要遍历的序列,常见

2021-09-06 16:07:32 616

原创 C++POD 类型

POD 类型一般具有以下几种特征(包括 class、union 和 struct等):没有用户自定义的构造函数、析构函数、拷贝构造函数和移动构造函数。不能包含虚函数和虚基类。非静态成员必须声明为 public。类中的第一个非静态成员的类型与其基类不同,例如:class B1{};class B2 : B1 { B1 b; };class B2 的第一个非静态成员 b 是基类类型,所以它不是 POD 类型。在类或者结构体继承时,满足以下两种情况之一:派生类中有非静态成员

2021-09-06 15:47:18 159

原创 VS 2019 编译程序在其它电脑运行报丢失VCRUNTIME140D.dll 【终极解决方案】

VS 2019 编译程序在其它电脑运行报丢失VCRUNTIME140D.dll 【终极解决方案】https://blog.csdn.net/bai_ge_i_yin/article/details/108755221?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_title~default-0.no_search_link&spm=1001.2101.3001.4242...

2021-09-06 11:25:28 1089

原创 将十六进制的字符串转换成十进制整数

/// <summary>/// 将十六进制的字符串转换成十进制整数/// </summary>/// <param name="s"></param>/// <returns></returns>int HexCovertDEC(const char s[]){ int i, m, temp = 0, n; m = strlen(s);//十六进制是按字符串传进来的,所以要获得字符串长度 for (i = 0;i &

2021-09-02 20:57:05 1182

原创 string转LPCTSTR类型

LPCTSTR不是一个类型,而是两种类型:LPCSTR和LPCWSTR其中之一。会根据你当前程序是否使用UNICODE字符集来变成那二者之一。如果使用UNICODE字符集,则LPCTSTR = LPCWSTR,如果使用Multi-Byte字符集,则LPCTSTR = LPCSTR。//Multi-Byte编码下, string转LPCSTR(LPCTSTR)类型: string str = "hello, I'm string";LPCSTR strtmp1 = str.c_str(); //

2021-09-02 20:09:45 7600

原创 vector中erase去除重复数据

int sFindSameName(vector<SOFTINFO> softVector, string name){ int count = 0; auto iter = softVector.begin(); //注册表 for (; iter != softVector.end(); iter++) { if (((*iter).m_strSoftName == name)) { count++; } } return count;}void sS

2021-09-02 15:01:52 258

myBSDiff.rar

增量更新相关代码(bsdiff算法)

2022-01-07

logger-master.zip

linux日志文件系统

2021-12-08

vs2019开发linux的cmake项目.md

vs2019开发linux的cmake项目.md

2021-11-11

iconParse.rar

将ICON文件进行解析并生成分辨率最好的一张图片

2021-08-26

pictureCompress.rar

CxImage库下载_编译_图片截取_压缩_调整大小_格式转换_C++

2021-08-10

MFCTools.exe

获取详情页的产品名称、产品版本、获取数字签名的使用者字段信息的mfc工程

2021-07-07

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除