句柄Handle顾名思义就是把柄,把手的意思 ,得到了某对象的句柄可以任意控制此对象 。句柄是一种指向指针的指针。不是每个组件都有句柄,只有窗口控件等(*.模块(module)*.任务(task)*.实例(instance)*.文件(file)*.内存块(block of memory)*.菜单(menu)*.控制(control)*.字体(font)*.资源(resource),包括图标(icon),光标(cursor),字符串(string)等*.GDI对象(GDI object),包括位图(bitmap),画刷(brush),元文件(metafile),调色板(palette),画笔(pen),区域(region),以及设备描述表(device context)。)才能有句柄。就是窗口在操作系统下的唯一标志类似于 门牌号,是由系统随机分配的32位整数。
WINDOWS程序中并不是用物理地址来标识一个内存块,文件,任务或动态装入模块的,相反的,WINDOWS API给这些项目分配确定的句柄,并将句柄返回给应用程序,然后通过句柄来进行操作。
一个Windows内核对象创建时系统回返回一描述该对象的内核数据结构,以后再访问该对象时以此数据结构为标识。但SDK每次调用时用它作参数会加大开销,故系统为每个进程(不是线程)创建一数组,每个元素指向一个对象的数据结构,故可通过数组的下标(即HANDLE)来标识此对象。从某种意义上讲一个句柄可认为是一个二级指针。进程创建时,windows系统为进程构造了一个句柄表  ,表项的内容中存储了指向目标内核对象的指针同时,系统返回这个表项在句柄表中的索引作为句柄。通过句柄查询句柄表得到对象指针,从而可以访问该对象。
 
//////////////////如何得到句柄/////////////////////////
一个WINDOWS应用程序可以用不同的方法获得一个特定项的句柄。许多API函数,诸如CreateWindow,GlobalAlloc,OpenFile的返回值都是一个句柄值。
例如:查找一个窗口的句柄: handle := FindWindow(nil,PChar('窗口的标题'));//查到窗体句柄
           自身句柄:self.handle;
/////////////////////////句柄的使用////////////////////////////////////////
应用程序只能通过API函数来处理不同的句柄

最新文章

  1. 【转】 Easy RadControl 之 RadGridView(Silverlight)
  2. 数据库基础知识(1)--数据库php连接
  3. [SAP ABAP开发技术总结]局部变量、全局变量
  4. Linq to XML 读取XML 备忘笔记
  5. QQ对话代码
  6. 比列的数目更多,以便找到第一k小值
  7. 用来代替本机IP的万能IP:127.0.0.1
  8. 实战3--项目开始--准备:::资源分类, 日志系统, 写BaseDao
  9. Tomcat 使用过程中的一些技巧
  10. java详解final、多态、抽象类、接口原理
  11. Vue-admin工作整理(一):项目搭建
  12. 【English】【托业】【四六级】写译高频词汇
  13. Day 12 开放封闭原则,装饰器初识
  14. js中两个!!的理解
  15. pytorch构建自己设计的层
  16. POJ3281(KB11-B 最大流)
  17. jstack 查看线程状态
  18. apache基金会开源项目简介
  19. POJ 3171 DP
  20. mac中使用vi修改二进制文件

热门文章

  1. 关于Xcode的Other Linker Flags
  2. Cookie的读写
  3. Break和Continue的一些注意事项
  4. jquery属性选择器之 attr
  5. java mail 使用 gmail smtp 发送邮件
  6. Python文件之----JSON
  7. Spring mvc 中有关 Shiro 1.2.3 配置问题
  8. macbook Android开发环境搭建,真机调试
  9. 多个显示器, window.open的定位
  10. Vim中安装delimitMate,auto-pairs插件不能输入中文问题