DNA图谱 / 问答 / 问答详情

c++中的句柄是什么意思,如何理解?

2023-07-24 11:23:46
共1条回复
出投笔记

分类: 电脑/网络 >> 程序设计 >> 其他编程语言

问题描述:

请通俗的解释一下

解析:

所谓句柄实际上是一个数据,是一个Long (整长型)的数据。

句柄是WONDOWS用来标识被应用程序所建立或使用的对象的唯一整数,WINDOWS使用各种各样的句柄标识诸如应用程序实例,窗口,控制,位图,GDI对象等等。WINDOWS句柄有点象C语言中的文件句柄。

从上面的定义中的我们可以看到,句柄是一个标识符,是拿来标识对象或者项目的,它就象我们的姓名一样,每个人都会有一个,不同的人的姓名不一样,但是,也可能有一个名字和你一样的人。从数据类型上来看它只是一个16位的无符号整数。应用程序几乎总是通过调用一个WINDOWS函数来获得一个句柄,之后其他的WINDOWS函数就可以使用该句柄,以引用相应的对象。

如果想更透彻一点地认识句柄,我可以告诉大家,句柄是一种指向指针的指针。我们知道,所谓指针是一种内存地址。应用程序启动后,组成这个程序的各对象是住留在内存的。如果简单地理解,似乎我们只要获知这个内存的首地址,那么就可以随时用这个地址访问对象。但是,如果您真的这样认为,那么您就大错特错了。我们知道,Windows是一个以虚拟内存为基础的操作系统。在这种系统环境下,Windows内存管理器经常在内存中来回移动对象,依此来满足各种应用程序的内存需要。对象被移动意味着它的地址变化了。如果地址总是如此变化,我们该到哪里去找该对象呢?

为了解决这个问题,Windows操作系统为各应用程序腾出一些内存储地址,用来专门登记各应用对象在内存中的地址变化,而这个地址(存储单元的位置)本身是不变的。Windows内存管理器在移动对象在内存中的位置后,把对象新的地址告知这个句柄地址来保存。这样我们只需记住这个句柄地址就可以间接地知道对象具体在内存中的哪个位置。这个地址是在对象装载(Load)时由系统分配给的,当系统卸载时(Unload)又释放给系统。

句柄地址(稳定)→记载着对象在内存中的地址————→对象在内存中的地址(不稳定)→实际对象

本质:WINDOWS程序中并不是用物理地址来标识一个内存块,文件,任务或动态装入模块的,相反的,WINDOWS API给这些项目分配确定的句柄,并将句柄返回给应用程序,然后通过句柄来进行操作。

但是必须注意的是程序每次从新启动,系统不能保证分配给这个程序的句柄还是原来的那个句柄,而且绝大多数情况的确不一样的。假如我们把进入电影院看电影看成是一个应用程序的启动运行,那么系统给应用程序分配的句柄总是不一样,这和每次电影院售给我们的门票总是不同的一个座位是一样的道理。

相关推荐

什么是句柄?

句柄(Handle)是一个是用来标识对象或者项目的标识符,可以用来描述窗体、文件等,值得注意的是句柄不能是常量。Windows之所以要设立句柄,根本上源于内存管理机制的问题,即虚拟地址。简而言之数据的地址需要变动,变动以后就需要有人来记录、管理变动,因此系统用句柄来记载数据地址的变更。最左素短语就是处于句型最左边的素短语的短语。素短语是一个递归的定义,至少含有一个终结符,并且除它自身之外不再含任何更小的素短语。扩展资料:句柄的使用句柄在Windows编程中是一个很重要的概念,在 Windows程序中并不是用物理地址来标识一个内存块、文件、任务或动态装入模块的。相反地,Windows API给这些项目分配确定的句柄,并将句柄返回给应用程序,然后通过句柄来进行操作。应该明白的是,句柄是一个标识符,是用来标识对象或者项目的。从数据类型上来看它只是一个16位的无符号整数。应用程序几乎总是通过调用一个Windows函数来获得一个句柄,之后其他的Windows函数就可以使用该句柄,以引用相应的对象。在 Windows编程中会用到大量的句柄。
2023-07-23 23:27:131

句柄是什么意思?

句柄是一个是用来标识对象或者项目的标识符,可以用来描述窗体、文件等,值得注意的是句柄不能是常量。最左素短语是句型中最左边的素短语。素短语是指至少含有一个终结符的短语,并且除自身外,不包含更小的素短语。句柄并不是一种具体的、固定不变的数据类型或实体,而是代表了程序设计中的一个广义的概念。句柄一般是指获取另一个对象的方法一个广义的指针。它的具体形式可能是一个整数、一个对象或就是一个真实的指针,而它的目的就是建立起与被访问对象之间的唯一的联系。扩展资料:句柄在 Windows编程中是一个很重要的概念,在 Windows程序中并不是用物理地址来标识一个内存块、文件、任务或动态装入模块的。相反地,Windows API给这些项目分配确定的句柄,并将句柄返回给应用程序,然后通过句柄来进行操作。应该明白的是,句柄是一个标识符,是用来标识对象或者项目的。从数据类型上来看它只是一个16位的无符号整数。应用程序几乎总是通过调用一个Windows函数来获得一个句柄,之后其他的Windows函数就可以使用该句柄,以引用相应的对象。在 Windows编程中会用到大量的句柄。
2023-07-23 23:27:281

句柄什么意思?

句柄有两种意思,其中第一种是指程序设计,第二种是指Windows编程。句柄实际上是一个数据,是一个Long (整长型)的数据。句柄是WONDOWS用来标识被应用程序所建立或使用的对象的唯一整数,WINDOWS使用各种各样的句柄标识诸如应用程序实例,窗口,控制,位图,GDI对象等等。WINDOWS句柄有点象C语言中的文件句柄。从上面的定义中的我们可以看到,句柄是一个标识符,是拿来标识对象或者项目的,它就象我们的姓名一样,每个人都会有一个,不同的人的姓名不一样,但是,也可能有一个名字和你一样的人。从数据类型上来看它只是一个16位的无符号整数。应用程序几乎总是通过调用一个WINDOWS函数来获得一个句柄,之后其他的WINDOWS函数就可以使用该句柄,以引用相应的对象。扩展资料:句柄的具体作用:Windows是一个以虚拟内存为基础的操作系统。在这种系统下,Windows内存管理器经常在内存中来回移动对象,依此来满足各种应用程序的内存需要。对象被移动意味着它的地址变化了。地址总是如此变化 ,为了寻找到对象,Windows操作系统为各应用程序腾出一些内存储地址,用来专门登记各应用对象在内存中的地址变化,而这个地址(存储单元的位置)本身是不变的。Windows内存管理器在移动对象在内存中的位置后,把对象新的地址告知这个句柄地址来保存。这样我们只需记住这个句柄地址就可以间接地知道对象具体在内存中的哪个位置。这个地址是在对象装载(Load)时由系统分配给的,当系统卸载时(Unload)又释放给系统。参考资料:百度百科-句柄
2023-07-23 23:27:446

句柄是什么

句柄是从英文翻译过来的词,原文叫handle,操纵杆的意思。翻译成句柄,很令人费解。从计算机软件核心来看,句柄是一个无符号整型数,它相当于一个指针地址,指向一个“资源块”,例如 HWND 型的 句柄,不同的句柄 指向 不同的 窗体资源块。从我们写程序来看,可以把它看成 窗 的 ID ( 标识),例如:HWND hwd1,hwd2;hwd1 就是 1号窗,hwd2 就是 2号窗。对 hwd1 的操作,就是对 1号窗 做操作。对 hwd2 的操作,就是对 2号窗 做操作。c/c++ 有多种多样的 句柄。我们把他们看成 ID 或 一样东西的别名,一个对象(object) 的别名。
2023-07-23 23:28:282

句柄是什么

句柄就是用来区分各种内存对象的唯一标识符号,是个32位整数。有些是整个系统唯一(如窗口句柄),有些是当前进程或线程中唯一(如线程句柄,全局的有另一个标识符)。详细的可分为许多种,都是以H开头的。在VB中使用时全部都用Long。常见的有窗口句柄(HWND),设备描述表句柄(HDC),内存句柄(HMEM),文件句柄,进程句柄,线程句柄,笔的类型句柄(HPEN),字体句柄(HFONT),区域句柄(HRGN)等等。在申请句柄时是要占用资源的,分三类SYSTEM、USER、GDI。而WINDOWS的资源是固定的,并不随内存的扩大而扩大,所以使用完以后一定要释放。>如果只用VB本身的代码一般是不会用到句柄的,但要是使用API函数的话,大多数会使用。再Windows系统中,句柄(我一直觉得这个词翻译得特别别扭)分为三大类:KernelHandle、UserHandle和应用程序自定义的Handle。KernelHandle实际上是进程内Kernel对象的指针表索引,Kernel对象包括进程、文件、信号等。但是MS为了掩盖着一事实,在系统启动时生成了一个所谓Obsfucator的值(其实应该是Obfuscator,MicrosoftBugs(R):),生成Handle后将Handle与这个值异或后返回给应用程序,所以看到的Handle都是一些很大而且毫无意义的数字。这些Handle和索引的对象是由KRNL32.DLL和VMM32.VXD共同管理的,所以称之为KernelHandle。UserHandle是用来标示窗口、DC等对象的,他们是真实的指针,但指向的并不是对象的开头,有一个偏移量。同样,这些对象是由USER32.DLL管理的。第三种Handle不过是应用程序自定义的一些索引之类的东东,具体的意义和应用程序相关
2023-07-23 23:28:351

