句柄

摘要:
Windows通过建立一个叫做句柄表的东西,用于记录内核对象的地址。句柄在Windows系统中类似于指针,它就是个指针类型,但是又和指针不同。句柄还有其他很多种,都是通过HANDLE定义而来的。在Windows编程中,句柄代表系统中唯一一个对象,比如文件句柄、图标句柄、字体句柄、位图句柄、画刷句柄、设备环境句柄、应用程序模块句柄、进程句柄、窗口句柄等。

句柄是一个序号, 它不是一个内存地址

它用于管理Windows内核对象,比如用户打开一个文件,Windows即会建立一个文件内核对象,所谓内核对象就是一块内存结构,里面有文件路径,文件大小,当前文件指针等等信息。Windows系统会打开很多的文件,因此就有很多的文件内核对象,同样Windows系统还会建立其它的类型的很多很多的内核对象。如何管理这么多的内核对象 呢?Windows通过建立一个叫做句柄表的东西,用于记录内核对象的地址。表中每一个元素,都是一个内核对象的起始地址,然后给每一个对象对应一个序号,此序号即为句柄。

1
2
3
4
5
6
//句柄表类似于下面的结构,像0、1、2这样的序号即为句柄
----------------------------------------------------
0第一个内核对象的地址
1第二个内核对象的地址
2第三个内核对象的地址
----------------------------------------------------
比如用 HWND hwnd=::FIndWindow("xx","xxxx")得到 窗口的句柄,然后就可以进行其他操作,
比如在显示窗口,调用 ShowWindow(hwnd, nCmdShow);
其中hwnd就是窗口句柄。
句柄等于记录一段内存地址的结构,比如打开一个文件,里面有大小,图标,地址不同的属性
我用句柄表示这块内存不同对象

有点内饰类型 比如(class a)
假设我有快内存 用表示文件的 我用a表示这段内存的类型
(原后我用这个内型创建不同的对象,里面有大小对象,图标对象,地址对象...对象就是句柄)
1,我可以用a 起个对象叫做 icon 标识图标
我可以用a 起个对象叫做 img 标识图标
VC 中的句柄 HANDLE 其实是一个 void * 类型。像 C 语言中的 FILE 一样,它是个结构体,FILE * 其实是一个结构体地址类型。句柄在 Windows 系统中类似于指针,它就是个指针类型,但是又和指针不同。比如分配一块可移动的内存,你可以得到一个固定的句柄,但是这块内存的指针是不固定的。句柄还有其他很多种,都是通过 HANDLE 定义而来的。在 Windows 编程中,句柄代表系统中唯一一个对象,比如文件句柄、图标句柄、字体句柄、位图句柄、画刷句柄、设备环境句柄、应用程序模块句柄、进程句柄、窗口句柄等。由于 Windows 是封闭的,微软提供很多现成的函数(Windows API),句柄就是访问这类对象的一个 "指针",通过句柄才能访问这些对象。
HANDLE 类型在 Windows SDK 头文件定义如下:
typedef void *PVOID;
typedef PVOID HANDLE; //文件句柄、进程句柄等
typedef HANDLE HICON; //图标句柄
typedef HANDLE HFONT; //字体句柄
typedef HANDLE HBITMAP; //位图句柄
typedef HANDLE HBRUSH; //画刷句柄
typedef HANDLE HDC; //设备环境句柄
typedef HANDLE HMODULE; //模块句柄
typedef HANDLE HWND; //窗口句柄
还有很多其他的句柄类型。

免责声明:文章转载自《句柄》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇sqlServer 查询特定的表(字段或者文字)在哪些存储过程中被使用python中的各个包的安装,用pip安装whl文件下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

C语言:字符数组 + 字符串指针

字符数组 C语言中没有特定的字符串类型,通常是将字符串放在一个字符数组中。 字符串指针 除了字符数组,C语言还支持另外一种表示字符串的方法,就是直接使用一个指针指向字符串。 char *str = "leetcode"; char *str; str = "leetcode"; 字符串中的所有字符在内存中是连续存放的,str指向的是字符串的第0个字符,即...

Windows消息机制

http://blog.chinaunix.net/u3/117890/showart_2307569.html Windows操作系统最大的特点就是其图形化的操作界面,其图形化界面是建立在其消息处理机制这个基础之上的。如果不理解Windows消息处理机制,肯定无法深入的理解Windows编程。可惜很多程序员对Windows消息只是略有所闻,对其使用知之甚...

5602. 将 x 减到 0 的最小操作数 双指针

给你一个整数数组 nums 和一个整数 x 。每一次操作时,你应当移除数组 nums 最左边或最右边的元素,然后从 x 中减去该元素的值。请注意,需要 修改 数组以供接下来的操作使用。 如果可以将 x恰好 减到0 ,返回 最小操作数 ;否则,返回 -1 。 示例 1: 输入:nums = [1,1,4,2,3], x = 5输出:2解释:最佳解决方案是移除...

句柄与句柄表(数据结构,源码分析)

0x01  句柄,句柄表概念     任意进程,只要每打开一个对象,就会获得一个句柄,这个句柄用来标志对某个对象的一次打开,通过句柄,可以直接找到对应的内核对象。句柄本身是进程的句柄表中的一个结构体,用来描述一次打开操作。句柄值则可以简单看做句柄表中的索引,并不影响理解。HANDLE的值可以简单的看做一个整形索引值。     每个进程都有一个句柄表,用来记...

Spring Cloud 生产环境性能优化

先思考几个问题: 什么是百万并发连接? 什么是吞吐量? 操作系统能否支持百万连接? 操作系统维持百万连接需要多少内存? 应用程序维持百万连接需要多少内存? 百万连接的吞吐量是否超过了网络限制? 百万的并发连接挑战意味着什么: 100 万的并发连接数 10 万个连接/秒——(如果每个连接以这个速率持续约10秒) 1 GB/秒的连接——快速连接到互联网。...

队列(Queue)

  在“队列”(Queue)这种数据结构中,数据项是先进先出(FIFO:first in first out)。队列的容量可以有限,也可以是无限的。一、基于数组的Queue实现一般情况下,对于Queue而言,最核心的操作是:插入队列(enqueue)、移出队列(dequeue)。因为在队列中,插入操作是插入到队列的最后,而移出操作是移出队列的头部元素。因...