关于句柄

初识句柄

  关于句柄,第一次听说的时候是大学的时候,当时玩一款游戏叫做“造梦西游”,当时刷副本基本上就是重复工作,所以那时候开始用外挂,开始使用外挂来进行这种重复性的工作,当时写的全是脚本文件,甚至对当时打完以后回不到回城点这一bug修复了好久,当时用到的最重要的知识点就是句柄。当时的我理解的意思是可以获取窗体上任意位置和任意按钮,然后可以对这些位置和按钮进行操作和定义,就仿佛有个机器人精准识别这些东西替你打游戏一样。

句柄(Handle)

  听说最开始的开发书籍中,将Handle翻译为“把手”,你握住的是把手,却能拉动整个门,而且不用去在意门长什么样,如果一个门有多个把手,被不同的人(进程)握住,门往哪儿开就不好说了。

  句柄就是个数字,属于HWND类型(这类型和char int等同级),它是一个对象的唯一标识,和对象一一对应。它可以是一个块内存,一个资源或者一个服务的context(如socket、thread)等等。它的来源可以有很多种,只要能保证和它所代表的对象保持唯一对应就可以,比如说可以用内存地址,也可以用句柄表的信号,或者干脆用一个自增ID,再或者用以上的值去异或一个常数。

句柄的作用

  句柄的作用就是再C语言环境下代替C++的对象指针来用的。创建句柄就是构造,销毁句柄就是析构,用句柄调用函数相当于传入this指针。

示例

  

using System.Runtime.InteropServices;

[DllImport("user32.dll")]
        public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

        [DllImport("user32.dll")]
        public static extern bool ShowWindowAsync(IntPtr hWnd, int cmdShow);

private void btn_Click(object sender,EventArgs e)
{
         IntPtr mainHandle=FindWindow(null,"Form");
         if(mainHandle!=IntPtr.Zero)
        {
                  bool result=ShowWindowAsync(mainHandle,3);
        }
}

 

  

posted @ 2018-04-20 14:15  holo赫萝  阅读(236)  评论(0编辑  收藏  举报