句柄是什么

简单的说是无符号长整数,复杂的说是一种资源标识,有点类似资源指针,但不是指针,因为系统担心用户不恰当的使用指针造成严重后果。百科如下: HANDLE(句柄)是Windows操作系统中的一个概念。在Windows程序中,有各种各样的资源(窗口、图标、光标等),系统在创建这些资源时会为它们分配内存,并返回标示这些资源的标示号,即句柄。句柄指的是一个核心对象在某一个进程中的唯一索引,而不是指针。由于地址空间的限制,句柄所标识的内容对进程是不可见的,只能由操作系统通过进程句柄列表来进行维护。句柄列表:每个进程都要创建一个句柄列表,这些句柄指向各种系统资源,比如信号量,线程,和文件等,进程中的所有线程都可以访问这些资源。其实我们编程时输出一下句柄的值就可以发现这些值往往非常小(<100)。由此就可以看出句柄的性质了。
2023-07-23 23:28:441

什么是句柄?

句柄是一个(通常为32位的)整数,它代表一个对象。Windows中的句柄类似传统C或者MS-DOS程序设计中使用的文件句柄。程序几乎总是通过呼叫Windows函数取得句柄。程序在其它Windows函数中使用这个句柄,以使用它代表的对象。 在 Windows 中,窗口可以有许多种。窗口可以是屏幕上的一块矩形封闭区域,比如您熟悉的应用程序窗口。窗体上的控件(例如列表框或滚动条)也可以是窗口,但并不是所有类型的控件都是窗口。桌面上的图标和桌面本身也是窗口。因为所有这些类型的对象都是窗口,所以 Windows 可以用类似的方式处理它们。Windows 给每个窗口一个唯一的句柄,通过句柄操纵该窗口。许多 API 函数可返回句柄或者接受句柄作参数。创建窗口时,Windows 给它指派一个句柄,窗口消失后句柄被释放。
2023-07-23 23:28:528

句柄是什么

句柄就是一个序号。。用于管理内核对象的,比如你打开一个文件,就建立一个文件内核对象,这个内核对象就是一块内存结构,里面有文件路径,文件大小,当前文件指针等等信息。系统里面会打开很多的文件,就有很多很多的内核对象,这时候就建立一个句柄表的东西。表中每一个元素,都是一个内核对象的起始地址,然后给每一个对象对应一个序号。 这个序号就是我们说的句柄。//句柄表类似于这样的结构,那个序号就是句柄了-----------------------------------0 第一个内核对象的地址1 第二个内核对象的地址2 第三个内核对象的地址-------------------------------------一定要注意它是序号,不是内核对象。
2023-07-23 23:29:072

句柄是什么啊?

分类: 电脑/网络 解析: 一、书上定义: <<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)
2023-07-23 23:29:131

什么是句柄?以及什么是句柄图形,窗口句柄等?可否为我形象的说明?谢谢!

1)句柄在Windows系统中,是一个32位的整数;2)Windows系统中很多资源(内存中)(如打开的文件,窗口,线程对象,进程对象等)都是用句柄来表示;3)句柄相当于对象的身份证,每一个对象的句柄,在系统中唯一的;4)使用句柄,对操作系统来说,可以简化接口函数的设计(整数标识不同的资源对象);5)每个应用程序启动,操作系统底层会为其创建句柄表。
2023-07-23 23:29:323

windows 句柄到底是什么

句柄,是整个windows编程的基础。一个句柄是指使用的一个唯一的整数值,即一个四字节长的数值,来标志应用程序中的不同对象和同类对象中的不同的实例,诸如,一个窗口,按钮,图标,滚动条,输出设备,控件或者文件等。应用程序能够通过句柄访问相应的对象的信息,但是句柄不是一个指针,程序不能利用句柄来直接阅读文件中的信息。如果句柄不用在I/O文件中,它是毫无用处的。句柄是windows用来标志应用程序中建立的或是使用的唯一整数,windows使用了大量的句柄来标志很多对象。windows之所以要设立句柄,根本上源于内存管理机制的问题-虚拟地址,简而言之数据的地址需要变动,变动以后就需要有人来记录管理变动,(就好像户籍管理一样),因此系统用句柄来记载数据地址的变更。数据对象加载进入内存中之后即获得了地址,但是这个地址并不是固定的,(至于为什么以及什么情况下变动具体需要大家研究虚拟地址的原理与机制我这里只提我确定知道的例子)数据对象会根据需要在内存与硬盘之间游弋移动(例如不常用的数据会为常用数据让出其占用的内存空间进而被淘汰进硬盘中的虚拟内存之中以优化配置整体系统的资源进而提升效率性能),因此其物理地址总是变动的,那么作为管理者则必须对管理对象所发生的变化了如指掌才行,因此系统为进程分配固定的地址(句柄)来存储进程下的数据对象变化后的地址也就是当前的地址,其实设计机制很简单:系统的某个部门移动了对象的地址后,同时上报给句柄所属部门管理者,管理者将改动写入句柄即可。该数据被重新起用时去其所属句柄内按内容存取即可。句柄,英文:HANDLE,在Windows编程中是一个很重要的概念,在许多地方都扮演着重要的角色。但由此而产生的句柄概念也大同小异,比如:《MicrosoftWindows3Developer"sWorkshop》(MicrosoftPress,byRichardWilton)一书中句柄的概念是:在Windows环境中,句柄是用来标识项目的。在程序设计中,句柄是一种特殊的智能指针。当一个应用程序要引用其他系统(如数据库、操作系统)所管理的内存块或对象时,就要使用句柄。句柄与普通指针的区别在于,指针包含的是引用对象的内存地址,而句柄则是由系统所管理的引用标识,该标识可以被系统重新定位到一个内存地址上。这种间接访问对象的模式增强了系统对引用对象的控制。在上世纪80年代的操作系统(如MacOS和Windows)的内存管理中,句柄被广泛应用。Unix系统的文件描述符基本上也属于句柄。和其它桌面环境一样,WindowsAPI大量使用句柄来标识系统中的对象,并建立操作系统与用户空间之间的通信渠道。例如,桌面上的一个窗体由一个HWND类型的句柄来标识。如今,内存容量的增大和虚拟内存算法使得更简单的指针愈加受到青睐,而指向另一指针的那类句柄受到冷淡。尽管如此,许多操作系统仍然把指向私有对象的指针以及进程传递给客户端的内部数组下标称为句柄。
2023-07-23 23:29:381

句柄是什么意思

把柄的解释 (1) [handle] (2) 器物上的把儿柄 梭镖把柄 (3) 喻指进行交涉或要挟的凭证(如借口或 机会 ) 给人抓住把柄 详细解释 (1).柄。 章炳麟 《新方言·释器》 :“ 《诗·小雅》 传:‘秉,把也。"古以‘秉"为‘柄",故今谓‘柄"为‘把柄",或直言‘把"。” 柳杞 《好年胜景》 :“那倒垂着的柳枝上挂着一把铁笊篱,笊篱的把柄向上 招摇 着,向下垂着圆圆的网盘。” 张勤 《民兵营长》 :“梭镖把柄上还吊着一束红缨子。” (2).喻指凭证。多指进行交涉或要挟的凭证。 《二刻拍案惊奇》 卷十六:“我交了这一主大 银子 , 难道 不要讨一些把柄 回去 ?” 《红楼梦》 第二一回:“这是 一辈 子的把柄儿!好便罢,不好偺们就抖出来!” 巴金 《秋》 一:“ 最好 我们这一房的人不要给人家抓住说闲话的把柄。” (3). 操守 ;主意。 明 高攀龙 《高子遗书·语五十》 :“当得大忿懥、大恐惧、大 忧患 、大好乐而不动,乃真把柄也。” 《警世通言·况太守断死孩儿》 :“又有一种男不慕色,女不怀春,志比精金,心如坚石,没来由被旁人播弄,设圈设套,一时失了把柄,堕其术中,事 后悔 之无及。” (4).把持; 霸占 。 《元典章· 户部 八·盐课》 :“教人买出盐来把柄著行市,掯勒百姓。” 元 武汉臣 《老生儿》 第三折:“如今那好家财则教我那 姐夫 张郎 把柄,今日着 刘引孙 剗地受苦。” 词语分解 把的解释 把 ǎ 拿,抓住:把酒(拿着酒杯)。把玩(拿着赏玩)。 控制 ,掌握:把握。把舵。 看守:把守。把门儿。 自行车、手推车等的手柄:车把。 可以用手拿的小捆:秫秸把儿。 专权,一手独揽:把持大权。 从后托 柄的解释 柄 ǐ 植物的花、叶或果实跟枝茎连着的部分: 叶柄 。花柄。 器物上的把儿:刀柄。勺柄。 量词, 用于 有柄物:一柄伞。 喻在言行上被人抓住的材料:把(?)柄。话柄。 执掌:柄政(执掌政权)。柄国。 权:国柄
2023-07-23 23:29:471

