世界视讯!什么是句柄?句柄及其作用是什么?
来源:环球周刊网 发布时间:2022-09-26 10:33:52

随着社会越来越发达,大家都选择在网络上汲取相关知识内容,比如什么是句柄(编译原理句柄是什么意思),为了更好的解答大家的问题,小编也是翻阅整理了相应内容,下面就一起来看一下吧!

什么是句柄(编译原理句柄是什么意思)

小编工作的单位性质偏向于服务制造。大家都知道,中国的高端装备基本都依赖进口,而其自带CAM软件一般都是全封闭的,不开放API接口。但是在工业互联网时代,设备联网,生产数据上云已经是大势所趋。那么,如何在国外技术封锁的情况下实现第三方软件的数据获取呢?


(资料图片仅供参考)

在Windows系统下,有一个东西叫句柄,它是Windows编程的基础,只要是运行在Windows上的软件都绕不开它。本文就带大家学习如何利用底层句柄来实现第三方软件的交互。

句柄及其作用

关于句柄的官方解释就不在此处过多提及,一般刚接触这个概念的人也看不懂。掌握句柄只需要理解这几点:

1、句柄不是什么玄乎的东西,它只是一个4字节(64系统下为8字节,后续文章都以32位来展开文章)的数值。但是它是唯一的,系统在启动时会建立一个句柄表,程序在Windows系统上运行时由系统自动分配给每一个对象,例如:窗体句柄、窗体控件句柄(输入框、按钮)、文件句柄等。

2、句柄单独存在于一块固定的区域,由于对象在内存中的地址可能会实时变化,但是系统会将这个变化的地址通过唯一不变的句柄绑定好,以不变应万变。

3、你可以将其理解成类似指针,通过它你能找到程序中的每一个对象。

4、虽然句柄类似指针,可以通过句柄找到对应的对象,但是你却不能像使用指针那样使用句柄,必须通过系统封装的API去使用。

如下图,是通过spy++查看GifCam(一个第三方gif制作小软件)各控件的句柄。图中Handle:000A07F0就是Rec按钮的句柄,获得了它的句柄,就可以通过系统API控制按钮的各项功能,比如单击开始录制。

spy++查看GifCam

类比理解

如果上述表述大家还不能理解的话,请看类比理解:

大家都看过古装电视剧吧?在古代,每个奴隶身上都会被烙上一个奴隶印记,并且每个印记的编号不同。奴隶主在管理奴隶时,都是通过印记来管理的。但是每个奴隶本身也都是有名字的。类比到句柄就可以这样理解:奴隶这个实物就是对象,他的名字就是他在计算机中的地址(名字可以随意变,奴隶想更名改姓重新开始生活,但是奴隶主会愿意吗?),奴隶印记就是句柄(不管你怎么更名改姓,只要这个奴隶印记在,你就跑不掉)。

图示理解:

句柄示意图

句柄实际应用

前文讲了很多关于句柄理解的内容,此处开始回到实际项目中,一起探究句柄在实际项目中如何发挥作用。

需求:如下图,需要实时获取图中振幅和相位的值。

需获取数据的窗体

程序设计思路:

程序设计思路

利用CSharp实现上述功能需要引入usingSystem.Runtime.InteropServices;和using System.Diagnostics;

System.Diagnostics:负责进程相关

System.Runtime.InteropServices:DllImport特性,负责调用系统API。

代码实现:

