- 博客(77)
- 收藏
- 关注
转载 键盘鼠标模拟全知道
一、基于windows 消息机制的鼠标键盘模拟 (一)、应用程序级模拟 (二)、系统级模拟 1、 用API函数keybd_event 模拟键盘事件 2、 SendInput函数模拟全局键盘鼠标事件 3、用全局钩子模拟键盘消息二、驱动级模拟********************************
2017-08-01 02:23:05
5175
原创 读QT5.7源码(七)QObjectData 和 QObjectPrivate
在QObject中定义了一个保护权限的成员变量 d_ptrprotected: QScopedPointer d_ptr;QScopePointerQObject 几乎是所有QT中的类的基类,因此QT中每个继承于Qobject的类都有这个指针,指向一个动态分配的QObjectData对象。QObjectData类的定义class Q_CORE_E
2017-02-23 00:57:03
4284
原创 读QT5.7源码(六)QMetaClassInfo 和 QMetaProperty
ClassInfo 和 Property在源码中的定义:MOC生成的字符串结构MOC生成的uini数组结构
2017-02-22 00:04:59
1947
原创 读QT5.7源码(五)QMetaEnum
Enum在QMetaObject中的分布:QMetaEnum 类用来管理对应的enum结构,方面查询等操作,下面是它的定义class Q_CORE_EXPORT QMetaEnum{public: Q_DECL_CONSTEXPR inline QMetaEnum() : mobj(Q_NULLPTR), handle(0) {} const
2017-02-21 23:45:50
1707
原创 读QT5.7源码(四)QMetaMethod 和 QMetaMethodPrivate
QMetaMethod 和 QMetaMethodPrivate 是用来管理QMetaObject包含信息中的函数节的。MOC生成的函数结构图如下首先是字符串结构函数结构图:每个函数节 占5个int ,第一个是函数名字符串,在字符串数组中的索引值为3,刚好对应字符数组中的“Te
2017-02-21 18:23:38
3054
原创 读QT5.7源码(七)QMetaObjectPrivate
QMetaObjectPrivate 提供了对QMetaObject类成员中 uint类型数组的管理,这是个复杂的结构,因此QMetaObjectPrivate提供了结构的定义和操作函数,来方便对其的管理工作。添加了 classInfo method emum property 后MOC生成的 QMetaObject.data 节类的声明:class Wid
2017-02-21 04:49:25
1104
原创 读QT5.7源码(三)Q_OBJECT 和QMetaObject
Qt meta-object系统基于三个方面: 1、QObject提供一个基类,方便派生类使用meta-object系统的功能; 2、Q_OBJECT宏,在类的声明体内激活meta-object功能,比如动态属性、信号、槽; 3、Meta Object编译器(MOC),为每个QObject派生类生成代码,以支持meta-object功能。QObject定义了从一个
2017-02-21 01:13:06
4418
原创 读QT5.7源码(二)QByteArray
QByteArray 以QTypeArrayData做底层做了聚合,实现了对字节为单位的数组的管理。QT中是这样描述它的QByteArray can be used to store both raw bytes (including '\0's) and traditional 8-bit '\0'-terminated strings. Using QByteArr
2017-02-20 01:08:39
6500
原创 读QT5.7源码(一)QArrayData QTypedArrayData
QArrayData QTypedArrayData这两个类是配套的,后者是以前者为基础的类模板,以方便对不同类型的数组提供抽象管理。他们被定义下同一个头文件和源文件中,分别是QarraryData.h 和 QarraryData.cpp 位于qtcode文件夹中QArrayData定义如下struct Q_CORE_EXPORT QArrayData{ QtPri
2017-02-19 23:32:15
7963
转载 关于qt中的tr()函数
在论坛中漂,经常遇到有人遇到tr相关的问题。用tr的有两类人:(1)因为发现中文老出问题,然后搜索,发现很多人用tr,于是他也开始用tr(2)另一类人,确实是出于国际化的需要,将需要在界面上显示的文件都用tr包起来,这有分两种:(2a) 用tr包住英文(最最推荐的用法,源码英文,然后提供英文到其他语言的翻译包)(2b) 用tr包住中文(源码用中文,然后提供中文到其他语言的翻
2017-02-19 21:20:42
2543
原创 QT信号和槽机制分析
QObject这个class是QT对象模型的核心,绝大部分的 QT 类都是从这个类继承而来。这个模型的中心特征就是一个叫做信号和槽(signal and slot)的机制来实现对象间的通讯,你可以把一个信号和另一个槽通过 connect(„) 方法连接起来,并可以使用disconnect(„) 方法来断开这种连接,你还可以通过调用blockSignal(„) 这个方法来临时的阻塞信号.
2017-02-16 18:23:05
2800
1
转载 Windows核心编程笔记(二十一) 硬件输入模型和局部输入状态
28.1 原始输入线程(RIT)(1)图解硬件输入模型 ①当操作系统初始化时会创建一个原始输入线程(RIT)和系统硬件消息队列(SHIQ),这两者是系统硬件输入模型的核心。当SHIQ队列有硬件(如鼠标或键盘)消息时,RIT被唤醒,并将事件添加到用户线程的VIQ队列。 ②任何时刻,只能有一个用户线程与RIT连接,该线程被称为前景线程。相对于其他线程创建的窗口,前
2017-02-13 20:38:55
1944
转载 Windows核心编程笔记(二十) 窗口与消息2
唤醒一个线程线程的挂起与唤醒(1)当线程调用GetMessage或WaitMessage,而消息队列中又没有消息出现时,线程会被挂起。(2)当消息被“Post”(也可以是线程间的“Send”)到消息队列时,相应的Wake标志位会被设置,以表明该线程可被调度。 查询队列的状态:DWORD GetQueueStatus(UINT fuFlags)(1)fuFla
2017-02-13 20:20:49
3164
转载 Windows核心编程笔记(二十) 窗口与消息
线程的消息队列(1)Windows用户对象(User Object) ①类型:图标、光标、窗口类、菜单、加速键表等 ②当一个线程创建某个对象时,则该对象归这个线程的进程所有,当进程结束时,如果用户没有明确删除这个对象,则操作系统会自动删除这个对象。 ③窗口和钩子(hook)这两种用户对象,它们分别由建立窗口和安装钩子的线程所拥有(注意,不是进程)。如果一个线程
2017-02-13 19:50:43
1703
转载 Windows核心编程笔记(十九) SEH结构化异常处理_未处理异常及向量化异常
UnhandledExceptionFilter函数详解 BaseProcessStart伪代码(Kernel32内部)void BaseProcessStart(PVOID lpfnEntryPoint) //参数为线程函数的入口地址{ DWORD retValue; DWORD currentESP; DWORD exceptionCode;
2017-02-13 19:49:11
3690
转载 c++11新特性--Lambda
生成随机数字 假设我们有一个vector容器,想用100以内的随机数初始化它,其中一个办法是通过generate函数生成,如代码1所示。generate函数接受三个参数,前两个参数指定容器的起止位置,后一个参数指定生成逻辑,这个逻辑正是通过Lambda来表达的。代码 1 我们现在看到Lambda是最简形式,只包含捕获子句和函数体两个必要部分,其他
2017-02-09 19:42:06
276
转载 c++11新特性--static_assert
static_assert:这个宏用于检测和诊断编译时错误。编译期,这是一个与 CRT-assert(运行时宏)相反的宏。这个好东西用于检测编译时程序的不变量。这需要一个表达式可以被计算为 bool 或 string (字符串)。如果这个表达式的值为 false ,那么编译器会出现一个包含特定字符串的错误,同时编译失败。如果为 true 那么没有任何影响。我们可以在以下使用
2017-02-09 19:38:31
3681
转载 c++11新特性--decltype
返回值 decltype(表达式)[返回值的类型是表达式参数的类型]这个可也用来决定表达式的类型,就像Bjarne暗示的一样,如果我们需要去初始化某种类型的变量,auto是最简单的选择,但是如果我们所需的类型不是一个变量,例如返回值这时我们可也试一下decltype。现在我们回看一些例子我们先前做过的,[cpp] view
2017-02-09 19:36:54
401
转载 【C++11】新特性——auto的使用
[+] C++11中引入的auto主要有两种用途:自动类型推断和返回值占位。auto在C++98中的标识临时变量的语义,由于使用极少且多余,在C++11中已被删除。前后两个标准的auto,完全是两个概念。1. 自动类型推断 auto自动类型推断,用于从初始化表达式中推断出变量的数据类型。通过auto的自动类型推断,可以大大简化我们的编程工作。下面是一些使用a
2017-02-09 19:36:13
490
转载 Windows核心编程笔记(十八) SEH结构化异常 三
23.3 终止处理程序23.3.1 程序的结构(1)框架__try{ //被保护的代码块 ……}__finally{ //终止处理}(2)__try/__finally的特点 ①finally块总是保证,无论__try块中的代码有无异常,finally块总是被调用执行。 ②try块后面只能跟一个
2017-02-08 19:47:06
518
转载 Windows核心编程笔记(十八) SEH结构化异常 二
23.2 编译器层面对系统SEH机制的封装23.2.1 扩展的EXCEPTION_REGISTRATION级相关结构:VC_EXCEPTION_REGISTRATION(1)VC_EXCEPTION_REGISTRATION结构 struct VC_EXCEPTION_REGISTRATION{ VC_EXCEPTION_REGISTRATION* prev
2017-02-08 19:45:04
873
转载 Windows核心编程笔记(十八) SEH结构化异常 一
23.1 基础知识23.1.1 Windows下的软件异常(1)中断和异常 ①中断是由外部硬件设备或异步事件产生的 ②异常是由内部事件产生的,可分为故障、陷阱和终止三类。(2)两种异常处理机制:SEH和VEH(WindowsXP以上新引进)(3)结构化异常处理(SEH)是Windows操作系统提供的强大异常处理功能。而Visual C++中的__
2017-02-08 17:59:06
1788
转载 Windows核心编程笔记(十七) 线程局部储存
21.1 动态TLS21.1.1 为什么要使用线程局部存储 编写多线程程序的时候都希望存储一些线程私有的数据,我们知道,属于每个线程私有的数据包括线程的栈和当前的寄存器,但是这两种存储都是非常不可靠的,栈会在每个函数退出和进入的时候被改变,而寄存器更是少得可怜。假设我们要在线程中使用一个全局变量,但希望这个全局变量是线程私有的,而不是所有线程共享的,该怎么办呢?这时候就须要用到线
2017-02-07 23:43:41
3502
1
转载 Windows核心编程笔记(十七) DLL高级技术
20.1 DLL模块的显式载入和符号链接20.1.1 显式载入DLL模块(1)构建DLL时,如果至少导出一个函数/变量,那么链接器会同时生成一个.lib文件,但这个文件只是在隐式链接DLL时使用(显示链接时并没有用到这文件)(2)显式载入DLL的函数:LoadLibrary(Ex) 参数含义pCTSTR pszDll
2017-02-07 23:41:55
2603
转载 Windows核心编程笔记(十七) 堆
1.堆 虚拟内存主要用于分配连续的内存,如给大数组分配内存。 堆主要用于分配小块内存,如链表,树等就适合用堆来分配内存。 优点在于:在堆中分配内存时不像虚拟内存要求那么多,如分配粒度、页边界等。它没有这些要求,可分配任意大小的内存。 缺点在于:相对于其它内
2017-02-07 11:36:36
459
原创 Windows核心编程笔记(十六)内存映射文件
原理首先,“映射”这个词,就和数学课上说的“一一映射”是一个意思,就是建立一种一一对应关系,在这里主要是只 硬盘上文件 的位置与进程 逻辑地址空间中 一块大小相同的区域之间的一一对应,如图1中过程1所示。这种对应关系纯属是逻辑上的概念,物理上是不存在的,原因是进程的逻辑地址空间本身就是不存在 的。在内存映射的过程中,并没有实际的数据拷贝,文件没有被载入内存,只是逻辑上被放入了内存,
2017-02-06 16:05:51
498
原创 Windows核心编程笔记(十五)应用程序中使用虚拟内存
windows 提供了三种机制来对内存进行操作1)虚拟内存,最适合用来管理大型对象数组 或大型结构数组2)内存映射文件,最适合用来管理大型数据流(通常是文件),以及在同一机器上运行的多进程之间共享数据。3)堆,适合用来管理大量的小型对象。windows提供了一些用来操控虚拟内存的函数,我们可以通过这些函数直接预定地址空间区域,给区
2017-02-05 17:09:08
592
原创 Windows核心编程笔记(十四)探索虚拟内存
在编程中对由于每个系统中页面大小,分配粒度等系统参数是不同的,因此在代码中不能将这些值写死,应该通过系统API动态获取这些值。GetSystemInfo可以获取一些基本的系统信息void WINAPI GetSystemInfo( __out LPSYSTEM_INFO lpSystemInfo);需要传入一个被写的SYSTEM_INFO结构体typedef st
2017-01-20 00:39:38
1244
原创 Windows核心编程笔记(十三)Windwos内存体系结构
Windows内存管理机制,底层最核心的东西是分页机制。分页机制使每个进程有自己的4G虚拟空间,使我们可以用虚拟线性地址来跑程序。每个进程有自己的工作集,工作集中的数据可以指明虚拟线性地址对应到怎样的物理地址。进程切换的过程也就是工作集切换的过程,如Matt Pietrek所说如果只给出虚拟地址而不给出工作集,那这个地址是无意义的。(见图一) 在分页机制所形成的线性地址空
2017-01-19 22:02:39
2918
转载 x86—EFLAGS寄存器详解
转载自 http://blog.youkuaiyun.com/jn1158359135/article/details/7761011鉴于EFLAGS寄存器的重要性,所以将这一部分内容从处理器体系结构及寻址模式一文中单独抽出另成一文,这部分内容主要来自Intel Developer Mannual,在后续的内核系列中遇到的许多和EFLAGS寄存器有关的内容将直接从本文引用。众所周知,
2017-01-19 20:08:14
663
转载 初探处理器体系结构及寻址模式
转载自http://blog.youkuaiyun.com/jn1158359135/article/details/7055317由8086/8088、x86、Pentium发展到core系列短短40年间,处理器的时钟频率几乎已接近极限,尽管如此,自从86年Intel推出386至今除了增加一些有关流媒体的指令如mmx/sse之外,其他新增的大多数指令都可以从最初的指令集中组合实现同样的功
2017-01-19 20:07:15
429
转载 深入详解保护模式下的内存分页机制
转载自http://blog.youkuaiyun.com/jn1158359135/article/details/7106383386及更高型号处理器使用内存分页机制,这使得同一个线性地址可以被映射为多个物理地址,这种映射是通过分页单元这一特殊的硬件电路实现的。通常程序中所使用的线性地址是由链接器帮我们产生的,而操作系统通过维护每个进程私有的页目录和页表实现线性地址与物理地址之间的转换
2017-01-19 20:03:22
1067
转载 计算机原理学习(7)-- x86-32 CPU和内存管理之分段管理
转载自http://blog.youkuaiyun.com/cc_net/article/details/24726287前言 前一篇我们介绍了内存管理中的分页试内存管理,分页的主要作用就是使得每个进程有一个独立的,完整的内存空间,通过虚拟内存技术,使得程序可以在较小的内存上运行,而进程之间内存空间相互独立,提高了安全性。这一篇将主要介绍内存管理中分段管理,以及两种
2017-01-19 15:48:22
354
转载 计算机原理学习(6)-- x86-32 CPU和内存管理之分页管理
转载自http://blog.youkuaiyun.com/cc_net/article/details/13979967前言上一篇我们了解了x86-16 CPU计算机的内存访问方式,寻址方式,以及基于MS-DOS的应用程序的内存布局。这一篇会主要介绍32位处理器的内存访问,内存管理以及应用程序的内存布局。虽然目前64位CPU已经非常普及了,不过相对于32位
2017-01-19 15:47:35
482
转载 计算机原理学习(5)-- x86-16 CPU和内存管理
转载自http://blog.youkuaiyun.com/cc_net/article/details/12878935前言前面我们已经了解了计算机硬件的工作原理,以及操作系统的发展。我们知道是内存把计算机硬件和软件联系了起来。不夸张的说,了解了软件在内存中的结构,就基本了解了程序最底层的运行原理。所以从这一篇开始,将深入的讨论计算机中内存管理和布局。内存
2017-01-19 15:46:43
675
转载 计算机原理学习(4)-- 操作系统发展和程序编译
前言 转载自http://blog.youkuaiyun.com/cc_net/article/details/11396081前面的文章主要都是计算机硬件相关的一些工作原理。而前一篇文章介绍了内存的工作原理,编址方式,逐步过渡到软件上面来了。前面也说过,内存是一个非常重要的部件,因为CPU所需的指令和数据都在内存中。所以从这一篇开始我们主要看看程序运行时在内存
2017-01-19 15:44:00
589
转载 计算机原理学习(3)-- 内存工作原理
前言 转载自http://blog.youkuaiyun.com/cc_net/article/details/11097267前面两篇文章介绍了计算机硬件是如何工作的。而从这一章开始将逐渐的转到软件上面来。我们还有内存这一个很重要的部分没有介绍。这一章不仅仅介绍内存的工作原理,还会介绍内存的编址、内存数据存放。逐渐从硬件过渡到软件上来。为后面介绍程序运行打下基础。
2017-01-18 22:40:23
4569
1
转载 计算机原理学习(2)-- 存储器和I/O设备和总线
前言 转载自http://blog.youkuaiyun.com/cc_net/article/details/10439665前一篇文章介绍了冯诺依曼体系结构的计算机的基本工作原理,其中主要介绍了CPU的结构和工作原理。这一篇主要来介绍存储区,总线,以及IO设备等其他几大组件,来了解整个计算机是如何工作的。 这些东西都是看得见摸得着的硬件,平时我们买电脑时最关注的就是CP
2017-01-18 21:18:53
1097
转载 计算机原理学习(1)-- 冯诺依曼体系和CPU工作原理
前言转载自http://blog.youkuaiyun.com/cc_net/article/details/10419645对于我们80后来说,最早接触计算机应该是在95年左右,那个时候最流行的一个词语是多媒体。 依旧记得当时在同学家看同学输入几个DOS命令就成功的打开了一个游戏,当时实在是佩服的五体投地。因为对我来说,屏幕上的东西简直就是天书。有了计算机我们生活发生了巨大的变化
2017-01-18 21:09:57
572
原创 Windows核心编程笔记(十二) 纤程
纤程(Fiber),是微软加入到Windows中,使得UNIX服务器应用程序更好地移植到Windows中。所以本篇真正没有多少应用价值,只是为了使得笔记更加完整。 看完本章,感觉纤程是比线程的更小的一个运行单位。可以把一个线程拆分成多个纤程,然后通过人工转换纤程,从而让各个纤程工作。 要知道的是人工的转换,不是系统自动切换。因为线程的实现通过Windows
2017-01-16 20:19:54
460
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人