什么是句柄?举点实际例子呗!!

对句柄本质的探讨 我觉得自己对于指针理解比较透彻了,但关于句柄的理解,就容易犯理解成指针的错误. 一般说:句柄是资源(或项目)的唯一标识. 俺觉得这其实说得很不明白的,现在我想问的是句柄到底是怎么标识资源的: 1,句柄在32位机上是32位整型吗? 2,当HANDLE handle;声明句柄时,handle是它的标识符吗?如int a;则a就是标识符. 3,既然句柄是一个整型值,那么,它在内存的什么位置呢?栈上吗? 4,句柄是通过在它所占内存中记录对象在内存中的首地址来"标识"对象的吗?如果是,那与指针在这方面就完全一样了. 可能有点玄,大家谈论下吧. --------------------------------------------------------------- 对句柄的认识 之前在编写MFC程序的时候,有时会碰到句柄这一概念,由于对它一直不是很重视,所以并没有主动去了解它.随着不断深入学习MFC,特别是看完候先生的<<深入浅出MFC>>后,对句柄的实质产生了很大的兴趣,于是到处收集资料,现在总结一下. handle的中文意思主要有多种,一种是作为名词:柄,把柄;一种是作为动词:处理.硬要从中文意思来说的话,这两种中文意思都可以用来勉强解释句柄.例如一个锅的手柄,你只要抓住了它,你就可以很好地操作那个锅,不过很明显你只能通过锅的手柄来做一些诸如炒菜之类的事,你不可能是因为抓住了锅的手柄才能去看电视.不能的物体都会至少有一个属于它的"手柄".在MFC里面,有很多对象,例如对话框,窗口,画笔,显示器,打印机等,每个对象都会产生一个属于它自己的句柄.oh!慢着,似乎还没说清楚句柄的本质,下面再作详细的解说吧. 如果查看各种HANDLE的定义,如HDC,HPEN,HINSTANCE等等,你会发现有这样一个声明: DECLARE_HANDLE(HDC); 再把DECLARE_HANDLE这个宏展开来看一下: #define DECLARE_HANDLE(name) struct name##__ { int unused; }; typedef struct name##__ *name 这是什么意思?用HDC替换上面的name来看看,我们就得到了下面的一段代码: struct HDC__ { int unused; }; typedef struct HDC__ *HDC oh,原来句柄就是一个指向某一结构的指针,这个结构体只有一个成员,它是一个整数(不知为什么MS要把这个成员叫做unused,难道真的没有用吗?). 嗯,我们再看一个HANDLE的定义,在winnt.h头文件中,我们看到了HANDLE的定义: typedef PVOID HANDEL; PVOID是什么?再看它的定义: typedef void *PVOID; 真相出来了,原来HANDLE不过是一个指向void型,即无类型的指针,嗯,目前的指针是32位的吧.其实也不能说HANDLE是一种指针,它只充当一种索引的作用.真的很难解释HANDLE是什么,再往下看看,只能意会吧,呵呵. 知道了HANDLE的本质(一个32位的整数,用16进制表示),再来说说HANDLE的作用.看我前面第二段的例子,你可以了解到为了控制一个物体,你需要找到它的"手柄".HANDLE就是充当win32下各种"物体"的"手柄".事实上,很多windows API都需要一个HANDLE作为输入参数,这是因为API需要和一些你看不见的对象打交道,这些对象是不能被你所移动或修改的,所以不能给你一个指针来对它进行操作.oh,指针的确是个好东西,它所拥有的能力实在太强大了,但所谓能力越大,责任越大,使用指针的时候千万要小心,不然会造成毁灭性的错误.所以,为了安全,还是给你一个HANDLE吧,通过这个HANDLE,你就可以对那些对象进行一些处理.HANDLE在这里充当什么角色呢?应该算是一个中间人吧,HANDLE是固定的,它不会变,但是对象的地址会变,当对象在内存中的位置发生改变后,我们不能通过之前的对象指针找到对象,怎么办呢?嗯,这时候HANDLE的用处就出来了,HANDLE就是用来记录对象的最新地址的.有点明白了吧?换一种说法吧,嗯,其实就是你知道HANDLE在哪里,但你不知道对象在哪里,而HANDLE知道对象在哪里,所以,只要你知道了HANDLE在哪里,你就能找到对象(尽管你还是不知那个对象住在内存的哪个地方,不过找到它就行了,不是吗?).嗯,是不是有点像索引的作用呢?为什么不给我们知道对象在内存中的位置呢?呵呵,操作系统怕你对它进行一些不利的操作啊.反正你通过HANDLE能让对象做它应该做的事,这就足够了.这就是封装吧,MS最喜欢做的事情,呵呵. 其实对于HANDLE的定义,MS公司也不能说得清清楚楚,把HANDLE翻译成句柄也是不太合适的,但有时就是这样,英文能理解的东西,翻译到中文反而就混乱了,所以"句柄"这个名词比较适合初学者,如我.那些有丰富编程经验的人一定不喜欢使用"句柄"这个名词吧,还是用handle这个原版英文单词比较容易理解
2023-07-23 23:29:553

Java的句柄是什么意思?

句柄是系统分配给你操作文件的权限,你操作所有的文件都需要用到系统分配给你的句柄.比如说FileInputStreamfin=newFileInputStream("c:123.txt");fin就是你申请后,系统分配给你c:123.txt的句柄.你通过FIN来调用这个文件.
2023-07-23 23:30:041

mfc中句柄到底是什么概念,为什么要叫句柄?

MFC中有句柄,是因为句柄是windows编程的基本概念(不是MFC的,也不是C++的),因为windows有个基础库,不止C++支持,很多windows下的编程语言都支持,因此,MFC也必须支持这个句柄。句柄,其实就是一个内存地址标记,用来标记一个对象(包括进程、窗口、设备DC、画笔等对象),记录了这些对象的内存首地址。从概念上,和指针差不多,但因为不是C++的东西,不能直接当做指针使用。
2023-07-23 23:30:101

句柄是一个什么类型的值?

句柄是一种特殊的智能指针。句柄,是整个Windows编程的基础。一个句柄是指使用的一个唯一的整数值,即一个4字节(64位程序中为8字节)长的数值,来标识应用程序中的不同对象和同类中的不同的实例,诸如,一个窗口,按钮,图标,滚动条,输出设备,控件或者文件等。应用程序能够通过句柄访问相应的对象的信息,但是句柄不是一个指针,程序不能利用句柄来直接阅读文件中的信息。如果句柄不在I/O文件中,它是毫无用处的。 句柄是Windows用来标志应用程序中建立的或是使用的唯一整数,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)。语句:HINSTANCE hInstance;可以改成:HANDLE hInstance;上面的2条语句都是对的,表达的是一个意义。一个WINDOWS应用程序可以用不同的方法获得一个特定项的句柄。许多API函数,诸如CreateWindow,GlobalAlloc,OpenFile的返回值都是一个句柄值。另外,WINDOWS也能通过应用程序的引出函数将一个句柄作为参数传送给应用程序,应用程序一旦获得了一个确定项的句柄,便可在WINDOWS环境下的任何地方对这个句柄进行操作。其实句柄的大量使用已经影响到了每一个WINDOWS的程序设计。一个句柄,只有当唯一地确定了一个项目的时候,它才开始有意义。句柄对应着项目表中的一项,而只有WINDOWS本身才能直接存取这个表,应用程序只能通过API函数来处理不同的句柄。举个例子来说吧,比如:我们可以为我们的应用程序申请一块内存块,通过调用API函数GlobalAlloc,来返回一个句柄值:hMem=GlobalAlloc(......);现在的hMem是个索引值 不是物理地址,应用程序还不能直接存取这块内存。这儿还有一句题外话,是关于操作系统的内存管理的。一般情况下操作系统给应用程序分配的内存块都是可以被移动的或者是可以丢弃的,这样能使有限的内存资源得到充分利用。所以,我们刚开始分配到的那块内存的地址是不确定的,因为它是可以被移动的,所以得先锁定那块内存块,这里应用程序需要调用API函数GlobalLock函数来锁定句柄。如下:lpMem=GlobalLock(hMem);这样应用程序才能存取这块内存。作用:句柄是一个标识符,是拿来标识对象或者项目的。如果想更透彻一点地认识句柄,我可以告诉大家,句柄类似指向指针的指针,仅仅是类似,通过句柄可以找到对应的数据,但是不是二级指针。我们知道,所谓指针是一种内存地址。应用程序启动后,组成这个程序的各对象是驻留在内存中的。简单地理解,似乎我们只要获知这个内存的首地址,就可以随时用这个地址访问对象了。如果您真的这样认为,那您可就大错特错了。我们知道,Windows是一个以虚拟内存为基础的操作系统。在这种系统环境下,Windows内存管理器经常在内存中来回移动对象,以此来满足各种应用程序的内存需要。对象被移动意味着它的地址变化了。如果地址总是如此变化,我们该到哪里去找那一个对象呢?为了解决这个问题,Windows操作系统为全体应用程序腾出一些内存单元,用来专门登记各应用程序的对象在内存中的地址的变化,而前者的物理地址在系统运行期间是始终保持不变的。Windows内存管理器移动了对象在内存中的位置后,会把该对象新的地址及时地告知给对应的句柄进行更新。这样我们只要知道这个句柄,就可以间接地知道对象具体在内存中的哪个位置了。这个地址是在对象装载(Load)时由系统分配给的,当对象卸载时(Unload)又释放给系统。
2023-07-23 23:30:203

