资源预览内容
第1页 / 共7页
第2页 / 共7页
第3页 / 共7页
第4页 / 共7页
第5页 / 共7页
第6页 / 共7页
第7页 / 共7页
亲,该文档总共7页全部预览完了,如果喜欢就下载吧!
资源描述
National Instruments LabVIEW 虚拟仪器1LabVIEW 调用 Windows API 实现 VI 窗口置顶前些天同事用 LabVIEW 开发了个常用的小工具软件,碍于电脑屏幕太小,想让这小工具一直保持在所有窗口的最顶端(置顶) ,几个人讨论研究发现通过 LabVIEW 的属性节点只能实现 VI 程序在 LabVIEW 软件中保持最前,而在其他窗口没能置顶,未能达到想要的效果。通过上网查找资料,软件置顶是与操作平台的控制相关,需要调用 Windows API 去实现这功能,研究了一下,调用 Windows API 能很好的实现了 VI 置顶。百度上用 LabVIEW 调用 Windows API 的教程 LabVIEW 版本比较旧,为方便大家更好的学习,现将自己研究的方法分享出来。 一.什么是 Windows APIWindows 这个多作业系统除了协调应用程序的执行、分配内存、管理资源之外, 它同时也是一个很大的服务中心,调用这个服务中心的各种服务(每一种服务就是一个函数) ,可以帮应用程序达到开启视窗、描绘图形、使用周边设备等目的,由于这些函数服务的对象是应用程序(Application), 所以便称之为 Application Programming Interface,简称 API 函数。WIN32 API 也就是 Microsoft Windows 32 位平台的应用程序编程接口。Windows API 包括几千个可调用的函数,它们大致可分为以下几类:基本服务、组件服务、用户界面服务、图形多媒体服务、消息和协作、网络、Web 服务。二Windows API 的发展现状当 WINDOWS 操作系统开始占据主导地位的时候,开发 WINDOWS 平台下的应用程序成为人们的需要。而在 WINDOWS 程序设计领域处于发展的初期, WINDOWS 程序员所能使用的编程工具唯有 API 函数,这些函数是 WINDOWS 提供给应用程序与操作系统的接口,他们犹如“积木块”一样,可以搭建出各种界面丰富,功能灵活的应用程序。所以可以认为 API 函数是构筑整个 WINDOWS 框架的基石,在它的下面是 WINDOWS 的操作系统核心,而它的上面则是所有的华丽的 WINDOWS 应用程序。程序员想编写具有 Windows 风格的软件,必须借助 API, API 也因此被赋予至高无上的地位。但是,如若没有合适的 Windows 编程平台,那么 Windows 开发是一项很复杂的工作。在可视化编程 IDE 出来之前,那时的 WINDOWS 程序开发还是比较复杂的工作,程序员必须熟记一大堆常用的 API 函数,而且还得对 WINDOWS 操作系统有深入的了解。然而随着软件技术的不断发展,在 WINDOWS 平台上出现了很多优秀的可视化编程环境,程序员可以采用“所见即所得”的编程方式来开发具有精美用户界面和功能强大的应用程序。这些优秀可视化编程环境操作简单、界面友好(诸如 VB、VC+ 、DELPHI 等) ,在这些工具中提供了大量的类库和各种控件,它们替代了 API 的神秘功能,事实上这些类库和控件都是构架在 WIN32 API 函数基础之上的,是封装了的 API 函数的集合。它们把常用的 API函数的组合在一起成为一个控件或类库,并赋予其方便的使用方法,所以极大的加速了WINDOWS 应用程序开发的过程。有了这些控件和类库,程序员便可以把主要精力放在程序整体功能的设计上,而不必过于关注技术细节。实际上如果我们要开发出更灵活、更实用、更具效率的应用程序,必然要涉及到直接使用 API 函数,虽然类库和控件使应用程序的开发简单的多,但它们只提供 WINDOWS 的一般功能,对于比较复杂和特殊的功能来说,使用类库和控件是非常难以实现的,这时就需要采用 API 函数来实现。LabVIEW 调用 WindowsAPI 实现 VI 窗口置顶这也是 API 函数使用的场合,所以我们对待 API 函数不必刻意去研究每一个函数的用法,那也是不现实的(能用得到的 API 函数有几千个呢) 。正如某位大虾所说: API 不要去学,在需要的时候去查 API 帮助就足够了。三LabVIEW 怎么去调用 Windows API上面介绍已经讲了 API 是一个操作系统与应用程序的接口函数,LabVIEW 作为一个程序开发平台(环境)同样可以调用 Windows API 函数去实现应用程序的多功能化。应用程序窗口置顶属于窗口效果控制,需要先获取当前窗口句柄,然后再去设置其他API 函数的参数。获取当前窗口句柄的 Windows API 函数是 FindWindowA,我们就先拿这个函数进行讲解如何实现 LabVIEW 调用 API。调用前,需要对此函数进行一个详细的了解,可以利用 WindowsAPI 查询器查得此函数的介绍,也可以通过百度百科获得,对比发现百度百科比较全面,这里选百度百科的介绍。表 1.函数 FindWindowA函数名 FindWindowA函数原型 int32_t FindWindowA(int32_t lpClassName, CStr lpWindowName);功能描述 检索处理顶级窗口的类名和窗口名称匹配指定的字符串输入参数 1 lpClassName:String,指向一个以 null 结尾的、用来指定类名的字符串。(注:使用时将此参数设置为 Long 型,直接赋常量 0)输入参数 2 lpWindowName:String,指向一个以 null 结尾的、用来指定窗口名(即窗口标题)的字符串。如果此参数为 NULL,则匹配所有窗口名。输出参数 无返回值 Long,如果函数执行成功,则返回值是拥有指定窗口类名或窗口名的窗口的句柄。如果函数执行失败,则返回值为 NULL 。FindWindowA 这个函数在 user32.dll 这个动态库里面。dll 是动态链接库(Dynamic Link Library) 。DLL 是一个包含可由多个程序,同时使用的代码和数据的库。使用 DLL 更容易地将更新应用于各个模块,而不会影响该程序的其他部分。user32.dll 这个动态库的路径一般在 C:WindowsSystem32user32.dl 。有了以上信息就可以开始用 LabVIEW 调用 FindWindowA 这个 API 函数了。新建一个VI,后面板点开函数面板,在 互连接口-库与可执行程序-调用库函数节点,如图 1。图 1 调用库函数节点面板路径图点击后在后面板出现 ,利用即时帮助可查看此节点的简单介绍,如右图 2。National Instruments LabVIEW 虚拟仪器3图 2 调用库函数节点简介双击此函数节点 ,出现调用库函数窗口,按标号依次选择和设置,1.选择 dll 库路径:C:WindowsSystem32user32.dl ;2.选择调用的函数名 FindWindowA;3. 在调用规范中选 stdcall(WINAPI); 如图 3 所示。图 3 调用库函数路径和函数选择设置完函数面板,1.点击参数;2.将类型设为数值,如图 4。LabVIEW 调用 WindowsAPI 实现 VI 窗口置顶图 4 返回类型值设置同一个面板 1.按添加参数按钮;2.在输入参数名称:IpClassName;3. 选择参数类型为:字符串;如图 5 所示。图 5 添加参数并设置名称和类型同一个面板 1.按添加参数按钮;2.在输入参数名称:IpWindowName;3.选择参数类型为:字符串;如图 6 所示。图 6 添加参数 2 设置名称和类型到此 API 函数 FindWindowA 的调用设置结束,按确认后得到通过创建输入输出控件可知其结构,具体如下图 7 所示。National Instruments LabVIEW 虚拟仪器5图 7 各引线参数名四调用 API 函数实现 VI 窗口置顶实现窗口置顶需要调用FindWindowA、GetWindowLongA 、SetWindowLongA、SetWindowPos 共四个 API 函数。整个调用流程由右图所示。四个 API 函数都在 user32.dll 动态库里面可以找到,详细的设置这里不再赘述。下面是除 FindWindowA 函数其它三个函数的参数介绍。表 2.函数 GetWindowLongA函数名 GetWindowLongA函数原型 int32_t GetWindowLongA(int32_t hWnd, int32_t nIndex);功能描述 该函数获得有关指定窗口的信息,函数也获得在额外窗口内存中指定偏移位地址的 32位度整型值。输入参数 1 hWnd:Long,窗口句柄及间接给出的窗口所属的窗口类。输入参数 2 nlndex:Long,指定要获得值的大于等于 0的值的偏移量。有效值的范围从 0 到额外窗口内存空间的字节数减 4。其值可以是下面几种:GWL_EXSTYLE:(-20 )获得扩展窗口风格;GWL_HINSTANCE:(-6 )获得应用实例的句柄;GWL_HWNDPARENT:(-8 )如果父窗口存在,获取父窗口句柄;GWL_ID:(-16)获得窗口标识;GWL_STYLE:(-16)获得窗口风格;GWL_USERDATA:(-21)获得与窗口有关的开 始调 用FindWindowA函 数获 取 当 前 窗 口 句 柄调 用GetWindowLongA函 数获 取 当 前 窗 口 信 息调 用SetWindowLongA函 数设 置 窗 口 属 性调 用SetWindowPos函 数使 当 前 窗 口 至 于 顶 层结 束LabVIEW 调用 WindowsAPI 实现 VI 窗口置顶32 位值。每一个窗口均有一个由创建该窗口的应用程序使用的 32 位值。GWL_WNDPROC:(-4)获得窗口过程的地址,或代表窗口过程的地址的句柄。输出参数 无返回值 Long,如果函数执行成功,则返回值是拥有指定窗口类名或窗口名的窗口的句柄。如果函数执行失败,则返回值为 NULL 。表 3.函数 SetWindowLongA函数名 SetWindowLongA函数原型 int32_t SetWindowLongA(int32_t hWnd, int32_t nIndex, int32_t dwNewLong);功能描述 该函数用来改变指定窗口的属性函数也将指定的一个 32 位值设置在窗口的额外存储空间的指定偏移位置。输入参数 1 hWnd:Long,窗口句柄及间接给出的窗口所属的类。输入参数 2 nlndex:Long,指定将设定的大于等于 0 的偏移值。有效值的范围从 0 到额外类的存储空间的字节数减 4。其值可以是以下几种:GWL_EXSTYLE:(-20 )设定一个新的扩展风格。GWL_HINSTANCE:(-6 )设置一个新的应用程序实例句柄。GWL_ID:(-12)设置一个新的窗口标识符。GWL_STYLE:(-16)设定一个新的窗口风格。GWL_USERDATA:(-21)设置与窗口有关的 32 位值。每个窗口均有一个由创建该窗口的应用程序使用的 32 位值。GWL_WNDPROC:(-4)为窗口过程设定一个新的地址。GWL_HWNDPARENT:(-8 )改变子窗口的父窗口,应使用 SetParent 函数。输入参数 3 dwNewLong:Long,由 nIndex 指定的窗口信息的新值。其值可以是一下几种:LVS_ICON:大图标显示;LVS_SMALLICON:小图标显示;LVS_LIST:列表显示;LVS_REPORT:详细报表显示。输出参数 无返回值 Long,如果函数执行成功,则返回值是拥有指定窗口类名或窗口名的窗口的句柄。如果函数执行失败,则返回值为 NULL 。表 4.函数 SetWindowPos函数名 SetWind
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号