昨天小编只是在微头条随手发了一条关于句柄的内容,没想到居然很多人感兴趣,由于微头条的结构限制并不能很好的将句柄讲清楚,今天特地在这里将小编所掌握的关于句柄的知识分享给大家。
句柄是什么
我们先看权威的解释:句柄是整个windows编程的基础。一个句柄是指使用的一个唯一的整数值,即一个4字节(64位程序中为8字节)长的数值,来标识应用程序中的不同对象或实例,诸如,一个窗口,按钮,图标,滚动条,输出设备,控件或者文件等。应用程序能够通过句柄访问相应的对象的信息;
句柄控制对象的原则是:程序在运行时系统会在为进程分配一块内存,用来存储32位无符号整数,这些数值就是句柄,每个句柄在此处可以理解为一个指针变量,指向系统中一块在进程期间固定的内存。而这块内存不存别的东西,全部储存的是一个个地址,这个地址就是在进程运行期间各对象所在内存的地址。通过这个地址我们就能获取到对应的对象;Windows是一个以虚拟内存为基础的操作系统,在这种环境下,Windows内存管理器经常在内存中来回移动对象,以此来满足各种应用程序的需要。对象被移动意味着它的地址变化了,所以在运行过程中我们需要一个唯一且不变的标记来与每个对象对应,已达到不失去对对象的控制权的目的;如下图所示:
理解句柄
上面说的还是有点绕,那么我们该怎么去理解才能够更容易的掌握呢?我觉得用身份证来进行印证理解是最贴切的。身份证和句柄一样都是唯一的,且都代表一个具体的实体(对象)。每个人拥有一个唯一的身份证号码,通过身份证号码我们有可以去警察局处查住址登记簿,不管你这个人住址怎么变,只要你每次变更住址都会到警察局登记更新你的新住址,这样我们都能通过身份证号码在住址登记簿找到你的住址,从而找到你这个人。
或者你也可以用二级指针的概念来理解句柄,只不过句柄不具备很多指针的功能,比如赋值、获取属性的,在这里只是用来印证理解。
查看窗体句柄的工具
这里介绍一个可以快速查看窗体句柄的一个工具,大家在开发中可以通过这个工具辅助自己开发。这个工具就是spy++
spy++
这个软件如果大家是用vs开发的话,安装vs一般是默认安装这个软件的,大家按下图所示找一下就可以:
窗体句柄有什么用
关于窗体句柄的作用,这里给大家举一个最简单的例子,大家就会有很大的冲动想去学习句柄的使用了。假设现在有一个别人开发好的软件,现在需要向这个软件发一些命令,但是它又没有提供接口怎么办呢?这时候我们可以通过句柄来获取窗体控件对象,并通过windows的API去给对应的对象直接发消息;
这里通过windows定义的系统消息WM_GETTEXT(0x000D)来获取控件的text值;当然你还可以干很多事,只要是windows系统有定义的命令都可以发送给控件对象,如果让button点击一下,输入框的值改变等等;获取text值的代码如下(这边是用CSharp实现的,因为开发速度快~~):
这里就不详细讲user32这里的系统API的用法了,因为内容太多,这里只是给大家演示一下windows窗体句柄的一个作用,让大家有一定的了解;
如果大家对操控别人的窗体程序有兴趣可以留言给我,我可以专门写一篇关于这个的文章;
END
纯手KEY,希望大家多多支持小编,点个关注~~~