句柄

句柄

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

 

  它用于管理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; //窗口句柄
还有很多其他的句柄类型。
posted @ 2018-05-02 17:07 史D芬周 阅读( ...) 评论( ...) 编辑 收藏
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值