classProgram{//系统API//通过窗体标题寻找窗体句柄[DllImport("user32.dll",EntryPoint="FindWindow")]publicstaticexternIntPtrFindWindow(stringlpClassName,stringlpWindowName);//遍历主窗体下的所有句柄(各控件对象)[DllImport("user32.dll",EntryPoint="FindWindowEx")]publicstaticexternIntPtrFindWindowEx(IntPtrhWnd1,IntPtrhWnd2,stringlpsz1,stringlpsz2);//通过对象句柄获取控件文字内容[DllImport("user32.dll",SetLastError=true,CharSet=CharSet.Auto)]publicstaticexternintGetWindowText(IntPtrhWnd,StringBuilderlpString,intnMaxCount);//通过对象句柄获取控件类名[DllImport("user32.dll",SetLastError=true,CharSet=CharSet.Auto)]publicstaticexternintGetClassName(IntPtrhWnd,StringBuilderlpString,intnMaxCount);//通过对象句柄给对象发系统消息(系统定义的消息标识:如单击、输入文字等)[DllImport("User32.dll",EntryPoint="SendMessage")]publicstaticexternintSendMessages(IntPtrhWnd,//信息发往的窗口的句柄intMsg,//消息IDintwParam,//参数1intlParam//参数2);//---------------------------staticvoidMain(string[]args){boolfind=false;IntPtrhwnd=IntPtr.Zero;while(!find){stringtitle=null;Process[]process=Process.GetProcesses();foreach(Processpinprocess){title=p.MainWindowTitle.ToString();if(title.Contains("iBalance")){hwnd=p.Handle;find=true;break;}}//Console.WriteLine(title);if(find)hwnd=FindWindow(null,title);else{ProcessStartInfoinfo=newProcessStartInfo(@"C:\ProgramFiles\ANCA\RN31.1-1\TG7\BIN\Vibe_Monitor.exe");Process.Start(info);Thread.Sleep(1000);Console.WriteLine("openit");}}find=false;if(hwnd!=IntPtr.Zero){StringBuildersb_text=newStringBuilder(1024);StringBuildersb_class=newStringBuilder(1024);IntPtrchild=IntPtr.Zero;do{child=FindWindowEx(hwnd,child,null,null);GetWindowText(child,sb_text,sb_text.Capacity);//Console.Write(sb_text.ToString()+"::CLASS::");GetClassName(child,sb_class,sb_class.Capacity);//Console.WriteLine(sb_class.ToString());if(sb_text.ToString().Contains(".")&&sb_class.ToString()=="Static"){find=true;break;}sb_text.Remove(0,sb_text.Length);sb_class.Remove(0,sb_class.Length);}while(child!=IntPtr.Zero);StringBuildermsg=newStringBuilder();if(find){inti=0;stringmsg_combine=string.Empty;try{while(true){Thread.Sleep(10);sb_text.Remove(0,sb_text.Length);GetWindowText(child,sb_text,sb_text.Capacity);intindex=sb_text.ToString().IndexOf("\n");msg_combine=DateTime.Now.ToString()+":"+"震幅:"+sb_text.ToString().Substring(0,index)+"相位:"+sb_text.ToString().Substring(index+1,sb_text.ToString().Length-index-1);i++;Console.WriteLine(msg_combine+"::"+i);msg.AppendLine(msg_combine);if(i==1024){i=0;StreamWritersw=newStreamWriter("msg.txt",true,Encoding.UTF8);sw.WriteLine(msg.ToString());msg=newStringBuilder();sw.Flush();sw.Close();}}}catch(Exceptionex){Console.WriteLine(ex.Message);Console.WriteLine("程序被关闭");}}}Console.Read();}}

关键词: 什么是句柄 编译原理句柄是什么意思

上一篇:

下一篇:

猜你喜欢

世界视讯!什么是句柄?句柄及其作用是什么?

世界视讯!什么是句柄?句柄及其作用是什么?

什么是句柄(编译原理句柄是什么意思)小编工作的单位性质偏向于服务制造。大家都知道,中国的高端...更多

2022-09-26 10:33:52
环球热点评!nbcs是什么意思?00后流行用语有哪些?

环球热点评!nbcs是什么意思?00后流行用语有哪些?

nbcs是什么意思(awsl什么意思)文 香橙聊教育互联网的快速发展,网络流行用语也在发生改变,那么,...更多

2022-09-26 10:34:41
全球新资讯:教师节送老师什么礼物好?国外怎么过教师节?

全球新资讯:教师节送老师什么礼物好?国外怎么过

近日教师节送老师什么礼物好呢登录了热搜,也是在网上引起了网友们的关注,那么很多小伙伴可能还不...更多

2022-09-26 10:21:33
全球新动态:四大名女苏小小是谁?一代名妓苏小小简介资料?

全球新动态:四大名女苏小小是谁?一代名妓苏小小

四大名女苏小小(一代名妓苏小小简介资料)在我国古代的时候,女性的社会地位是非常低的,而作为歌...更多

2022-09-26 10:36:12
当前观点:清朝服饰是什么样的?清代各式官服最新收藏价值是多少?

当前观点:清朝服饰是什么样的?清代各式官服最新

清朝服饰(清代各式官服最新收藏价值图赏)清嘉庆全品相御赐黄马褂市场收藏价值参考约50000元。清光...更多

2022-09-26 10:18:59
社保断缴有什么影响?离职了怎么自己交社保?

社保断缴有什么影响?离职了怎么自己交社保?

很多人都有缴纳社保的,不过也有人的社保目前是断缴状态。那么,社保断缴有什么影响?离职了怎么自己...更多

2022-09-23 15:18:19
支付宝延时到账可以取消吗?支付宝24小时延迟到账功能怎么关闭?

支付宝延时到账可以取消吗?支付宝24小时延迟到账

有人为了安全设置了支付宝24小时延迟到账功能,不过现在有时候觉得很麻烦,那么,支付宝延时到账可...更多

2022-09-23 15:11:24
哪些情形可以一次性提取公积金?个人提取公积金需要什么材料?

哪些情形可以一次性提取公积金?个人提取公积金需

都知道公积金的作用很多,不仅可以买房还可以提取出来使用。那么,哪些情形可以一次性提取公积金?个...更多

2022-09-23 15:08:17
医保个人账户的钱有什么用?为什么医保用的都是个人账户的钱?

医保个人账户的钱有什么用?为什么医保用的都是个

了解医保的人都知道,医保有一个账户交个人账户,里面是有钱的。那么,医保个人账户的钱有什么用?为...更多

2022-09-23 15:03:50
哪个贷款平台容易出款成功?影响放款速度和利息的几个因素?

哪个贷款平台容易出款成功?影响放款速度和利息的

随着时代的不断发展,很多人都有申请贷款的习惯。那么,哪个贷款平台容易出款成功?最容易下款的银行...更多

2022-09-23 14:53:38


© 2012-2020 财经快报网 版权所有

网站联系邮箱:43522767@qq.com