易语言窗口句柄是什么

不会就学。天才都是后天培养的。其实C语言并不很难。我推荐你去www.zixue7.com看C语言的视频教程。我也推荐一本C语言书籍电子版,下载地址http://yunpan.cn/cJLSaaLny5Yzu(提取码:05ea)
2023-07-23 23:30:273

所谓socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄。中句柄 是什么意思?

句柄是一个标识符,是拿来标识对象或者项目的,它就象我们的姓名一样,每个人都会有一个,不同的人的姓名不一样,但是,也可能有一个名字和你一样的人。从数据类型上来看它只是一个16位的无符号整数。应用程序几乎总是通过调用一个WINDOWS函数来获得一个句柄,之后其他的WINDOWS函数就可以使用该句柄,以引用相应的对象。在WINDOWS编程中会用到大量的句柄,比如:HINSTANCE(实例句柄),HBITMAP(位图句柄),HDC(设备描述表句柄),HICON(图标句柄)等等,这当中还有一个通用的句柄,就是HANDLE 呵呵 学编程的 ? 偶也是 回答完毕!
2023-07-23 23:30:361

函数句柄和指针的区别是什么

句柄实际上是一种指向某种资源的指针,但与指针又有所不同:指针对应着一个数据在内存中的地址,得到了指针就可以自由地修改该数据。Windows并不希望一般程序修改其内部数据结构,因为这样太不安全。所以Windows给每个使用GlobalAlloc等函数声明的内存区域指定一个句柄(本质上仍是一个指针,但不要直接操作它),平时你只是在调用API函数时利用这个句柄来说明要操作哪段内存。当你需要对某个内存进行直接操作时,可以使用GlobalLock锁住这段内存并获得指针来直接进行操作。“句柄”(handle),handle的本意是把柄,把手的意思。是你与操作系统打交道的东西。举个例子:比如你做了亏心事(我说的是比如,呵呵),不幸让我抓住了把柄,那么我让你做什么你就得做什么,因为你的把柄在我这。我们编程的时候也是这样,比如我们要想操纵一个窗口,那我们就必须“抓住它的把柄”,只有这样,我们才能改变它的属性,改变它的式样,甚至销毁它(狠了点儿)。我们再引用一个通俗一点的例子,比如你考上了大学,入学后,学校(操作系统)会给你一个学生证号。注意,这个号码是学校指定的,你无法自选。有了这个号码(学生证,假设一证多用)就可以享受学校提供的服务:如你就可以去图书馆借书,去食堂吃饭,去教室上课等等。但你不能到食堂里买啤酒,因为学校不允许这种服务。而在计算机中系统提供的服务就是API调用,你有了HANDLE,就可以理直气壮地向系统提出调用API的服务。而指针的权力就大多了,有了指针你可以到处去喝酒,打架,学校(操作系统)管不着,所以句柄和指针的区别在于句柄只能调用系统提供的服务。而句柄虽然是一个能相互区别的号码,但与我们普通的ID号又有区别,普通的ID号是可以由程序员自己定义的,而句柄不行,它是对象生成时系统指定的,是为了区别系统中存在的各个对象,这个句柄不是由程序员赋给的。实际应用中,最常用的就是文件句柄和窗口句柄。例如,窗口句柄的值是一个长整数,每个窗体都用一个句柄来表示。所以句柄是不会重复的,很多的函数都会用到窗体的句柄。 转百度
2023-07-23 23:30:531

句柄和伪句柄有什么区别?~

评论 ┆ 举报最佳答案此答案由提问者自己选择,并不代表百度知道知识人的观点回答:爱你十万年新手9月28日 13:48 从Visual C++的头文件来看,HANDLE被typedef为void的指针,那是指向未确定数据结构的指针:typedef void* HANDLE; 但是这并不说明任何问题,因为句柄远远不只是指向任意数据类型的指针。它是指向数据对象指针的指针。句柄的使用来源于早期的Windows,当时它只能在有限内存的机器中允许(因为当时内存昂贵也存储小)。为了留出足够的空间内存以运行其他程序,Windows经常将对象在内存中移动。但是如果进程已经有了指向该对象的指针,移动该对象就将使得指针无效。 为了处理这一问题,Microsoft使用系统指针以跟踪对象。程序不是直接使用指针,而是使用句柄,让它引用包含真实对象的地址。通过这一方法,Windows可以安全按照需要移动对象,然后更新参考中的指针,从而允许进程安全地访问对象。 当进程需要使用句柄访问对象时,它调用GlobalLocl()以锁定内存的对象。这时Windows将返回对象的实际地址,从而进程可以安全读写该对象。只要对象被进程锁定,Windows就不会去移动它。句柄包含的不只是对象的地址;比如,它还包含锁计数器,标识着多少进程已经请求过对象的地址。只要这个锁计数器大于0,Windows就不会移动该对象。 这个思想扩展到大部分对象上,包括文件,也由其句柄标识。 这时,句柄就是指向对象的指针,而该对象包含指向另一个对象的指针。这对于现在的机器有些奇怪。当Windows从单个分时共享程序向多任务操作系统转变时,有如此之多的遗留代码需要在新的操作系统上运行,于是句柄在这一转变中保留下来了。揪错 ┆ 评论 ┆ 举报
2023-07-23 23:31:001

按键精灵句柄的作用是什么?

WINDOWS每打开一个窗口(包含程序运行时的窗口),以及每个窗口内的控件(按扭,输入框等)都会随机分配一个号码,这个号码就是这一窗口或控件的句柄。获得这个句柄就可以实现在后台进行针对这个窗口(程序)的操作。例如:在这一窗口中输入一段文字,在某一座标进行单击,双击等。提取句柄的方法可以参考按键精灵的帮助.也可以全部命令--插件命令--Windows窗口插件找到。例如:Hwnd = Plugin.Window.Find(0, "无标题 - 记事本")"查找当前打开的程序中标题为"无标题 - 记事本"的窗口,并将找到的句柄号存进Hwnd变量中,以便后面调用。作用从广义上讲,如果做了某些事或者某些物品在另外一件事上或者物品上起到了改变的效果称之为起作用,而作用在某种意义上说可以等同于效果。
2023-07-23 23:31:091

java引用和句柄的区别和联系是什么

关于java中的引用 我觉得在"think in java"这本书里面讲得很好 在那本书里 他们把引用叫做"句柄"(Handle) java中就是用"句柄"来操纵对象的 在java中 任何东西都可以看作是对象 因此,我们可采用一种统一的语法,任何地方均可照搬不误。但要注意...
2023-07-23 23:31:171

什么是填充句柄

对于大多数序列,我们都可以使用自动填充功能来进行操作,在Excel中便是使用“填充句柄”来自动填充。所谓句柄,是位于当前活动单元格右下方的黑色方块,你可以用鼠标拖动它进行自动填充。
2023-07-23 23:31:262

请问什么叫对象引用句柄

