什么是句柄(编译原理句柄是什么意思)
什么是句柄(编译原理句柄是什么意思)
小编工作的单位性质偏向于服务制造。大家都知道,中国的高端装备基本都依赖进口,而其自带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实现上述功能需要引入using
System.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,//参数1 intlParam//参数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(); } }
win10我的电脑图标怎么调出来(win10恢复经典开始菜单)电脑上应用久后在所难免碰到各式各样的难题,近期就会有网民说自身win10电脑上下边一排图标没有了该怎么办,win10任务栏图标消失了不知道该怎么找回。下面我就教下大伙儿win10电
怎么重装win10(华硕不进系统只进BIOS)如何安装纯净版Win10系统?纯净版的好处就是好用,没有乱七八糟的软件,享受纯版丝滑,虽然现在网上有很多免费的Win10系统,但是大都是集合了推广软件的系统,这里教大家如何安装纯净
如何设置自动开机(电脑主机设置自动开机)基本上每台电脑都可以在主板BIOS里设定固定的开机时间。比如你早上8点上班,可以设定7点50分自动开机。如果是服务器开机时间比较久,你也可以设定在7点开机或更早时间。上班来到座位上
如何打开运行(怎么调出运行窗口)任务管理器是我们平常使用电脑时常用的一个程序,可以看到电脑所有正常运行的程序。有网友想打开win7任务管理器,不知道win7任务管理器快捷键是什么。下面就教下大家快速打开win7任
环球信息新闻机场水门最高礼遇迎接烈士遗骸近日机场水门最高礼遇迎接烈士遗骸登录上了百度热搜,受到广大网友们的关注,那么关于目前的机场水门最高礼遇迎接烈士遗骸相信小伙伴们都是想要了解到最新的信息吧,小编也是在网上进行了一些整
环球信息新闻机场最高礼遇迎接烈士遗骸近日机场最高礼遇迎接烈士遗骸登录上了百度热搜,受到广大网友们的关注,那么关于目前的机场最高礼遇迎接烈士遗骸相信小伙伴们都是想要了解到最新的信息吧,小编也是在网上进行了一些整理,收集
戍边英雄肖思远烈士手机终解锁母亲翻看相册落泪每天都有不同的新闻上热搜,热搜也是大家了解当下各种热门新闻的一个途径的,这两天戍边英雄肖思远烈士手机终解锁母亲翻看相册落泪的热度就非常高,也是受到了网友们的关注,那么小编今天自然也
戍边英雄肖思远烈士手机终解锁母亲翻看相册流下眼泪每天都有不同的新闻上热搜,热搜也是大家了解当下各种热门新闻的一个途径的,这两天戍边英雄肖思远烈士手机终解锁母亲翻看相册流下眼泪的热度就非常高,也是受到了网友们的关注,那么小编今天自
小区给业主分红利这两天关于小区给业主分红利在网上的热度是非常高的,很多网友们也都是非常关注小区给业主分红利这个事情,为此小编也是在网上进行了一番搜索查阅相关的信息,那么如果说有感兴趣的网友们想知道
物业公司最怕业主什么(物业起诉业主当庭反诉怎么做)好的物业可以让买房人住得更加的放心,所以选个物业好的小区是非常重要的,而现实生活中有的物业管理和服务却不规范,从而导致双方发生矛盾,那么物业最怕什么呢?物业的责任是什么呢?下面和小
哪里有免费的歌曲下载(免费歌曲下载到手机上)各位好,我是dairy。想问一下各位,你们听本地音乐是会选择有损但常见的mp3音乐还是少见的无损音乐呢?相比大多数人的选择都会是。mp3音乐,甚至还可能会有一部分人好奇,难道音乐不
变速自行车(变速自行车是如何调速的?)变速自行车(变速自行车是如何调速的?)自行车的发明为人们的出行带来了很大便利,变速自行车的出现又进一步提升了人们的骑行体验,在骑行时可以更加省时省力。你是否思考过变速自行车是如何调
直流电机调速控制器(微型直流电机控制器的作用有哪些?)直流电机调速控制器(微型直流电机控制器的作用有哪些?)微型直流电机应用产品非常广泛,在一些产品中,会用到微型电机控制器来控制转速,那么微型电机的控制器除了控制微电机的转速,还有哪些
永磁直流伺服电机(伺服电机都是永磁的吗)无刷直流电机通常情况下转子磁极采用瓦型磁钢,经过磁路设计,可以获得梯形波的气隙磁密,定子绕组多采用集中整距绕组,因此感应反电动势也是梯形波的。无刷直流电机的控制需要位置信息反馈,必
美的电磁炉维修(美的电磁炉维修资料)美的电磁炉维修(美的电磁炉维修资料)一电磁炉功能方框图及电原理图二常见故障代码的检修1显示代码E01E02E032过零故障E013显示代码E04E05E064显示代码E07E08三
美的电磁炉维修手册(美的电磁炉维修资料)美的电磁炉维修手册(美的电磁炉维修资料)一电磁炉功能方框图及电原理图二常见故障代码的检修1显示代码E01E02E032过零故障E013显示代码E04E05E064显示代码E07E0
电磁炉哪个品牌好(专做电磁炉是哪个品牌)不像瓦斯炉一样利用明火料理食物,IH电磁炉以无火煮食相对安全又节能。这次文章会为大家推荐飞利浦Panasonic尚朋堂声宝歌林等家电品牌推出的10款电磁炉。除了分享必买清单,还会带
钛古电磁炉怎么样(钛古电磁炉曝光)在我爸妈的厨房里,燃气灶和电磁炉是缺一不可的,煎炸炒的时候用燃气灶,蒸东西熬粥的时候用电磁炉似乎已经是厨房准则了。到我现在有了自己的厨房,化身半个美食博主之后发现BUG处处在!浓香
电磁炉原理图(电磁炉的原理及危害)电磁炉原理图(电磁炉的原理及危害)电磁炉的工作原理是什么?电磁炉为什么非得用专用锅,今天我们就来研究一下这个问题。如果想明白电磁炉的原理,首先我们必须得明白电磁感应现象。电磁感应现
液压电磁阀原理(电磁阀构成原理与检测)液压电磁阀原理(电磁阀构成原理与检测)电磁阀是一种流体控制器件,通常应用于自动控制电路中,由控制系统(又称输入回路)和被控制系统(阀门)两部分构成,它实际上是用较小的电流电压的电信
电磁继电器原理图(空调继电器知识介绍)电磁继电器原理图(空调继电器知识介绍)继电器是一种电子控制器件,具有控制系统和被控制系统的性能,通常应用于自动控制电路。继电器可以分为两种一种是电磁继电器,另一种是固态继电器,这两
苏泊尔电磁炉e0(电磁炉显示EO故障的维修方法)苏泊尔电磁炉e0(电磁炉显示EO故障的维修方法)在每个家庭电磁炉是必不可少的炊具,在用电磁炉的时候都会遇到各种各样的问题,有时也是让人无可奈何。今天给大家说说,维修一台苏泊尔电磁炉