一、书上定义:

<<Microsoft Windows 3 Developer's Workshop>>(Microsoft Press,by Richard Wilton)
    在Windows环境中,句柄是用来标识项目的,这些项目包括:模块(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)。

<<WINDOWS编程短平快>>(南京大学出版社):
    句柄是WONDOWS用来标识被应用程序所建立或使用的对象的唯一整数,WINDOWS使用各种各样的句柄标识诸如应用程序实例,窗口,控制,位图,GDI对象等等。WINDOWS句柄有点象C语言中的文件句柄。

二、MFC源代码:

#ifdef STRICT
typedef void *HANDLE;
#define DECLARE_HANDLE(name) struct name##__ { int unused; }; typedef struct name##__ *name
#else
typedef PVOID HANDLE;
#define DECLARE_HANDLE(name) typedef HANDLE name
#endif

DECLARE_HANDLE(HMODULE);
DECLARE_HANDLE(HINSTANCE);
DECLARE_HANDLE(HLOCAL);
DECLARE_HANDLE(HGLOBAL);
DECLARE_HANDLE(HDC);
DECLARE_HANDLE(HRGN);
DECLARE_HANDLE(HWND);
DECLARE_HANDLE(HMENU);
DECLARE_HANDLE(HACCEL);
DECLARE_HANDLE(HTASK);

三、理解:
    HANDLE就是PVOID,也就是无类型指针,
    上面这些资源的句柄Handles都不过是指向struct的指针,至于这个struct的用处,连M$都说unused了,现在解释下M$这么做的意义,这就是所谓数据封装,你可以在你的程序中把M$的内部结构指针传来传去,可是你却不知道它到底指向的内容是什么。

句柄与指针确实是完全不同的两个概念。句柄仅仅是一个32位整数,WIN32中用于标记某个系统或进程的对象,可以理解为对象索引(由于M$未完全公开相关技术,在一定程度上只能如此理解),这个索引更像是一种映射关系(从句柄到对象指针的映射),而不是纯粹意义上的“数组下标”。

句柄可以理解为用于指向或标识内存的一块“资源”,这些资源如:文件(file)、内存块(block of memory)、菜单(menu)等等。操作系统通过句柄来定位核心对象和系统资源。
    指针即为指向内存的“数据或指令”某一单元。

说的确切一点,句柄实际上是一种指向某种资源的指针,但与指针又有所不同:指针对应着一个数据在内存中的地址,得到了指针就可以自由地修改该数据。Windows并不希望一般程序修改其内部数据结构,因为这样太不安全。所以Windows给每个使用GlobalAlloc等函数声明的内存区域指定一个句柄(本质上仍是一个指针,但不要直接操作它),平时你只是在调用API函数时利用这个句柄来说明要操作哪段内存。

   
四、引喻:

   牧童遥指杏花村
   牧童的手为指针,杏花村的牌子为句柄,杏花村酒店为对象的实例.

附注:获得窗口句柄三种方法

1.HWND FindWindow(LPCTSTR lpClassName, LPCTSTR lpWindowName)

HWND FindWindowEx(HWND hwndParent, HWND hwndChildAfter,LPCTSTR lpClassName, LPCTSTR lpWindowName)

2.HWND WindowFromPoint(POINT& Point)//获得当前鼠标光标位置的窗口HWND

3.BOOL CALLBACK EnumChildProc(HWND hwnd,LPARAM lParam)

BOOL CALLBACK EnumChildWindows(HWND hWndParent, WNDENUMPROC lpEnumFunc,LPARAM lParam)

BOOL CALLBACK EnumWindows(WNDENUMPROC lpEnumFunc, LPARAM lParam)

BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam)

作者Blog:http://blog.csdn.net/feijj2002_/

转载于:https://www.cnblogs.com/gaowg/archive/2005/09/07/231632.html

