LabVIEW调用WindowsAPI函数实现VI窗口置顶
findwindow 置顶函数用法 -回复
findwindow 置顶函数用法-回复
标题:破解Windows程序的“置顶”功能——深入探究findwindow置顶函数用法
引言:
在Windows操作系统中,置顶(topmost)是一个重要的功能,通常被用于将某个窗口置于其他所有窗口的前面,以保持其始终可见。而findwindow置顶函数则是一种破解置顶功能的方法。本文将一步一步地探究findwindow置顶函数的用法,帮助读者了解如何实现置顶效果以及相关的安全问题。
第一部分:了解findwindow置顶函数的基础知识
1.1 理解findwindow函数
findwindow函数是Windows API提供的一种用于搜索窗口的函数,可以通过窗口的类名或标题来查找窗口句柄(handle)。一旦找到相应的窗口句柄,就可以对窗口进行各种操作,包括将其置顶。
(此处可适当展开关于findwindow函数更多的介绍,如参数的说明等)
1.2 了解置顶功能的原理
在Windows操作系统中,窗口分为普通窗口和置顶窗口两种类型。普通窗口是默认的类型,它们根据层次结构来进行显示。相比之下,置顶窗口则以特殊的方式进行处理,使其始终显示在其他窗口的前面。
为了实现置顶效果,可以通过修改窗口的窗口风格(window style)来将其置顶。窗口风格是窗口的一些属性,可以通过窗口句柄进行设置或修改。
第二部分:实现findwindow置顶函数的步骤
2.1 获取目标窗口句柄
首先,需要通过findwindow函数来获取目标窗口的句柄。句柄是一个唯一标识窗口的值,可以用于后续的操作。
LabVIEW中如何调用WindowsAPI
LabVIEW中如何调用WindowsAPI
LabVIEW中如何调用Windows API
Lancker(原Simwe虚拟仪器技术版管理员,创建人之一)
「LabVIEW 没有提供这样的功能,必须呼叫 Windows API」,有时候笔者常看到有些朋友会问许多问题,实在是因为LabVIEW本身不提供这些功能,或者实现很困难,所以才会这样回答。虽然这样回答有点偷懒,或者说不负责任,但这的确是事实, LabVIEW 所提供的模块,虽然也不在少数,但是主要用于测控软件开发,要想变点花样,通常是行不通的,这是笔者决定开始撰写本文的主要原因。
感觉上 LabVIEW 程式要呼叫 Windows API是一件比较困难的事情,或者说比较麻烦的事情,但别忘了 Windows API是大家的,凡是在 Windows工作环境底下执行的应用程式,都有权利呼叫 Windows API。其实LabVIEW和Visual C++/Visual Basic/Delphi等开发软件一样,可以呼叫API,而且实现比较方便,与调用其他动态连接库文件(.DLL)几乎一样。
(笔者个人认为要做到将API函数灵活调用到LV,最好有VC/VB 编程基础。我觉得如果花一两个月学习VB,对与LV的提高会起到意想不到的效果。VB和LabVIEW都是电子工程师喜欢用于开发测试软件的工具,其中有许多相似之处。它们具有入门简单,方便地调用/移植其他代码。VB调用API的参考资料很多,但介绍如何在LV中调用API的资料却为数不多。本人写这篇文章,虽然错误难免,但还是希望对大家有所帮助。)
labview使用技巧
本文为LabVIEW内部交流资料,来自网络,特此说明
开发机上激活以后,如果开发机升级了或者换了或者增加新的配置了等等,难道要重新购买一套8.2吗?
回答=更改了配置,那么lisence manager里的机器码肯定会变,所以需要重新向NI申请激活码激活.
NI的IVI驱动的来源?
回答=由于NI开发的IVI驱动程序库已经包含了仪器的Class Driver,因此,程序员只要按照IVI的规范开发自己仪器的Specific Driver,就可以实现仪器的互换性。LV和CVI的专用驱动可以从NI的网站下载,源代码是用c编写的32位的DLL形式,这就保证驱动可以直接在你的开发环境中使用(LV,CVI,VC等)。
在运行过程中LabVIEW能否添加控件?
回答=不能,只能在编辑状态是做。不过可以事先多创建几个控件,然后隐藏。再需要使用的时候使用属性节点来操作。
编写的LV的GPIB通讯程序,从示波器读取数据。单独可以正常执行,但放置在一个事件结构的一个WHILE循环里时,运行程序后,程序会变得不相应,而且前面板不可控制。
回答=查看客户程序,GPIB程序并没什么问题,但是作为一个子程序放在事件结构里就会存在问题,而且子程序运行时,主界面默认的是不响应的。如果要解决这个问题,需要选择事件结构编辑面板最下方有一个默认选项,用于设置是否在事件结构执行完成之前锁定前面板,默认为锁定,取消即可。
IVI的分类。
回答=因为所有的仪器不可能具有相同的功能,因此不可能建立一个单一的编程接口。因此,IVI的驱动分为两类。(1) 类驱动程序(Class Drive):它们是在特定类中编写仪器软件的标准接口。这意味着软件开发者能重复使用他们的软件系统而不会由于低层硬件更改而被迫重新测试软件系统。目前,IVI驱动程序库可用于下列几类仪器:示波器数字化仪表、开关多路复用器、数字万用表、任意波形发生器函数发生器等。(2) 设备类驱动程序(Specific Drive):每种牌号和类型的仪器均有相应的专用驱动程序。用户通过替换仪器的专用驱动程序就可以简单地互换仪器,而无需改动类驱动程序库或它们的测试程序源代码。
第7章LabVIEW调用操作系统功能
7
7.1 读/写电子表格文件
电子表格读操作
数据读取类型和格式
Http://ccms.hust.edu.cn
8
7.2 读/写XML文件
可扩展置标语言(XML)
可扩展置标语言(XML)是一种用标记描述数据的格式化标准。与 HTML标记不同,XML标记不是告诉浏览器如何按格式处理数据,而 是使浏览器能识别数据。
节点位置“函数→互连接口→库与可执行程序”选板
Http://ccms.hust.edu.cn
38
7.6 调用动态链接库(DLL)
配置CLF节点 右键单击节点并选择“配置…”选项,或者直接双击节点
Http://ccms.hust.edu.cn
39
7.6 调用动态链接库(DLL)
配置DLL的“函数”、“参数”、“回调”和“错误检查”具体步 骤
30
7.6 调用动态链接库(DLL)
动态链接库
动态链接库(Dynamic Link Library,DLL)是一个可以多方共享 的程序模块,内部对共享的例程和资源进行了封装。
动态链接库文件的扩展名一般为*.dll,也可能是*.drv,*.sys或 者*.fon
Http://ccms.hust.edu.cn
Http://ccms.hust.edu.cn
34
7.6 调用动态链接库(DLL)
置顶窗口SetWindowPos()的用法
置顶窗口SetWindowPos()的用法
SetWindowPos()
函数功能:该函数改变一个子窗口,弹出式窗口式顶层窗口的尺寸,位置和Z序。子窗口,弹出式窗口,及顶层窗口根据它们在屏幕上出现的顺序排序、顶层窗口设置的级别最高,并且被设置为Z序的第一个窗口。
函数原型:BOOL SetWindowPos(HWN hWnd,HWND hWndlnsertAfter,int X,int Y,int cx,int cy,UNIT.Flags);
参数:
hWnd:窗口句柄。
hWndlnsertAfter:在z序中的位于被置位的窗口前的窗口句柄。该参数必须为一个窗口句柄,或下列值之一:
HWND_BOTTOM:将窗口置于Z序的底部。如果参数hWnd标识了一个顶层窗口,则窗口失去顶级位置,并且被置在其他窗口的底部。
HWND_DOTTOPMOST:将窗口置于所有非顶层窗口之上(即在所有顶层窗口之后)。如果窗口已经是非顶层窗口则该标志不起作用。
HWND_TOP:将窗口置于Z序的顶部。
HWND_TOPMOST:将窗口置于所有非顶层窗口之上。即使窗口未被激活窗口也将保持顶级位置。
查看该参数的使用方法,请看说明部分。
x:以客户坐标指定窗口新位置的左边界。
Y:以客户坐标指定窗口新位置的顶边界。
cx:以像素指定窗口的新的宽度。
cy:以像素指定窗口的新的高度。
uFlags:窗口尺寸和定位的标志。该参数可以是下列值的组合:
SWP_ASNCWINDOWPOS:如果调用进程不拥有窗口,系统会向拥有窗口的线程发出需求。这就防止调用线程在其他线程处理需求的时候发生死锁。
LabVIEW调用WindowsAPI函数实现VI窗口置顶
LabVIEW调用Windows API实现VI窗口置顶
前些天同事用LabVIEW开发了个常用的小工具软件,碍于电脑屏幕太小,想让这小工具一直保持在所有窗口的最顶端(置顶),几个人讨论研究发现通过LabVIEW的属性节点只能实现VI程序在LabVIEW软件中保持最前,而在其他窗口没能置顶,未能达到想要的效果。
通过上网查找资料,软件置顶是与操作平台的控制相关,需要调用Windows API去实现这功能,研究了一下,调用Windows API能很好的实现了VI置顶。百度上用LabVIEW调用Windows API的教程LabVIEW版本比较旧,为方便大家更好的学习,现将自己研究的方法分享出来。
一.什么是Windows API
Windows 这个多作业系统除了协调应用程序的执行、分配内存、管理资源…之外,它同时也是一个很大的服务中心,调用这个服务中心的各种服务(每一种服务就是一个函数),可以帮应用程序达到开启视窗、描绘图形、使用周边设备等目的,由于这些函数服务的对象是应用程序(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应用程序。
【VB】任意窗口置顶
运行程序后,
按下 Ctrl + Alt + Shift + T 使当前窗口置顶
按下 Ctrl + Alt + Shift + C 使当前窗口[color=Blue]取消[/color]置顶
按下 Ctrl + Alt + Shift + E 退出程序
图片中的计算器被置顶。
'窗体代码
Option Explicit
Private Const MOD_CONTROL = &H2
Private Const MOD_ALT = &H1
Private Const MOD_SHIFT = &H4
Private Declare Function RegisterHotKey Lib "user32" (ByVal hwnd As Long, ByVal id As Long, ByVal fsModifiers As Long, ByVal vk As Long) As Long
Private Declare Function UnregisterHotKey Lib "user32" (ByVal hwnd As Long, ByVal id As Long) As Long
Private Sub Form_Load()
Me.Visible = False
SetWndProc Me.hwnd, True
RegisterHotKey Me.hwnd, 2222, MOD_CONTROL Or MOD_ALT Or MOD_SHIFT, vbKeyT
RegisterHotKey Me.hwnd, 2223, MOD_CONTROL Or MOD_ALT Or MOD_SHIFT, vbKeyC
【LabVIEW】如何控制对话框窗口的显示位置?
【LabVIEW】如何控制对话框窗⼝的显⽰位置?
问题: LabVIEW提供了多种实⽤的VI可以通过弹出窗⼝实现⼈机交互(如单按钮对话框、双按钮对话框、三按钮对话框等)。这些窗⼝默认是从调⽤他们的VI正中弹出。按照这种默认⽅式,弹出对话框窗⼝常常会遮盖住程序VI上的输⼊控件和显⽰控件,有时⽤户对弹出的提⽰进⾏正确响应时恰恰需要参考这些控件上的信息。因此,我想知道有没有办法控制这些弹出窗⼝的显⽰位置,使其满⾜应⽤需求。
解答: 尽管LabVIEW没有提供⼀个直接的⽅法控制弹出窗⼝的位置,但是可以通过下述⽅式完成同样的功能:
1、将弹出对话框VI放置在⼀个单独的VI中。
2、通过VI Server引⽤和⼀个属性节点设置该VI的属性为前⾯板在最前、以透明⽅式运⾏、显⽰在指定位置,并且窗⼝尽可能⼩。请参考附件中的例⼦。
3、选择⽂件»VI属性,从弹出窗⼝的类别下拉菜单中选择窗⼝外观,点击Customize...按钮,在弹出窗⼝的调⽤时显⽰前⾯板和如之前未打开则在运⾏后关闭复选框前打勾。
4、保存该VI并且在主程序中调⽤该VI(就不直接调⽤弹出对话框VI了)。
附件中的两个VI实现了该功能。DialogXY.vi是⼀个会弹出双按钮对话框的⼦VI。Example.vi调⽤了该⼦VI,并且通过x和y坐标指定了对话框窗⼝的位置。
LABVIEW的DLL与API调用
LABVIEW的DLL与API调用
LABVIEW的DLL与API调用
一.实验目的
1.熟悉LabVIEW调用动态链接库的过程
2.学会编写用LabVIEW调用WINDOWS的API函数
二.实验器材
1.计算机(带有声卡)
2.LABVIEW8.20软件
三.实验原理
在开发自动测量系统时,经常遇到计算机与仪器的通信问题,涉及仪器控制及数据处理问题,LabVIEW语言在这一领域的应用有着独到的优势。为了在LabVIEW中能够充分利用其他编程语言的优势,LabVIEW提供了外部程序接口能力,包括动态链接库(DLL)、C语言接口(CIN)、ActiveX和Matlab等。
动态链接库是基于Windows程序设计的一个非常重要的组成部分。LabVIEW 开发中使用DLL,可以使代码更简洁,内存资源的使用更经济,而且可以便捷地利用仪器厂商或第三方提供的仪器控制子程序加速开发进程。而windows平台包含有大量的API函数,这些API函数提供了大量在Windows环境下可操作的功能,它们位于Windows系统目录下的多个DLL文件中,因此在LabView中调用API 函数和DLL的方法是一致的。
在LabVIEW中,利用库函数节点可以较容易地实现对DLL的调用,从而提高了程序的开发效率。使用调用库函数节点,可以调用Windows标准的动态连接库,也可以调用用户自己编制的DLL。LabView中动态链接库的调用可在程序框图的函数选板中选取“调用库函数节点”来完成,该节点位于:互连接口->库和可执行程序->调用库函数节点。
Win Api在VB中的妙用
Windows API作为一套功能强大的应用程序接口,使VB可以实现对Windows底层的控制,完成VB不具有的功能。下面介绍几种使用API函数的方法。 一、制作特殊窗口 1.各种形状的窗口(仅给出了函数名,具体定义可以查阅API Viewer) 1)CreateEllipticRgn 建立一个椭圆形的区域; 2)CreateRoundRectRgn 建立一个圆角矩形的区域; 3)CreatePolygonRgn 建立一个多边形区域; 4)CreatePolyPolygonRgn建立多个可重叠的多边形区域; 5)CreateRectRgn 建立一个矩形区域; 6)CombineRg连接两个区域,通过代入不同的参数可以实现多种合并方式; 7)SetWindowRgn 设定窗口的范围,使用前边创建的区域; 8)FrameRgn 在指定区域画上边框。 下边的程序就是建立一个形如“棒槌”的窗口:Private Sub Form1_Load()Dim p, q As Longp = CreateEllipticRgn(0, 0, 200, 200) ′通过制定左上角和右下角的坐标建立一个圆q = CreateRoundRectRgn(40, 120, 160, 400, 20, 20) ′通过制定左上角和右下角的坐标以及圆角的宽度建立一个圆角矩形CombineRgn p, q, p, RGN_OR ′联合两个区域,使用或(就是取并集)运算SetWindowRgn hWnd, p, True ′设置窗口区域Me.Refresh ′刷新窗口End Sub 2.浮动窗口 Delphi中实现浮动窗口非常容易,只要在属性栏中设置就可以。用VB实现就只有借助于API函数:SetWindowPos hWnd,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE+SWP_NOSIZE+SWP_SHOWWINDOW就可以了。其中hWnd是窗口的句柄,HWND_TOPMOST指定了窗口的位置—总是在最上边。如果你要取消这个属性,只要把TOPMOST改成NOTOPMOST就可以了。后面4个参数指定了窗口的位置和大小,和VB提供的MOVE方法一样。不过最后一个参数如果指定了SWP_NOMOVE(不改变位置)和 SWP_NOSIZE(不改变大小),那么这四个参数就会被忽略。 3.透明窗口 去年的《电脑报》上提供了一个制作透明窗口的办法,这里再介绍另一种方法:Private Sub Form1_Load()Dim p As Longp = GetWindowLong(hWnd,GWLEXSTYLE) ′取得当前窗口属性SetWindowLong hWnd, GWL_EXSTYLE,p + WS_EX_TRANSPARENT′加上一个透明属性Me.RefreshEnd Sub GetWindowLong 和 SetWindowLong 配合使用还可以更改窗口的不少属性,有兴趣的读者不妨一试。 二、读取外部图标 下面的一段程序就显示了如何读取程序中的图标,其中Picture1是一个图像框,dlgOpen是一个标准对话框,Command1是一个按钮;ExtractIcon函数有三个参数,第一个参数指定调用的应用程序,一般都用App.hInstance;第二个参数指定图标文件,可以是DLL、EXE和ICO。第三个参数的不同就决定了其返回值的不同:如果代入-1,就返回文件中包含的图标
LabVIEW调用操作系统功能
25
7.4 读/写系统注册表
LabVIEW中实现为应用程序自动地配置ODBC数据源
26
7.5 输入设备控制
用来获取连接到计算机上的操纵杆、键盘和鼠 标的信息
输入设备控制VI位于“函数→互连接口→输入 设备控制”子选板
20
7.4 读/写系统注册表
注册表写操作
创建注册表项
21
7.4 读/写系统注册表
程序运行结果
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\MyKey] "My String"="LabVIEW" "My Binary"=hex:03,02,01,00 "My DWORD"=dword:00000100
27
7.5 输入设备控制
实时获取鼠标键盘信息例程
首先通过“查询输入设备”(Query Input Devices.vi)查询按键 和鼠标的信息
分别初始化键盘和鼠标 在While循环中获取键盘按键信息和鼠标位置及点击信息 关闭输入设备
28
7.5 输入设备控制
程序框图
29
7.5 输入设备控制
如何在LabVIEW中创建一个简单的VI
如何在LabVIEW中创建一个简单的VI
LabVIEW(Laboratory Virtual Instrument Engineering Workbench)是一种流程化的编程语言,特别适用于数据采集、仪器控制和数据分析
等实验室应用。在这篇文章中,我们将介绍如何在LabVIEW中创建一
个简单的VI(Virtual Instrument,虚拟仪器)。
VI是LabVIEW的基本单元,类似于其他编程语言中的函数或方法。它由一系列节点(Nodes)组成,每个节点代表一个特定的操作。以下
是创建一个简单的VI的步骤:
1. 打开LabVIEW软件,点击菜单栏中的“新建VI”按钮,或者使用
快捷键Ctrl+N来创建一个新的VI。
2. 在Front Panel(前面板)上设计用户界面。Front Panel是用户与
VI交互的界面,可以添加控件(Controls)和指示灯(Indicators),以
及其他用户界面元素。点击工具栏上的不同控件图标,例如按钮、数
值输入框或图表,然后在Front Panel上单击鼠标来放置控件。
3. 在Block Diagram(块图)上设计程序逻辑。Block Diagram是VI
的主要程序区域,用于定义数据流和操作顺序。可以从Functions面板
上选择各种函数和节点来构建程序逻辑。拖拽所需的函数或节点到Block Diagram上,并通过连接线将其连接在一起。
4. 配置控件和指示灯的属性。在Front Panel上选中控件或指示灯,
右键点击并选择"Properties",可以设置其外观、行为或交互细节。例
LabWindowsCVI实现无标题栏界面如何实现界面的移动
LabWindows/CVI实现
无标题栏界面如何实现界面的移动(1)首先需要在主界面添加一个函数,如图1所示,在Callback function 中加入主界面回调函数,命名为mainTableFunction,点击“ok”按钮确定设置。
图1 程序的主界面
(2)然后,在菜单中“code”——>Generate——>Panel Callback直接选择生成代码的目标文件“.c”,最后生成相应的主界面回调函数代码。如图3所示。
图2 生成回调函数代码
图3 主界面回调函数代码
(3)第三步,在代码文件的开头,包含“windows.h”头文件,将需要的windows相关的函数引入,在引入的时候,需要注意将该头文件放在所有的头文件前面,否则会出现如图4所示错误信息。
图4 引用头文件不正确,导致错误
(4)补充关于鼠标左键移动界面的代码,在回调函数中加入以下代码,初始化变量:int hwnd;//窗口句柄
在switch中加入:
case EVENT_LEFT_CLICK: //长按鼠标左键,移动界面
GetPanelAttribute(panelHandle,ATTR_SYSTEM_WINDOW_HAN DLE,&hwnd); //获取窗口句柄
ReleaseCapture();//释放SendMessage(hwnd,WM_NCLBUTTONDOWN,HTCAPTION,0);
//发送系统消息
break;
(5)编译代码,最后可以实现鼠标左键移动界面的功能。
Delphi窗口置顶的方法
踏雪无痕
D elphi 窗口置顶的方法
分类: Delphi 2011-08-02 14:27 441人阅读 评论(0) 收藏举报
有几种窗口置顶的方法,简单的有:
ShowWindow(窗口句柄,sw_ShowNormal);
SetWindowPos(窗口句柄,HWND_NOTOPMOST,0,0,0,0,SWP_NOMOV OR SWP_NOSIZE OR SWP_SHOWWINDOW);
另一种方式是:
function ForceForegroundWindow(hwnd: THandle): boolean;
const
SPI_GETFOREGROUNDLOCKTIMEOUT = $2000;
SPI_SETFOREGROUNDLOCKTIMEOUT = $2001;
var
ForegroundThreadID: DWORD;
ThisThreadID : DWORD;
timeout : DWORD;
begin
if IsIconic(hwnd) then ShowWindow(hwnd, SW_RESTORE);
// Windows 98/2000 doesn't want to foreground a window when some other
// window has keyboard focus
if ((Win32Platform = VER_PLATFORM_WIN32_NT) and (Win32MajorVersion > 4))
or
((Win32Platform = VER_PLATFORM_WIN32_WINDOWS) and
LabVIEW 实现窗口置顶与透明显示
LabVIEW 实现窗口置顶与透明显示
laiping 2008-8-10
摘要:
本文介绍了如何在LabVIEW 实现窗口置顶与透明显示。
关键字:
LabVIEW、API、窗口置顶、透明显示
1.窗口置顶与透明显示功能简单介绍
窗口置顶是指运行程序窗口处于屏幕的最前端显示,即屏幕Z序的顶层窗口,位于其它窗口之上。
透明显示是指窗口以一定的透明度显示,可以查看被窗口覆盖下的内容。
2.相关API
Labview的VI属性节点Is Frontmostf无法实现窗口置顶功能,无相关VI 直接控制窗口置顶与透明显示,所以要实现此功能得调用相关Windows API。主要使用到以下二个API:
SetLayeredWindowAttribute 、SetWindowPos。
2.1
Public Declare Function SetLayeredWindowAttributes Lib "user32" (ByVal hwnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte,
ByVal dwFlags As Long) As Long
参数说明:
Hwnd:是透明窗体的句柄
crKey:为颜色值,// 掩码的颜色,可以用RGB(r,g,b)来指定
bAlpha:是透明度,取值范围是[0,255]
dwFlags:是透明方式,可以取两个值:
当取值为LWA_ALPHA时,crKey参数无效,bAlpha参数有效;
当取值为LWA_COLORKEY时,窗体中的所有颜色为crKey的地方将变为透明,bAlpha参数无效。
第7章LabVIEW调用操作系统功能
DLL和可执行文件(EXE)很相似,最大的区别 在于DLL虽然包含了可执行代码却不能单独执 行,必须由Windows应用程序直接或间接调用
第7章LabVIEW调用操作系统功能
7.6 调用动态链接库 (DLL)
动态链接库特点
通用性 DLL的编写、生成与具体编译器无关。
使用较少的资源 当多个程序使用同一个函数库时,DLL可以
第7章LabVIEW调用操作系统功能
7.2 读/写XML文件
从XML文件中读取数据
第7章LabVIEW调用操作系统功能
配置文件VI可读取和创建标准的
7.3Wi读ndo/w写s配配置置文文件,件其标准扩展名
为.ini,但只要内容格式正确, 配置文件VI也可操作以任何扩展 名命名的文件。
在.ini文件中,LabVIEW会将路径 数据保存为独立于平台的格式。
第7章LabVIEW调用操作系统功能
7.3 读/写配置文件
测试配置程序例程 初始化测试配置程序
第7章LabVIEW调用操作系统功能
7.3 读/写配置文件
测试配置程序例程 读取配置信息
第7章LabVIEW调用操作系统功能
7.4 读/写系统注册表
所谓“注册表”,实际上是一个庞大的数据库, 它包含了应用程序和系统软硬件的全部配置信息 ,这里所指的注册表仅针对于Windows操作系统。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
LabVIEW调用Windows API实现VI窗口置顶
前些天同事用LabVIEW开发了个常用的小工具软件,碍于电脑屏幕太小,想让这小工具一直保持在所有窗口的最顶端(置顶),几个人讨论研究发现通过LabVIEW的属性节点只能实现VI程序在LabVIEW软件中保持最前,而在其他窗口没能置顶,未能达到想要的效果。
通过上网查找资料,软件置顶是与操作平台的控制相关,需要调用Windows API去实现这功能,研究了一下,调用Windows API能很好的实现了VI置顶。百度上用LabVIEW调用Windows API的教程LabVIEW版本比较旧,为方便大家更好的学习,现将自己研究的方法分享出来。
一.什么是Windows API
W indows 这个多作业系统除了协调应用程序的执行、分配内存、管理资源…之外,它同时也是一个很大的服务中心,调用这个服务中心的各种服务(每一种服务就是一个函数),可以帮应用程序达到开启视窗、描绘图形、使用周边设备等目的,由于这些函数服务的对象是应用程序(Application),所以便称之为Application Programming Interface,简称API 函数。WIN32 API也就是Microsoft Windows 32位平台的应用程序编程接口。
W indows 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函数来实现。
这也是API函数使用的场合,所以我们对待API函数不必刻意去研究每一个函数的用法,
1
那也是不现实的(能用得到的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);
功能描
述
检索处理顶级窗口的类名和窗口名称匹配指定的字符串
输入参数1lpClassName:String,指向一个以null结尾的、用来指定类名的字符串。(注:使用时将此参数设置为Long型,直接赋常量0)
输入参数2
lpWindowName:String,指向一个以null结尾的、用来指定窗口名(即窗口标题)的字符串。如果此参数为NULL,则匹配所有窗口名。
输出参
数
无
返回值Long,如果函数执行成功,则返回值是拥有指定窗口类名或窗口名的窗口的句柄。如果函数执行失败,则返回值为 NULL 。
FindWindowA这个函数在这个动态库里面。dll是动态链接库(Dynamic Link Library)。DLL是一个包含可由多个程序,同时使用的代码和数据的库。使用DLL更容易地将更新应用于各个模块,而不会影响该程序的其他部分。这个动态库的路径一般在C:\Windows\System32\ 。
有了以上信息就可以开始用LabVIEW调用FindWindowA这个API函数了。新建一个VI,后面板点开函数面板,在互连接口->库与可执行程序->调用库函数节点,如图1。
图1 调用库函数节点面板路径图
点击后在后面板出现,利用即时