句柄是WONDOWS用来标识被应用程序所建立或使用的对象的唯一整数,WINDOWS使用各种各样的句柄标识诸如应用程序实例,窗口,控制,位图,GDI对象等等。WINDOWS句柄有点象C语言中的文件句柄。句柄就是WINDOWS的一个标识符,是用来标识对象或者项目的,从数据类型上来看它只是一个16位的无符号整数。应用程序几乎总是通过调用一个WINDOWS函数来获得一个句柄,之后其他的WINDOWS函数就可以使用该句柄,以引用相应的对象。如果想更透彻一点地认识句柄,句柄是一种指向指针的指针。我们知道,所谓指针是一种内存地址。应用程序启动后,组成这个程序的各对象是驻留在内存中的。如果简单地理解,似乎我们只要获知这个内存的首地址,那么就可以随时用这个地址访问对象。但是,如果您真的这样认为,那么您就大错特错了。我们知道,Windows是一个以虚拟内存为基础的操作系统。在这种系统环境下,Windows内存管理器经常在内存中来回移动对象,依此来满足各种应用程序的内存需要。对象被移动意味着它的地址变化了。如果地址总是如此变化,我们该到哪里去找该对象呢?为了解决这个问题,Windows操作系统为各应用程序腾出一些内存储地址,用来专门登记各应用对象在内存中的地址变化,而这个地址(存储单元的位置)本身是不变的。Windows内存管理器在移动对象在内存中的位置后,把对象新的地址告知这个句柄地址来保存。这样我们只需记住这个句柄地址就可以间接地知道对象具体在内存中的哪个位置。这个地址是在对象装载(Load)时由系统分配给的,当系统卸载时(Unload)又释放给系统。所以,句柄地址(稳定)→记载着对象在内存中的地址→对象在内存中的地址(不稳定)→实际对象本质:WINDOWS程序中并不是用物理地址来标识一个内存块,文件,任务或动态装入模块的,相反的,WINDOWS API给这些项目分配确定的句柄,并将句柄返回给应用程序,然后通过句柄来进行操作。但是必须注意的是程序每次重新启动,系统不能保证分配给这个程序的句柄还是原来的那个句柄,而且绝大多数情况的确不一样的。假如我们把进入电影院看电影看成是一个应用程序的启动运行,那么系统给应用程序分配的句柄总是不一样,这和每次电影院售给我们的门票总是不同的一个座位是一样的道理!
2023-07-23 23:31:331

安装CAD出现句柄无效是怎么回事??怎么解决??句柄是什么东东来的?越通俗越详细越好!

句柄是Windows用来标识“应用程序”建立或使用的“对象”的唯一整数; 应用程序每次启动,系统不能保证分配给这个应用程序的句柄还是原来的那个句柄,而且绝大多数情况的确不一样的。 假如我们把进入电影院看电影看成是一个应用程序的启动运行,那么系统给应用程序分配的句柄是电影票,而每次电影院售给我们的门票总是不同的一个座位是一样的道理。 句柄无效应该是应用程序启动失败,你用右键单击应用程序运行看下能不能解决,如果不能解决,那么应用程序有问题无法打开了,建议你重新下载应用程序。
2023-07-23 23:31:412

句柄是什么意思,详细解释下

句柄是编写工具游戏外挂所用到得窗口ID游戏窗口进程,比如按键精灵所用到的就是获取游戏窗口(句柄)进程ID E语言编写软件很多地方都会用到句柄 自己慢慢学
2023-07-23 23:31:481

C++的宏与句柄什么关系,分别指什么

宏和句柄没关系.宏是预处理任务.句柄是windows用来标识资源的数据类型.
2023-07-23 23:31:551

求解那个cpu句柄数代表什么,都几百万了

句柄是一个标识符,是拿来标识对象或者项目的。应用程序几乎总是通过调用一个WINDOWS函数来获得一个句柄,之后其他的WINDOWS函数就可以使用该句柄,以引用相应的对象。
2023-07-23 23:32:031

Java中的句柄是什么意思?

句柄是系统分配给你操作文件的权限,你操作所有的文件都需要用到系统分配给你的句柄.比如说FileInputStreamfin=newFileInputStream("c:123.txt");fin就是你申请后,系统分配给你c:123.txt的句柄.你通过FIN来调用这个文件.
2023-07-23 23:32:221

编译原理中的句柄是什么意思

这里的句柄是文法概念,同操作系统用于标记对象的句柄是不同的概念,句柄一般指直接短语中的最左直接短语。好吧,这样说可能并不容易理解,我们来换一种方法解释。(其实如果有图解释起来更容易)首先要问一个问题句柄用在哪里,为什么有这个概念?我们知道编译原理学习的最终目的是构建一个编译器,一个编译器是由前端,优化器和后端三部分组成的。而前端主要包括词法分析和语法分析(可能还有一个语义分析中间代码生成)。句柄就属于语法分析技术的概念。语法分析器(Parser)有两种实现方法自顶向下(Top-Down)和自底向上(Bottom-up),句柄用于自底向上的实现技术中。既然你学到了这里,应该已经明白了何为语法树,那么你很容易就可以理解所,谓自底向上就是从具体的输入出发倒推句型,直到根节点。想象一下,你一个一个扫描输入发现了一个子串满足某个产生式,然后进行归约(向上攀爬一层),不断重复这个过程,直到开始符号。在这个过程中,你发现的这个子串就是一个句柄。PS:限于时间,没有用图来回答你的问题,望理解。
2023-07-23 23:32:312

MATLAB中图形句柄是什么意思

句柄是matlab语言独有的参数,相当于C语言的指针。句柄分为多种,如函数柄,对象柄,图形柄等。图形句柄就指一个图形,在生成图形时同时得到一代号,如语句 h=plot(x,y),h 就是一个图形句柄,在后来的某一个地方就可用h代表这个图,如 set(h,....),对这个图形进行再设置。
2023-07-23 23:33:172

