zoukankan      html  css  js  c++  java
  • delphi 句柄


    句柄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函数来处理不同的句柄

  • 相关阅读:
    聊一聊-JAVA 泛型中的通配符 T,E,K,V,?
    leetcode刷到的大牛思路记录
    leetcode树有关题目随笔
    SpringMVC Controller介绍及常见注解
    一个方法团灭 6 道股票问题
    IDEA中Update resources和Update classes and resources、Redeploy、Restart server的区别
    动态规划规律总结
    mapPartitions
    RDD的依赖关系
    foreachPartition来写数据库
  • 原文地址:https://www.cnblogs.com/zhangzhifeng/p/3326681.html
Copyright © 2011-2022 走看看