句柄的本质(整理-收藏) 选择自 feijj2002_ 的 Blog相关推荐

  1. 这4款网页书签管理工具,整理收藏夹更轻松

    很多人在平时浏览网页的时候,会收藏一些网址作为书签,这样能够方便我们下次阅读.但是,随着时间的增长,收藏的书签越来越多,收藏夹变得越来越乱.这时候我们需要借助浏览器的书签管理工具对收藏夹进行管理,下面 ...

  2. 我为什么放弃Pocket使用Pinbox来整理收藏碎片化知识

    我为什么放弃Pocket使用Pinbox来整理收藏碎片化知识 在收藏这一块,Pocket可以说是算得上老大了,也是我用了好多年的一款收藏App,pocket 主要是用作稍后阅读,但我为什么放弃pock ...

  3. 句柄的本质/句柄是什么

    句柄的本质 一.书上定义: <<Microsoft Windows 3 Developer''s Workshop>>(Microsoft Press,by Richard W ...

  4. 句柄的本质——拨乱反正篇 (转)

    句柄的本质--拨乱反正篇 (转)[@more@] 受M$的帮助文档以及很多windows编程书籍的影响,大家对局柄比较普遍的认识是:句柄是一个整数,用以标识Windows对象,句柄不是一个指针-- 而 ...

  5. C# 2.0 泛型编程 选择自 shoutor 的 Blog

    C# 2.0 泛型编程     选择自 shoutor 的 Blog 关键字   C# 2.0 泛型编程 出处   C#泛型演示 class Stack<T> {    private T ...

  6. 【论文整理】小样本学习Few-shot learning论文整理收藏(最全,持续更新)

    一.综述类 1. Generalizing from a Few Examples: A Survey on Few-Shot Learning 2. Generalizing from a few ...

  7. Android 2018优秀开源框架整理收藏

    中级.高级.资深工程师 知其然知其不可然 <框架百大排行榜>里所提到的流行词.流行术语--使用能力.融会贯通其原理.讲解框架能力的高低,将让你不断的在这三个级别徘徊: 会有意识的合并榜单里 ...

  8. 工作第十四周:整理收藏夹、旧文章有感

    这一周 作死选了本英文版 Effective Java,看得好痛苦 T.T. 新单词: composed 组成 accomplished 典型的,熟练的 encapsulates 封装 transie ...

  9. IDEA快捷键整理收藏

    [常规] Ctrl+Shift + Enter,语句完成 "!",否定完成,输入表达式时按 "!"键 Ctrl+E,最近的文件 Ctrl+Shift+E,最近更 ...

  10. tkinter python 句柄_微云收藏 python tkinter.after

    上一篇既使用win32 后来改进2.0版本 加入gui 使用的tkinter 但是每次点击,很不方便,更新后,单纯使用 tkinter ,去除掉win32(其实这个很简单) win32是支持监视剪贴板 ...

最新文章

  1. 4.10日一直报错application未注入的问题解决
  2. 面试官问:高并发下,你都怎么选择最优的线程数?
  3. android地图定位
  4. Linux日志系统-06:案例2-实现httpd的日志滚动分割
  5. java代码如何降低重复率_影响网站跳出率的主要因素及如何降低网站跳出率?...
  6. 从零开始编写自己的C#框架(14)——T4模板在逻辑层中的应用(三)
  7. weblogic中删除自动部署项目
  8. 活动目录的灾难恢复操作指导之一
  9. 华为OJ-整形数组合并
  10. 在ubuntu 20.04中使用Theano
  11. Android 11 状态栏电池图标的定制
  12. 自己做量化交易软件(20)通达信公式选股程序的实现
  13. 元宇宙007 | 沉浸式家庭治疗,让治疗像演情景剧一样!
  14. 关于野火开发板stm32f103VET(拂晓开发板)DAPCMSIS-DAP下载烧录程序失败的问题及解决
  15. 计算机应用杂志-投稿经历
  16. 一步一步来制作CSS3 3D旋转相册
  17. 去哪儿网北京Java开发一、二、HR面全部通过
  18. Android 在线升级APK
  19. 学习笔记---遥感影像辐射定标与大气校正
  20. IOS学习之关于导航那些事

热门文章

  1. 1011 A+B和C
  2. SRS之SrsRtmpConn::publishing详解
  3. qq空间认证教程:借助企鹅媒体平台认证QQ公众空间
  4. 《Linux内核分析》第一周学习报告
  5. 用window.showModalDialog()实现DIV模式弹出窗口
  6. 用 TStringList 模拟 将字符串转换为变量的功能 - 回复 flq_00000 和 外来天客 的问题...
  7. L2Dwidget.js L2D网页动画人物添加
  8. CSS3自定义下拉框菜单
  9. VUE router-view 页面布局 (嵌套路由+命名视图)
  10. 关于Javascript, php的web公开课笔记