句柄到底是什么(句柄是逻辑指针,或者是指向结构体

句柄并不是指针指针保存的是一个物件的地址,你可以通过地址找到它;句柄只是个编号,通过编号是找不到它的
2023-07-23 23:33:251

Excel中,填充柄和填充句柄有什么区别?

有一点差别。填充柄是鼠标左键按住往下拉,叫拖动填充柄。田中句柄是鼠标双击向下填充。但是左右侧无数据的时候填充句柄没有作用。填充柄可以。
2023-07-23 23:33:341

C#中什么是句柄

句柄,就是资源的唯一可辨别标志, 其数据是一个四字节整型,只有当资源在内存中被系统分配过后才产生,例如:应用程序实例是一个资源,当你运行这个程序的时候,操作系统就为实例分配了内存空间,如何让操作系统管理这个对象呢?windows的做法就是发给这个程序实例一个通行证(想像为句柄),实例拿到这个通行证,就可以调用windows的API或其他资源了,就像学生入学,学校给发个通行证,你就可以去食堂,图书馆了,但你不可以随便进出校长办公室,这点跟指针不一样,有了指针,你可以进出任何地方,但句柄是有权限的,这由系统决定。 窗口是一种资源,当窗口被创建后,产生窗口句柄 一张图片,在程序中也就是位图句柄
2023-07-23 23:33:435

我是一个VB爱好者,常看书上写着,什么什么返回一个句柄,句柄是什么意思啊?

句柄是Windows给每个显示出来的窗口(逻辑意义上的,一个控件也算一个窗口)分配的一个ID。一个句柄可以唯一确定一个窗口。句柄是由系统维护的,不和某种语言挂钩(当然也可以认为和C++挂钩……因为windows是C语言和C++的作品)MSDN说,句柄是由操作环境定义的一个唯一的整数值,它被程序用来标识或者切换到对象,如窗体或控件等。handle(句柄)一个赋给窗口的数值,供操作系统跟踪窗口属性。在 C 或 C++ 库中,一个句柄是一个指针。
2023-07-23 23:33:573

什么是句柄?

句柄(Handle)是一个是用来标识对象或者项目的标识符,可以用来描述窗体、文件等,值得注意的是句柄不能是常量。Windows之所以要设立句柄,根本上源于内存管理机制的问题,即虚拟地址。简而言之数据的地址需要变动,变动以后就需要有人来记录、管理变动,因此系统用句柄来记载数据地址的变更。最左素短语就是处于句型最左边的素短语的短语。素短语是一个递归的定义,至少含有一个终结符,并且除它自身之外不再含任何更小的素短语。扩展资料:句柄的使用句柄在Windows编程中是一个很重要的概念,在 Windows程序中并不是用物理地址来标识一个内存块、文件、任务或动态装入模块的。相反地,Windows API给这些项目分配确定的句柄,并将句柄返回给应用程序,然后通过句柄来进行操作。应该明白的是,句柄是一个标识符,是用来标识对象或者项目的。从数据类型上来看它只是一个16位的无符号整数。应用程序几乎总是通过调用一个Windows函数来获得一个句柄,之后其他的Windows函数就可以使用该句柄,以引用相应的对象。在 Windows编程中会用到大量的句柄。
2023-07-23 23:34:201

句柄是什么意思?

句柄是一个是用来标识对象或者项目的标识符,可以用来描述窗体、文件等,值得注意的是句柄不能是常量。最左素短语是句型中最左边的素短语。素短语是指至少含有一个终结符的短语,并且除自身外,不包含更小的素短语。句柄并不是一种具体的、固定不变的数据类型或实体,而是代表了程序设计中的一个广义的概念。句柄一般是指获取另一个对象的方法一个广义的指针。它的具体形式可能是一个整数、一个对象或就是一个真实的指针,而它的目的就是建立起与被访问对象之间的唯一的联系。扩展资料:句柄在 Windows编程中是一个很重要的概念,在 Windows程序中并不是用物理地址来标识一个内存块、文件、任务或动态装入模块的。相反地,Windows API给这些项目分配确定的句柄,并将句柄返回给应用程序,然后通过句柄来进行操作。应该明白的是,句柄是一个标识符,是用来标识对象或者项目的。从数据类型上来看它只是一个16位的无符号整数。应用程序几乎总是通过调用一个Windows函数来获得一个句柄,之后其他的Windows函数就可以使用该句柄,以引用相应的对象。在 Windows编程中会用到大量的句柄。
2023-07-23 23:34:351

句柄什么意思

句柄有两种意思,其中第一种是指程序设计,第二种是指Windows编程。句柄实际上是一个数据,是一个Long (整长型)的数据。句柄是WONDOWS用来标识被应用程序所建立或使用的对象的唯一整数,WINDOWS使用各种各样的句柄标识诸如应用程序实例,窗口,控制,位图,GDI对象等等。WINDOWS句柄有点象C语言中的文件句柄。从上面的定义中的我们可以看到,句柄是一个标识符,是拿来标识对象或者项目的,它就象我们的姓名一样,每个人都会有一个,不同的人的姓名不一样,但是,也可能有一个名字和你一样的人。从数据类型上来看它只是一个16位的无符号整数。应用程序几乎总是通过调用一个WINDOWS函数来获得一个句柄,之后其他的WINDOWS函数就可以使用该句柄,以引用相应的对象。扩展资料:句柄的具体作用:Windows是一个以虚拟内存为基础的操作系统。在这种系统下,Windows内存管理器经常在内存中来回移动对象,依此来满足各种应用程序的内存需要。对象被移动意味着它的地址变化了。地址总是如此变化 ,为了寻找到对象,Windows操作系统为各应用程序腾出一些内存储地址,用来专门登记各应用对象在内存中的地址变化,而这个地址(存储单元的位置)本身是不变的。Windows内存管理器在移动对象在内存中的位置后,把对象新的地址告知这个句柄地址来保存。这样我们只需记住这个句柄地址就可以间接地知道对象具体在内存中的哪个位置。这个地址是在对象装载(Load)时由系统分配给的,当系统卸载时(Unload)又释放给系统。参考资料:百度百科-句柄
2023-07-23 23:34:471

给解释一下句柄是什么意思!

句柄,是整个windows编程的基础。一个句柄是指使用的一个唯一的整数值,即一个四字节长的数值,来标志应用程序中的不同对象和同类对象中的不同的实例,诸如,一个窗口,按钮,图标,滚动条,输出设备,控件或者文件等。应用程序能够通过句柄访问相应的对象的信息,但是句柄不是一个指针,程序不能利用它句柄来直接阅读文件中的信息。如果句柄不用在I/O文件中,它是毫无用处的。 句柄是windows用来标志应用程序中建立的或是使用的唯一整数,windows使用了大量的句柄来标志很多对象。这是操作系统里的一个概念,句柄是WONDOWS用来标识被应用程序所建立或使用的对象的唯一整数,WINDOWS使用各种各样的句柄标识诸如应用程序实例,窗口,控制,位图,GDI对象等等。WINDOWS句柄有点象C语言中的文件句柄。 从上面的定义中的我们可以看到,句柄是一个标识符,是拿来标识对象或者项目的,它就象我们的姓名一样,每个人都会有一个,不同的人的姓名不一样,但是,也可能有一个名字和你一样的人。从数据类型上来看它只是一个16位的无符号整数。应用程序几乎总是通过调用一个WINDOWS函数来获得一个句柄,之后其他的WINDOWS函数就可以使用该句柄,以引用相应的对象。如果想更透彻一点地认识句柄,我可以告诉大家,句柄是一种指向指针的指针。我们知道,所谓指针是一种内存地址。应用程序启动后,组成这个程序的各对象是住留在内存的。如果简单地理解,似乎我们只要获知这个内存的首地址,那么就可以随时用这个地址访问对象。但是,如果您真的这样认为,那么您就大错特错了。我们知道,Windows是一个以虚拟内存为基础的操作系统。在这种系统环境下,Windows内存管理器经常在内存中来回移动对象,依此来满足各种应用程序的内存需要。对象被移动意味着它的地址变化了。如果地址总是如此变化,我们该到哪里去找该对象呢?为了解决这个问题,Windows操作系统为各应用程序腾出一些内存储地址,用来专门登记各应用对象在内存中的地址变化,而这个地址(存储单元的位置)本身是不变的。Windows内存管理器在移动对象在内存中的位置后,把对象新的地址告知这个句柄地址来保存。这样我们只需记住这个句柄地址就可以间接地知道对象具体在内存中的哪个位置。这个地址是在对象装载(Load)时由系统分配给的,当系统卸载时(Unload)又释放给系统。句柄地址(稳定)→记载着对象在内存中的地址————→对象在内存中的地址(不稳定)→实际对象本质:WINDOWS程序中并不是用物理地址来标识一个内存块,文件,任务或动态装入模块的,相反的,WINDOWS API给这些项目分配确定的句柄,并将句柄返回给应用程序,然后通过句柄来进行操作。 但是必须注意的是程序每次从新启动,系统不能保证分配给这个程序的句柄还是原来的那个句柄,而且绝大多数情况的确不一样的。假如我们把进入电影院看电影看成是一个应用程序的启动运行,那么系统给应用程序分配的句柄总是不一样,这和每次电影院售给我们的门票总是不同的一个座位是一样的道理。
2023-07-23 23:35:002

什么是句柄?句柄有什么作用?

所谓句柄实际上是一个数据,是一个Long(整长型)的数据。句柄是WONDOWS用来标识被应用程序所建立或使用的对象的唯一整数,WINDOWS使用各种各样的句柄标识诸如应用程序实例,窗口,控制,位图,GDI对象等等。WINDOWS句柄有点象C语言中的文件句柄。从上面的定义中的我们可以看到,句柄是一个标识符,是拿来标识对象或者项目的,它就象我们的姓名一样,每个人都会有一个,不同的人的姓名不一样,但是,也可能有一个名字和你一样的人。从数据类型上来看它只是一个16位的无符号整数。应用程序几乎总是通过调用一个WINDOWS函数来获得一个句柄,之后其他的WINDOWS函数就可以使用该句柄,以引用相应的对象。如果想更透彻一点地认识句柄,我可以告诉大家,句柄是一种指向指针的指针。我们知道,所谓指针是一种内存地址。应用程序启动后,组成这个程序的各对象是住留在内存的。如果简单地理解,似乎我们只要获知这个内存的首地址,那么就可以随时用这个地址访问对象。但是,如果您真的这样认为,那么您就大错特错了。我们知道,Windows是一个以虚拟内存为基础的操作系统。在这种系统环境下,Windows内存管理器经常在内存中来回移动对象,依此来满足各种应用程序的内存需要。对象被移动意味着它的地址变化了。如果地址总是如此变化,我们该到哪里去找该对象呢?为了解决这个问题,Windows操作系统为各应用程序腾出一些内存储地址,用来专门登记各应用对象在内存中的地址变化,而这个地址(存储单元的位置)本身是不变的。Windows内存管理器在移动对象在内存中的位置后,把对象新的地址告知这个句柄地址来保存。这样我们只需记住这个句柄地址就可以间接地知道对象具体在内存中的哪个位置。这个地址是在对象装载(Load)时由系统分配给的,当系统卸载时(Unload)又释放给系统。句柄地址(稳定)→记载着对象在内存中的地址————→对象在内存中的地址(不稳定)→实际对象本质:WINDOWS程序中并不是用物理地址来标识一个内存块,文件,任务或动态装入模块的,相反的,WINDOWSAPI给这些项目分配确定的句柄,并将句柄返回给应用程序,然后通过句柄来进行操作。但是必须注意的是程序每次从新启动,系统不能保证分配给这个程序的句柄还是原来的那个句柄,而且绝大多数情况的确不一样的。假如我们把进入电影院看电影看成是一个应用程序的启动运行,那么系统给应用程序分配的句柄总是不一样,这和每次电影院售给我们的门票总是不同的一个座位是一样的道理。
2023-07-23 23:35:083

什么叫句柄,句柄有什么用处

句柄是一个标识符,是拿来标识对象或者项目的。如果想更透彻一点地认识句柄,我可以告诉大家,句柄类似指向指针的指针,仅仅是类似,通过句柄可以找到对应的数据,但是不是二级指针。我们知道,所谓指针是一种内存地址。应用程序启动后,组成这个程序的各对象是驻留在内存中的。简单地理解,似乎我们只要获知这个内存的首地址,就可以随时用这个地址访问对象了。如果您真的这样认为,那您可就大错特错了。我们知道,Windows是一个以虚拟内存为基础的操作系统。在这种系统环境下,Windows内存管理器经常在内存中来回移动对象,以此来满足各种应用程序的内存需要。对象被移动意味着它的地址变化了。如果地址总是如此变化,我们该到哪里去找那一个对象呢?为了解决这个问题,Windows操作系统为全体应用程序腾出一些内存单元,用来专门登记各应用程序的对象在内存中的地址的变化,而前者的物理地址在系统运行期间是始终保持不变的。Windows内存管理器移动了对象在内存中的位置后,会把该对象新的地址及时地告知给对应的句柄进行更新。这样我们只要知道这个句柄,就可以间接地知道对象具体在内存中的哪个位置了。这个地址是在对象装载(Load)时由系统分配给的,当对象卸载时(Unload)又释放给系统。
2023-07-23 23:35:182

文件句柄是什么

这是操作系统里的一个概念,句柄是wondows用来标识被应用程序所建立或使用的对象的唯一整数,windows使用各种各样的句柄标识诸如应用程序实例,窗口,控制,位图,gdi对象等等。windows句柄有点象c语言中的文件句柄。从上面的定义中的我们可以看到,句柄是一个标识符,是拿来标识对象或者项目的,它就象我们的姓名一样,每个人都会有一个,不同的人的姓名不一样,但是,也可能有一个名字和你一样的人。从数据类型上来看它只是一个16位的无符号整数。应用程序几乎总是通过调用一个windows函数来获得一个句柄,之后其他的windows函数就可以使用该句柄,以引用相应的对象。如果想更透彻一点地认识句柄,我可以告诉大家,句柄是一种指向指针的指针。我们知道,所谓指针是一种内存地址。应用程序启动后,组成这个程序的各对象是住留在内存的。如果简单地理解,似乎我们只要获知这个内存的首地址,那么就可以随时用这个地址访问对象。但是,如果您真的这样认为,那么您就大错特错了。我们知道,windows是一个以虚拟内存为基础的操作系统。在这种系统环境下,windows内存管理器经常在内存中来回移动对象,依此来满足各种应用程序的内存需要。对象被移动意味着它的地址变化了。如果地址总是如此变化,我们该到哪里去找该对象呢?为了解决这个问题,windows操作系统为各应用程序腾出一些内存储地址,用来专门登记各应用对象在内存中的地址变化,而这个地址(存储单元的位置)本身是不变的。windows内存管理器在移动对象在内存中的位置后,把对象新的地址告知这个句柄地址来保存。这样我们只需记住这个句柄地址就可以间接地知道对象具体在内存中的哪个位置。这个地址是在对象装载(load)时由系统分配给的,当系统卸载时(unload)又释放给系统。句柄地址(稳定)→记载着对象在内存中的地址————→对象在内存中的地址(不稳定)→实际对象本质:windows程序中并不是用物理地址来标识一个内存块,文件,任务或动态装入模块的,相反的,windowsapi给这些项目分配确定的句柄,并将句柄返回给应用程序,然后通过句柄来进行操作。但是必须注意的是程序每次从新启动,系统不能保证分配给这个程序的句柄还是原来的那个句柄,而且绝大多数情况的确不一样的。假如我们把进入电影院看电影看成是一个应用程序的启动运行,那么系统给应用程序分配的句柄总是不一样,这和每次电影院售给我们的门票总是不同的一个座位是一样的道理。
2023-07-23 23:35:252

在VC++中 什么是句柄?

句柄,是整个Windows编程的基础。一个句柄是指使用的一个唯一的整数值,即一个4字节(64位程序中为8字节)长的数值,来标识应用程序中的不同对象和同类中的不同的实例,诸如,一个窗口,按钮,图标,滚动条,输出设备,控件或者文件等。通俗的来讲,句柄是一个ID。我们可以利用这个ID操作这个ID所绑定的空间,对象等。比较常见的句柄,比如:HINSTANCE(实例句柄),HBITMAP(位图句柄),HDC(设备描述表句柄),HICON(图标句柄)等等。我们利用这些句柄操作对象,图片,设备等等。
2023-07-23 23:35:323

什么是窗口句柄?

句柄就是个数字,一般和当前系统下的整数的位数一样,比如32bit系统下就是4个字节。这个数字是一个对象的唯一标示,和对象一一对应。这个对象可以是一个块内存,一个资源,或者一个服务的context(如 socket,thread)等等。这个数字的来源可以有很多中,只要能保证和它代表的对象保持唯一对应就可以,比如可以用内存地址,也可以用句柄表的序号,或者干脆用一个自增ID,再或者用以上的值去异或一个常数。扩展资料:windows 之所以要设立句柄,根本上源于内存管理机制的问题—虚拟地址,简而言之数据的地址需要变动,变动以后就需要有人来记录管理变动,(就好像户籍管理一样),因此系统用句柄来记载数据地址的变更。传统上操作系统内核和系统服务API都是 C 语言接口的,但是其内部设计理念上又是OO的,所以有对象概念却没有对应的语言语法支持。句柄的作用就是在 C 语言环境下代替 C++ 的对象指针来用的,创建句柄就是构造,销毁句柄就是析构,用句柄调用函数相当于传入this指针。如果有系统API是 C++ 接口的,那么就没有句柄了,而是某个接口指针,IXXXPtr之类的,比如Windows的com ptr。参考资料来源:百度百科-句柄
2023-07-23 23:35:392

句柄是一个什么样的数据结构?

句柄是一个是用来标识对象或者项目的标识符,可以用来描述窗体、文件等,值得注意的是句柄不能是常量。最左素短语是句型中最左边的素短语。素短语是指至少含有一个终结符的短语,并且除自身外,不包含更小的素短语。句柄并不是一种具体的、固定不变的数据类型或实体,而是代表了程序设计中的一个广义的概念。句柄一般是指获取另一个对象的方法一个广义的指针。它的具体形式可能是一个整数、一个对象或就是一个真实的指针,而它的目的就是建立起与被访问对象之间的唯一的联系。扩展资料:句柄在 Windows编程中是一个很重要的概念,在 Windows程序中并不是用物理地址来标识一个内存块、文件、任务或动态装入模块的。相反地,Windows API给这些项目分配确定的句柄,并将句柄返回给应用程序,然后通过句柄来进行操作。应该明白的是,句柄是一个标识符,是用来标识对象或者项目的。从数据类型上来看它只是一个16位的无符号整数。应用程序几乎总是通过调用一个Windows函数来获得一个句柄,之后其他的Windows函数就可以使用该句柄,以引用相应的对象。在 Windows编程中会用到大量的句柄。
2023-07-23 23:35:532

windows 句柄到底是什么

句柄,是整个windows编程的基础。一个句柄是指使用的一个唯一的整数值,即一个四字节长的数值,来标志应用程序中的不同对象和同类对象中的不同的实例,诸如,一个窗口,按钮,图标,滚动条,输出设备,控件或者文件等。应用程序能够通过句柄访问相应的对象的信息,但是句柄不是一个指针,程序不能利用句柄来直接阅读文件中的信息。如果句柄不用在I/O文件中,它是毫无用处的。 句柄是windows用来标志应用程序中建立的或是使用的唯一整数,windows使用了大量的句柄来标志很多对象。windows 之所以要设立句柄,根本上源于内存管理机制的问题—虚拟地址,简而言之数据的地址需要变动,变动以后就需要有人来记录管理变动,(就好像户籍管理一样),因此系统用句柄来记载数据地址的变更。数据对象加载进入内存中之后即获得了地址,但是这个地址并不是固定的,(至于为什么以及什么情况下变动具体需要大家研究虚拟地址的原理与机制我这里只提我确定知道的例子)数据对象会根据需要在内存与硬盘之间游弋移动(例如不常用的数据会为常用数据让出其占用的内存空间进而被淘汰进硬盘中的虚拟内存之中以优化配置整体系统的资源进而提升效率性能),因此其物理地址总是变动的,那么作为管理者 则必须对 管理对象所发生的变化了如指掌才行,因此系统为进程分配固定的地址(句柄)来存储进程下的数据对象变化后的地址也就是当前的地址,其实设计机制很简单 :系统的某个部门移动了对象的地址后,同时上报给句柄所属部门管理者,管理者将改动写入句柄即可。该数据被重新起用时去其所属句柄内按内容存取即可。句柄,英文:HANDLE,在Windows编程中是一个很重要的概念,在许多地方都扮演着重要的角色。但由此而产生的句柄概念也大同小异,比如:《Microsoft Windows 3 Developer"s Workshop》(Microsoft Press,by Richard Wilton)一书中句柄的概念是:在Windows环境中,句柄是用来标识项目的。在程序设计中,句柄是一种特殊的智能指针 。当一个应用程序要引用其他系统(如数据库、操作系统)所管理的内存块或对象时,就要使用句柄。句柄与普通指针的区别在于,指针包含的是引用对象的内存地址,而句柄则是由系统所管理的引用标识,该标识可以被系统重新定位到一个内存地址上。这种间接访问对象的模式增强了系统对引用对象的控制。在上世纪80年代的操作系统(如Mac OS 和Windows)的内存管理中,句柄被广泛应用。Unix系统的文件描述符基本上也属于句柄。和其它桌面环境一样,Windows API大量使用句柄来标识系统中的对象,并建立操作系统与用户空间之间的通信渠道。例如,桌面上的一个窗体由一个HWND类型的句柄来标识。如今,内存容量的增大和虚拟内存算法使得更简单的指针愈加受到青睐,而指向另一指针的那类句柄受到冷淡。尽管如此,许多操作系统仍然把指向私有对象的指针以及进程传递给客户端的内部数组下标称为句柄。
2023-07-23 23:36:181

什么是句柄?什么是最左素短语?

句柄(Handle)是一个是用来标识对象或者项目的标识符,可以用来描述窗体、文件等,值得注意的是句柄不能是常量。Windows之所以要设立句柄,根本上源于内存管理机制的问题,即虚拟地址。简而言之数据的地址需要变动,变动以后就需要有人来记录、管理变动,因此系统用句柄来记载数据地址的变更。最左素短语就是处于句型最左边的素短语的短语。素短语是一个递归的定义,至少含有一个终结符,并且除它自身之外不再含任何更小的素短语。扩展资料:句柄的使用句柄在Windows编程中是一个很重要的概念,在 Windows程序中并不是用物理地址来标识一个内存块、文件、任务或动态装入模块的。相反地,Windows API给这些项目分配确定的句柄,并将句柄返回给应用程序,然后通过句柄来进行操作。应该明白的是,句柄是一个标识符,是用来标识对象或者项目的。从数据类型上来看它只是一个16位的无符号整数。应用程序几乎总是通过调用一个Windows函数来获得一个句柄,之后其他的Windows函数就可以使用该句柄,以引用相应的对象。在 Windows编程中会用到大量的句柄。
2023-07-23 23:36:271

Java中的句柄是什么意思?

句柄是系统分配给你操作文件的权限,你操作所有的文件都需要用到系统分配给你的句柄.比如说FileInputStream fin=new FileInputStream("c:123.txt");fin就是你申请后,系统分配给你c:123.txt的句柄.你通过FIN来调用这个文件.
2023-07-23 23:36:444

句柄是一个什么类型的值?

句柄是一种特殊的智能指针。句柄,是整个Windows编程的基础。一个句柄是指使用的一个唯一的整数值,即一个4字节(64位程序中为8字节)长的数值,来标识应用程序中的不同对象和同类中的不同的实例,诸如,一个窗口,按钮,图标,滚动条,输出设备,控件或者文件等。应用程序能够通过句柄访问相应的对象的信息,但是句柄不是一个指针,程序不能利用句柄来直接阅读文件中的信息。如果句柄不在I/O文件中,它是毫无用处的。 句柄是Windows用来标志应用程序中建立的或是使用的唯一整数,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)。语句:HINSTANCE hInstance;可以改成:HANDLE hInstance;上面的2条语句都是对的,表达的是一个意义。一个WINDOWS应用程序可以用不同的方法获得一个特定项的句柄。许多API函数,诸如CreateWindow,GlobalAlloc,OpenFile的返回值都是一个句柄值。另外,WINDOWS也能通过应用程序的引出函数将一个句柄作为参数传送给应用程序,应用程序一旦获得了一个确定项的句柄,便可在WINDOWS环境下的任何地方对这个句柄进行操作。其实句柄的大量使用已经影响到了每一个WINDOWS的程序设计。一个句柄,只有当唯一地确定了一个项目的时候,它才开始有意义。句柄对应着项目表中的一项,而只有WINDOWS本身才能直接存取这个表,应用程序只能通过API函数来处理不同的句柄。举个例子来说吧,比如:我们可以为我们的应用程序申请一块内存块,通过调用API函数GlobalAlloc,来返回一个句柄值:hMem=GlobalAlloc(......);现在的hMem是个索引值 不是物理地址,应用程序还不能直接存取这块内存。这儿还有一句题外话,是关于操作系统的内存管理的。一般情况下操作系统给应用程序分配的内存块都是可以被移动的或者是可以丢弃的,这样能使有限的内存资源得到充分利用。所以,我们刚开始分配到的那块内存的地址是不确定的,因为它是可以被移动的,所以得先锁定那块内存块,这里应用程序需要调用API函数GlobalLock函数来锁定句柄。如下:lpMem=GlobalLock(hMem);这样应用程序才能存取这块内存。作用:句柄是一个标识符,是拿来标识对象或者项目的。如果想更透彻一点地认识句柄,我可以告诉大家,句柄类似指向指针的指针,仅仅是类似,通过句柄可以找到对应的数据,但是不是二级指针。我们知道,所谓指针是一种内存地址。应用程序启动后,组成这个程序的各对象是驻留在内存中的。简单地理解,似乎我们只要获知这个内存的首地址,就可以随时用这个地址访问对象了。如果您真的这样认为,那您可就大错特错了。我们知道,Windows是一个以虚拟内存为基础的操作系统。在这种系统环境下,Windows内存管理器经常在内存中来回移动对象,以此来满足各种应用程序的内存需要。对象被移动意味着它的地址变化了。如果地址总是如此变化,我们该到哪里去找那一个对象呢?为了解决这个问题,Windows操作系统为全体应用程序腾出一些内存单元,用来专门登记各应用程序的对象在内存中的地址的变化,而前者的物理地址在系统运行期间是始终保持不变的。Windows内存管理器移动了对象在内存中的位置后,会把该对象新的地址及时地告知给对应的句柄进行更新。这样我们只要知道这个句柄,就可以间接地知道对象具体在内存中的哪个位置了。这个地址是在对象装载(Load)时由系统分配给的,当对象卸载时(Unload)又释放给系统。
2023-07-23 23:36:543

