C++
文章平均质量分 58
Leen
程序猿,潜力无限
展开
-
C++(QT)画图行车
通过鼠标在窗口上点击形成多个点的连线,绘制一辆汽车沿着绘制的连线轨迹前进。要求连线点数大于20.可以通过清除按钮清除已经绘制的连线,并可以重新绘制一条轨迹连线。当车辆行驶到轨迹终点时,自动停止。(汽车实在可用方块代替)原创 2023-09-04 16:47:44 · 1933 阅读 · 1 评论 -
C++小知识
只能在(堆/栈)上生成对象的类static用法C++虚函数表原创 2022-10-30 17:08:04 · 111 阅读 · 0 评论 -
Windows 父进程欺骗技术
Windows 父进程欺骗技术,其实就是创建一个进程,指定其他进程为这个新创建进程的父进程。通过CreateProcessA进行欺骗对父进程进行欺骗有许多方法,本文中着重介绍通过调用CreateProcessA函数进行实现,该方法最简单也最常用。CreateProcessA函数允许用户创建新进程,默认情况下,会通过其继承的父进程完成创建。该函数有一个名为“lpStartupInfo”的参数,该参数允许使用者自定义要使用的父进程。该功能最初用于Windows Vista中设置UAC。lpStar原创 2020-09-29 11:22:42 · 1909 阅读 · 0 评论 -
Porting a Driver from UMDF 1 to UMDF 2
This topic describes how to port a User-Mode Driver Framework (UMDF) 1 driver to UMDF 2. You can start with a UMDF 1 driver that uses Sources/Dirs files (not a Visual Studio project), or you can conve转载 2017-11-28 17:19:43 · 419 阅读 · 0 评论 -
C++和双重检查锁定模式(DCLP)的风险
原文链接多线程其实就是指两个任务一前一后或者同时发生。1 简介当你在网上搜索设计模式的相关资料时,你一定会找到最常被提及的一个模式:单例模式(Singleton)。然而,当你尝试在项目中使用单例模式时,一定会遇到一个很重要的限制:若使用传统的实现方法(我们会在下文解释如何实现),单例模式是非线程安全的。程序员们为了解决这一问题付出了很多努力,其中最流行的一种解决方法转载 2018-01-09 14:34:30 · 1278 阅读 · 1 评论 -
使用代码禁用设备管理器里面的鼠标设备
使用代码禁用设备管理器里面的鼠标设备禁用一个设备的方法有很多,但是能够跟设备管理器里面状态同步的方法并不多。本文是使用SetupDi 系列API来实现的,有点老生常谈了~整体套路就是:使用SetupDiGetClassDevs 返回一类设备信息集使用SetupDiEnumDeviceInfo便利设备信息集使用SetupDiGetDeviceRegistryProperty获取设备信息,从而判断是不...原创 2018-02-27 18:36:16 · 3641 阅读 · 2 评论 -
Core Audio APIs 给喇叭、麦克风静音
有的时候我们需要检查系统默认喇叭,麦克风的静音状态以及设置静音该怎么做呢?请参考以下代码#include <Mmdeviceapi.h>#include <Endpointvolume.h>#include <Audioclient.h>#include <Audiopolicy.h>const CLSID CLSID_MMDeviceEn...原创 2018-05-21 18:44:55 · 1408 阅读 · 0 评论 -
一种x64进程使用x86 DLL的方法
一种x64进程使用32位 DLL的方法有的时候要用第三方的DLL,但是仅有32位版本,自己开发的程序又必须是是64位的,这下头就疼了。。。。其实反之也是一样的头疼,这时候有什么办法呢?一个典型的思路就是用32位进程加载DLL,然后64位进程跟32位进程通讯。其实微软已经有了COM技术来帮我们解决这个问题:1.创建一个进程外COM服务器。2.使用COM服务器的相关接口去包装32位DLL的接口。3.6...原创 2018-06-25 17:31:51 · 10987 阅读 · 1 评论 -
设计模式之装饰模式
装饰模式:动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比生成子类更为灵活。有时我们希望给某个对象而不是整个类添加一些功能,这样便可以轻而易举的组合出功能各异的对象,而不是从基类到子类专门有一条线来生成这样一个特定功能的对象。同时可以精简基类的功能,避免在基类中加入更多的只有在特定的情况下才使用到的数据跟方法。#include "stdafx.h"#include <mem...原创 2018-06-20 17:04:58 · 162 阅读 · 0 评论 -
一些常见算法题目
题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。class Solution{public: void push(int node) { stack1.push(node); } int pop() { int ielement; if (stack2.empty()) { while (!stack...原创 2018-07-23 11:27:30 · 1153 阅读 · 0 评论 -
大数乘法
大数乘法很多时候会用到 大数字 相乘。数字太大了之后超出计算机单一类型的最大存储长度会比较麻烦所以考虑用字符串来存储,这样对长度就没有了限制本文提供一种简单的处理方式。。甚至称不上一种算法,其实就是分解了一下我们平时的运算过程思路就是先双循环去乘,再用二维数组去保存中间结果。最后将中间结果叠加就可以#include "stdafx.h"#include &l...原创 2018-07-18 17:39:24 · 199 阅读 · 0 评论 -
vc++ 开发的程序不定时崩溃怎么定位?minidump 来帮你
vc++ 开发的程序不定时崩溃怎么定位?minidump 来帮你 在程序开始的地方设置结构化异常处理函数//Add UnhandledExceptionFilter; SetUnhandledExceptionFilter(CrashUnhandledExceptionFilter);在异常处理函数中自己写minidumpLONG WINAPI CrashUnhandle...原创 2018-07-13 10:54:57 · 894 阅读 · 0 评论 -
VC++ Debug跟Release下编译器默认初始化变量的区别
debug跟release在初始化变量时所做的操作是不同的,debug是将每个字节位都赋成0xcc,而release的赋值近似于随机。debug版初始化成0xcc是因为0xcc在x86下是一条int 3单步中断指令,这样程序如果跑飞了遇到0xcc就会停下来,这和单片机编程时一般将没用的代码空间填入jmp 0000语句是一样的。...转载 2018-08-07 16:37:11 · 676 阅读 · 0 评论 -
32位禁用本进程的SetUnhandledExceptionFilter API
// If this doesn't make sense, skip the code and come back!void lockUnhandledExceptionFilter() { HMODULE kernel32 = LoadLibraryA("kernel32.dll"); Assert(kernel32); if (FARPROC gpaSetUn...翻译 2018-08-27 20:17:25 · 301 阅读 · 0 评论 -
从Hook虚函数到HOOK COM API
// HookVtable.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include <iostream>#include <memory.h>#include <windows.h>using namespace std;...原创 2018-10-10 16:46:54 · 1086 阅读 · 0 评论 -
vs2008 + WinDDK(7600.16385.1)编译错误的问题
之前装了vs2005 配置了 WinDDK(7600.16385.1),能够正常使用现在因为项目需要安装了vs2008结果。。。New个项目都错误一大堆:C:\Program Files\Microsoft Visual Studio 9.0\VC\include\ctype.h(94) : error C2144: syntax error : 'int' shoul原创 2017-05-15 15:54:15 · 654 阅读 · 0 评论 -
vc 阻止电脑休眠
vc 阻止电脑休眠主要是使用API SetThreadExecutionState详情参考调用过这个API的线程不退出的话,系统就一直不会进入睡眠状态。Demo,系统设置一分钟空闲就进入休眠状态,让线程运行2分钟DWORD WINAPI ThreadProc(_In_ LPVOID lpParameter){ if (SetThreadExecu原创 2017-05-25 16:58:45 · 5391 阅读 · 0 评论 -
VC++利用微软mstscax.dll控件集成远程桌面
利用微软mstscax.dll控件集成远程桌面1.新建基于MFC的对话框程序,在对话框资源上右键,选择【Insert ActiveX Control...】菜单,然后在弹出的界面中选择“Microsoft RDP Client Contorl”。2.在新添加的控件上点击右键选择【Add Variable...】,为该控件绑定一个变量,本例子中为m_Rem原创 2016-10-25 15:44:59 · 9693 阅读 · 3 评论 -
一个基于GDIplus的Gif显示控件
一个基于GDIplus的Gif显示控件Author:Leen本人初次接触GDI+,如有错误,敬请指教GIF显示部分参考了驿站上一个作者的文章,在此表示感谢,我就是感觉能将此功能封装成单独的控件,并且支持控件消息,会更好。这个控件的对外接口比较少//设置文件路径void SetGifFile(CString strfilepath);//设置回原创 2012-06-30 11:21:38 · 950 阅读 · 0 评论 -
控制程序运行不超过指定个数实例的一种方法
控制程序运行不超过指定个数实例的一种方法以MFC对话框程序为例// CSemaphoreApp initializationBOOL CSemaphoreApp::InitInstance(){ AfxEnableControlContainer(); // Standard initialization // If you are not using these features原创 2013-03-25 14:52:55 · 780 阅读 · 0 评论 -
QQ密码保护与反保护浅谈
QQ密码保护与反保护浅谈Leen 记得刚学vc的时候,了解了一点hook,就感觉无所不能,这偷个扣扣的小密码不是轻而易举 结果发现是异想天开。。先说说一种常用的预防键盘钩子钩去密码的方法,用钩防钩。WH_DEBUG钩子优先级较高,可以先于键盘钩子加载,网上这方面资料很多。这样,我们就可以在密码框获取焦点时挂钩,失去焦点时脱钩,这样来防止键盘钩子,而且使用线程钩原创 2013-04-09 16:49:04 · 1650 阅读 · 1 评论 -
两道常见面试题测试程序
class String{public: String(const char* str); String(const String &other); ~String(); String& operator = (const String &other); void print();private: char* m_data;};String::String(const原创 2013-04-23 11:38:30 · 582 阅读 · 0 评论 -
探究C++对象模型
先引用两句名言作为开场白:"C++老手分两类:一种人把语言用得烂熟,OO观念也有;另一种人不但如此,还对于台面下的机制,如编译器合成的default constructor、object的内存布局等有莫大的兴趣。""了解C++对象模型,绝对有助于你在语言本身以及面向对象观念两方面的层次提升。"首先以Point类为例再看下对象模型这个模型好像跟我们以往的认知有些不原创 2013-05-14 11:06:22 · 1227 阅读 · 0 评论 -
C语言深度解剖
C语言深度解剖转载 2013-06-07 10:40:13 · 763 阅读 · 0 评论 -
VC WMI应用获取SMBios中的信息
首先关于WMI 的基本使用请参考:http://blog.csdn.net/breaksoftware/article/details/8439975在那里你可以找到系列连贯的文章,笔者写的很好很细腻,就是代码缺少了微量细节,其实这样也好,让你动动脑,杜绝“拿来主义”。参考他的文章http://blog.csdn.net/breaksoftware/article/details/88原创 2014-02-16 14:43:03 · 3553 阅读 · 0 评论 -
C++11 特性了解
Kernel Panic 总结了 C++11 中的 5 个实用特性:自动类型推导、强类型枚举、Unique 指针、static_assert、Lambdas 表达式。Auto Type Deduction 自动类型推导auto 关键字让用户得以使用 C++ 内置的类型推导特性。Unique 指针Unique 指针是 C++11 版本的智能指针类。原创 2016-01-28 19:06:05 · 383 阅读 · 0 评论 -
COM接口指针
COM接口指针很危险,因为使用过程中需要每一个使用者都要严格并且正确的AddRef和Release,一旦出现问题,就会造成对象不能被正常释放,或者对象被重复删除,造成程序崩溃。所以使用COM接口,必须小心翼翼才行。但是,即使所有的代码中,都正确的AddRef和Release,也不一定能保证万无一失,例如:[cpp] view plain copy转载 2016-02-17 13:58:44 · 1829 阅读 · 0 评论 -
如何检测耳机接入Windows系统
author:Leen对于这个问题,网上很多人说处理WM_DEVICECHANGE消息即可。于是快速建立个MFC小程序测试一下:BEGIN_MESSAGE_MAP(CVolumeHelperDlg, CDialog) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_WM_DEVICECH原创 2016-03-09 19:16:04 · 4957 阅读 · 1 评论 -
Windows Application UIAccess
Windows Application UIAccesswindows Vista之后 应用程序引入了一个新的属性UIAccess。 如何创建一个integrity level 低于自己的process原创 2016-04-08 16:44:53 · 4136 阅读 · 4 评论 -
WMI访问系统服务
WMI访问系统服务WMI是可以查询以及启动、停止系统中的服务程序的于是我又为补充了几个函数HRESULT CWMI::ExcuteServiceCtrl(UINT uControlCode){ HRESULT hr = E_FAIL; CComPtr pLoc = NULL; CComPtr pSvc = NULL; do { hr = InitialCom()原创 2014-02-19 22:34:23 · 809 阅读 · 0 评论 -
Drag drop does not work on windows 7 and later
一旦把应用程序的UIAccess 属性设置为TRUE<requestedExecutionLevel level="asInvoker" uiAccess="true" />就收不到WM_DROPFILES消息了。。。。。。。这是什么鬼?首先我们想到了 这个应该是权限问题引发的血案,于是想到~ i原创 2016-05-04 09:54:49 · 680 阅读 · 0 评论 -
监测多模式笔记本的模式切换
监测多模式笔记本的模式切换原创 2016-06-08 16:29:29 · 806 阅读 · 0 评论 -
在预先定义的内存位置构造一个对象
常常有人问这样一个C++问题:如何在预先定义的内存位置构造一个对象?在预先定义的内存缓冲构造一个对象有许多有用的应用。例如,一个定制的垃圾搜集器能使用一个大的预分配内存缓冲,用户在这个缓冲中构造其对象。当不再需要这些对象时,它们的存储空间被自动收回。这个技术在重视时间的应用中也很有用。在预先分配的内存缓冲构造一个对象是一种“时间常量”操作,之所以这样说是因为程序分配操作本身不会浪费宝贵的时间。转载 2012-06-30 11:14:31 · 586 阅读 · 0 评论