“获取屏幕的窗口句柄”是什么意思?

分类: 电子数码 解析: 了解什么是句柄就好理解了 就是获得这个窗口的识别代码 句柄就是用来区分各种内存对象的唯一标识符号,是个32位整数。 有些是整个系统唯一(如窗口句柄),有些是当前进程或线程中唯一 (如线程句柄,全局的有另一个标识符)。 详细的可分为许多种,都是以H开头的。在VB中使用时全部都用Long。 常见的有窗口句柄(HWND),设备描述表句柄(HDC),内存句柄(HMEM), 文件句柄,进程句柄,线程句柄,笔的类型句柄(HPEN),字体句柄(HFONT), 区域句柄(HRGN)等等。 在申请句柄时是要占用资源的,分三类SYSTEM、USER、GDI。 而WINDOWS的资源是固定的,并不随内存的扩大而扩大,所以使用完以后一定要释 放。 > 如果只用VB本身的代码一般是不会用到句柄的,但要是使用API函数的话, 大多数会使用。 再Windows系统中,句柄(我一直觉得这个词翻译得特别别扭)分为三大类:Kernel Handle、UserHandle和应用程序自定义的Handle。 KernelHandle实际上是进程内Kernel对象的指针表索引,Kernel对象包括进程、文 件、信号等。但是MS为了掩盖着一事实,在系统启动时生成了一个所谓Obsfucator的值 (其实应该是Obfuscator,MicrosoftBugs(R):),生成Handle后将Handle与这个值异 或后返回给应用程序,所以看到的Handle都是一些很大而且毫无意义的数字。这些 Handle和索引的对象是由KRNL32.DLL和VMM32.VXD共同管理的,所以称之为Kernel Handle。 UserHandle是用来标示窗口、DC等对象的,他们是真实的指针,但指向的并不是对象 的开头,有一个偏移量。同样,这些对象是由USER32.DLL管理的。 第三种Handle不过是应用程序自定义的一些索引之类的东东,具体的意义和应用程序相关
2023-07-23 23:37:001