版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、用VB实现实时监控管理系统的开发技术Developing Technology of Real-time MonitoringManagement System Realized by VB杜秀霞李平康甘旭军文摘在介绍新风机组实时监控管理系统应用软件功能的基础上,讨论了Visual Basic中“漂浮”文本框的应用技术、Grid网格控件的应用等软件开发过程中一些功能的实现方法,以及实时监控管理系统软件编程的技术和实用技巧。关键词VB控件数据采集通讯监控随着科技的发展与计算机的普及,计算机控制在工程中的应用越来越广。Windows操作系统以其多任务、多界面等优点深受人们喜爱,而开发Windows
2、环境下的应用软件也越来越被人们所重视。微软的Visual Basic(简称为VB)用来开发Windows环境下的应用软件十分方便,在VB环境下设计软件界面,编程工作量小,一般只需进行主要应用功能的编程和少量界面控制的编制。我们在开发新风机组实时监控管理系统中采用了VB软件,实现了上位机中实时监控管理系统的开发,所开发的程序流程图如图1所示。本文在简要介绍新风机组监控系统构成的基础上,对如下的VB开发技术进行了讨论:(1) 使用网络(Grid)控件,实现电子表格的功能,在网格中显示采集到的数据。(2) 使用公共对话框(Common Button)控件,实现文件的打印、存取功能。(3) 使用通讯(
3、MSComm)控件,实现与下位机的通讯,以便对控制器进行数据采集、控制和管理。1新风机组监控管理系统简介1.1系统构成新风机组控制系统包括:温度控制器、电动调节阀、热敏电阻温度传感器、压力开关、差压开关、过滤器、表冷器、风机、上位机监控软件等。控制对象是风机的开或关、理想阀位值、回水温度、输出状态等。控制的最终结果是:控制送风温度使其与设定温度相同。控制系统示意图如图2。图1程序流程图图2新风机组监控简图1.2系统的工作原理新风机组引室外新风经表冷器进行冷热交换,将处理后的新风送至用户区域。温度传感器检测送风温度T1,温度控制器将T1信号与设定温度比较,并利用“神经元”控制原理进行运算,其输出
4、决定电动调节阀的输出状态,使表冷器的冷热水流量发生变化,从而使得送风温度等于设定温度。温度控制器接收差压开关、压力开关信号及送风温度、回水温度信号,直接控制阀门开度。上位机采用主从通讯方式与系统中全部温度控制器(本系统设定为不多于63台)构成简易集散系统,可监视每台温度控制器的运行状态。并可改变设定参数及实行远方手动操作。1.3监控系统管理软件功能实时监控管理软件是配合新风机组控制系统而编制的用微机对新风机组的整个系统及各个控制器进行监视和操作的应用软件,具有如下功能。(1) 监视功能能对该新风机组控制系统的各个控制器的参数进行监视,在计算机上可以同时显示每台设备的季节、设定温度、阀位上下限指
5、示、送风温度、入口差压、出口压力、输出状态、理想阀位、反馈阀位、占空比等参数。(2) 操作功能能对一些参数进行设定,如:季节(冬或夏)、设定温度(540)、阀位上限(100)、阀位下限(0)。能实现手动操作功能,可在计算机屏幕上手动控制停风机,开风机,送理想阀位值直接控制阀位动作等。(3) 显示单一设备工况可在计算机上显示温度控制器的运行状态,并将选定的单个设备的参数在画面中相应位置显示出来。(4) 保存及打印功能在系统中提供了菜单的功能,菜单中除具有画面中一些命令框的功能外,还提供存取文件、打印文件的功能。能打开、显示原来运行过的、已存盘的文件,也可把此次运行的参数保存起来,另外还可打印出当
6、前各个设备的参数。2实时数据采集与管理2.1实时数据采集在VB语言的专业版本中提供了通讯控制(Communication control)控件,本应用软件应用通讯(MScomm)控件,实现了通过串行端口传递和接收数据的功能。通讯(MScomm)控件功能强大,有很多特殊属性。可用它们来中断一个串行连结,检测一个载体并查询其当前状态;设置通讯标识;控制并行端口的选择;指定串行端口的有关设置,其中包括:握手、波特率、奇偶校验、数据位及停止位;建立并管理一个传送缓冲区;确定端口状态及解决奇偶校验问题。该系统使用80C592单片机作为下位机,采集传感器测量的数据,经过一定处理后,通过RS485串行口将数
7、据传送给上位PC机。在PC机上运行VB应用软件,接收串行口传来的数据,进行数据处理、显示、存盘、打印等。下面主要介绍对采集到的数据的显示处理及人机交互处理技术。2.2网络(Grid)控件及应用在应用程序中,需对大量实时数据进行管理,在程序设计过程中,使用了网格(Grid)控件的功能,而没有使用EXCEL电子表格软件。这是因为EXCEL软件是一个独立的应用软件,虽然有很强的功能,对表格的统计、显示、单元格数据的设定等,都很容易做到,但若在VB中使用了EXCEL软件,则该应用程序必需在有EXCEL的环境下才能运行,这样程序的运行就受到一定限制,而且这样编制的应用软件会很大。开发VB本身所带的网格(
8、Grid)控件的功能,可起到电子表格的作用。使用网格,可以按行和列顺序显示文本、数字和图片,就跟处理一个电子表格一样。可以调整网格的高度、宽度和其它显示特征。还可以对行和列进行个别操作,也可成组处理。网格自动响应用户输入,允许用户移动有关网格和选择单个或成组的单元。网格的Row和Col属性标明了当前活动着的网格单元的行和列。可以在程序代码中修改Row和Col的值,可以从网格的TEXT属性中读出单元的内容。如:Grid1.row2Grid1.col4resultGrid1.Text就选中了Grid1网格的第二行和第四列。Result就包含了当前单元(第二行的第四列)的内容。一个网格还可以象电子表
9、格一样有固定的行和列,FixedRows和FixedCols的值分别指明了固定行和列的数目。而Rows和Cols属性则分别指定了一个网格中行和列的总数目。如:Grid1.FixedRows1Grid1.FixedCols1Grid1.Rows7Grid1.Cols8表明该网格具有7行8列,且有一个固定行和一个固定列。从网格的CLIP属性中可读出涉及被选中区域的所有数据。数字和文本型数据通常都是按字符串数据存储在网格单元中的。在设计的应用程序主画面中,使用了4个Grid(Grid1Grid 4)控件,组成系统画面。完成显示和设定不同参数的功能。该画面由三部分组成,第一部分是控制按钮,分别由Com
10、mand3D控件实现;第二部分是温度控制单元,由Grid1、Grid2控件实现。由于网格控件只能设计成规则的表格,所以这部分由两个网格来实现,网格一(Grid1)是一个具有1个固定行和1 个固定列的64行17列的主表格,作为各种参数的主要显示单元,固定行显示参数名称(如:Adr、H/C、T0等),固定列显示地址号(如1、2、3等)。网格二(Grid2)是一个具有1个固定行,0个固定列的1行11列的副表格,作为主表格中参数名称的解释(如:地址、季节、设定温度等)。第三部分同第二部分一样由两个控件(Grid3、Grid4)来实现,只是显示内容为差压控制单元。当网格单元的整个范围不适合在网格边界里面
11、时,网格就需要设定滚动条,滚动条是由ScrollBars属性确定的。如Grid1.ScrollBars3,则使该网格既具有水平滚动又具有垂直滚动条。若Grid1.ScrollBars0,则该网格既没有水平滚动条又没有垂直滚动条。在内部,网格是用“制表分隔符格式”(tab-delimited format)处理字符串数据的。即各单元的数据被制表符Tab,Chr(9)分开,各行的数据被回车符CR,Chr(13)分开。这种方式能很方便地把数据移入和移出网格,不论是一次一行数据还是一大段数据。制表分隔符格式的方便之处还在于许多WINDOWS应用程序支持它,如:Microsoft Word,Excel,
12、WordPerfect等。如果把网格的内容保存在一个文本文件中,就可以用这类应用程序读这个文件。如:WINDOWS的电子表格程序Excel就能自动将数据转换到它自己的单元中,按表格方式显示出来。WINDOWS的字处理器AMI PRO,能清除制表符和CR字符,可以快速地将网格信息格式化成一个文本表。该应用程序具有存取文件的功能,即对网格中的数据进行存取。存取功能利用网格的特点,如存文件时只要将按网格方式写好的数据,存成文本(TXT)格式的文件就可以了。取文件到网格中也很简单,当按照各单元之间以TAB键分开,各行之间以CR分开的格式组织文本文件后,就可以将该文件读到网格的相应单元中。在网格单元中还
13、保留了一个Picture属性,利用它,可以在网格中包含图片数据。2.3飘浮的文本框在该应用程序中,使用的网格控件除完成数据显示的功能外,还要对其单元的内容进行输入更新,实现人机交互功能。但网格控件的不足是不能在网格的单个单元中进行编辑。如果在运行时需要修改单元内容,就要在应用程序中增加一个控制,该应用程序采用了由程序代码将一个文本框与网格连接起来的方法。因要求这个单独为输入及编辑文本用的文本框控制在程序运行时不能被显示出来,所以采用了“漂浮”的文本框技术。“漂浮”的文本框通常直到用户想编辑一个单元内容时才显示出来,用户可以用几种方式发出信号,以便编辑一个单元,如用鼠标连续两次击一个单元;按回车
14、键,或只是从键盘中键入字母或数字。当用户编辑一个单元时,把一个文本框控制直接放在该单元上,使文本框为可见状态,文本框与该单元有同样的尺寸与形状,结果用户看起来好象直接在单元中编辑,而实际是在文本框中。确定文本框的准确大小及其放置的位置是很细致的,必须考虑到单元列的宽度,分隔各个单元线条的粗细度,以及网格本身与窗体的顶部和左边边界距离等。在本程序中还使用了TwipsPerPixelX和TwipsPerPixelY这两个屏幕(SCREEN)属性,保证了文本框能准确地显示在单元边界内部。整个网格周围的边框和分隔各个单元的线条都只有一个象素宽。要把这些一个象素宽的线条统一考虑进整个网格和各个行、列中。
15、TEXT1没有边框类型,所以文本框能很平滑地放在单元中(指配合得很好)用于编辑。结果就好象单元本身在修改,直到编辑过程已完成或被取消时为止。当不编辑一个单元内容时,“漂浮”的文本框显示当前网格单元的内容。保持文本框中内容总是最新的最简单办法是使用网格的RowColChange事件过程。每当当前的网格单元变化时,该事件过程就将当前网格单元的内容装入文本框的Text属性中。Grid1RowColChange事件过程代码如下:Sub Grid1RowColChange()Text1.TextGridl.TextEnd Sub“漂浮”的文本框要求有一些响应代码,以便确定何时编辑结束及如何响应编辑。击键
16、的规则设置成,按Escape取消编辑,按回车、Tab或一个箭头键完成编辑。在Text1KeyPress事件过程中完成上述功能。Text1KeyPress事件过程只能响应Escape、Tab及回车键,而文本框还要正确响应向上或向下箭头键的情况,这必须要在Text1KeyDown事件过程中来完成。2.4文本框的其它使用技巧(1) 本应用程序中,在显示单一画面时,显示数字的文本框应设成只读,而且还要使汉字体为黑色,这就需要除了将文本框的Enabled属性设成False外,还要将Multiline属性设为True才能实现此功能。(2) 应用程序中,在输入参数时,要求所输入的参数必须为数字字符,而不能输
17、入汉字、字母或其它字符,这就需要文本框具有识别数字字符和非数字字符的能力,在程序中,要将输入的非数字字符进行屏蔽。在Sub Text1KeyPress子程序中加入一段程序,即可实现这一功能。(3) 在文本框中,输入字符的最大长度应为32 768,若对所设置的文本框进行字符限制,可以使用MaxLength属性,若为0则表示可以接受任意多的字符(小于32 768),若设置为非零数值,则将用户输入字符限制在该数值范围内。如在本程序中,需要设置口令,将其定为三位数,则MaxLengrh3。在用文本框设置口令时,希望所输入的字符别人无法看到,这就要用到PasswordChar属性。若该属性设置为一个字符
18、,如星号(),当键入任何字符时,都将显示该星号字符,实际上,文本框的内容还是刚输入的文本,改变的只是显示的内容。3结束语本文在介绍新风机组监控系统上位机功能的基础上,介绍了用VB开发功能软件的一些技术实践和体会,如漂浮文本框技术,网格控件的使用等。所开发的应用软件在新风机组的控制中,起到了管理和监控的功能,对新风机组的正常运行起到了良好的监控作用。作者单位:北京高等电力专科学校 (北京 100044)VB中设计多文档界面应用程序的简单示例【例】设计一个包含一个MDI父窗体MDIForm1和三个子窗体Form1、Form2和Form3的工程,将Form1、Form2和Form3的MDIChild
19、属性分别设置为True。在MDI窗体上设计菜单,主菜单及子菜单如图1a和图1b所示。“打开”菜单下的三个菜单项分别用于打开子窗体Form1、Form2和Form3,“窗口”菜单下的菜单项用于对打开的窗体进行各种排列。a) 打开菜单 b) 窗口菜单图1 MDIForm1中的菜单MDIForm1的菜单编辑器设置如下表所示。表 MDIForm1的菜单编辑器设置标题名称索引显示窗口列表说明打开Mopen.窗口1.窗口2.窗口3SWindow1SWindow2SWindow3窗口MWindows显示打开的窗口列表.层叠.水平平铺.垂直平铺.排列图标SArrangeSArrangeSArrangeSArr
20、ange0123控件数组代码如下:Private Sub SArrange_Click(Index As Integer)MDIForm1.Arrange IndexEnd SubPrivate Sub SWindow1_Click()Form1.ShowEnd SubPrivate Sub SWindow2_Click()Form2.ShowEnd SubPrivate Sub SWindow3_Click()Form3.ShowEnd Sub运行时,使用“打开”菜单下的各命令打开各窗口,再选择“窗口”菜单下“水平平铺”,执行效果如图2a所示,这时的“窗口”菜单下显示了当前打开的窗口列表,如
21、图2b所示。a) 水平平铺各子窗口 b) 显示当前打开的窗口列表图2 在MDI父窗口中打开多个子窗口在Visual Basic中创建多文档界面的步骤在Visual Basic中创建多文档界面的步骤如下:1)打开“工程”菜单,选择“添加MDI窗体”,打开“添加MDI窗体”对话框。2)在“添加MDI窗体”对话框中选择“新建”选项卡,再选择“MDI窗体”,然后单击“打开”按钮,添加一个新的MDI父窗体(MDIForm对象)。一个应用程序只能有一个MDI父窗体。多数控件不能放在MDI窗体上,除非控件具有Align属性(如PictureBox控件)或者运行时不可见(如Timer控件)。可以在MDI父窗体
22、上设计应用程序的菜单、工具栏、状态栏。3)用与建立普通窗体相同的方法建立其他子窗体,设置各子窗体的MDIChild属性为True。在设计子窗体时,可以像设计普通窗体一样添加控件、设置属性、编写代码完成各种功能。4)选择“工程”菜单下的“工程属性”命令,打开“工程属性”对话框,从“启动对象”下拉列表中选择MDIForm对象。如果“启动对象”不是MDIForm对象,而是某个子窗体,则运行时会自动显示MDI父窗体和该子窗体。5)要在MDIForm对象中显示各子窗体,可以使用Show方法。当在MDI父窗体中同时显示多个子窗体时,可以使用Arrange方法重排MDI子窗体或图标。使用格式为:.Arran
23、ge 其中,可以有以下选择:vbCascade或0:层叠所有非最小化的MDI子窗体。vbTileHorizontal或1:水平平铺所有非最小化的MDI子窗体。vbTileVertical或2:垂直平铺所有非最小化的MDI子窗体。vbArrangeIcons或3:重排最小化的MDI子窗体的图标。用VB编写监视指定进程的程序所属类别:VB推荐指数:文档人气:698本周人气:1发布日期:2007-5-28作者: 徐原一、前言有些对外营业的公司在大厅中都有一个触摸屏,以供客户查询公司的信息,可是通常查询程序都很大,而且很复杂,这样在连续长时间使用后难免会出现错误以致程序中途退出,这时就要工作人员来重新
24、启动那个程序,而且有时候很忙不一定能有专人守在这个地方。其实可以用一个程序来专门处理这种情况的。我们局电信营业前台的多媒体查询系统也常常会出现这样的问题,下面是本人开发出来的监控程序处理思路。二、实现思路及关键技术要防止程序中途退出,就需要另外的一个程序专门对要监控的进程进行时刻不停的监控,检测到被监控的进程退出了就重新启动它。但是有时候可能是操作系统出了问题,不能简单地重复启动要监控的进程,在重启了一定的次数后被监控进程仍然退出,那就需要重新启动操作系统了,以便使操作系统中的环境参数等重新初始化,然后再运行监控进程并启动被监控的进程。监控进程的存在最好不能影响被监控的进程,监控进程启动的时候
25、要进行判断,看当前状况下被监控的进程有没有起来,如果起来了就获取其进程句柄并进行监控,如果没有起来则使之起来并监控。这里判断一个被监控的进程有没有起来不能简单地通过查找窗口标题来实现,因为窗口标题在程序内部可能是根据运行的时刻和条件动态地改变的,而且别的进程也可以和可能去改变被监控进程的窗口标题。程序中使用了CreateToolhelp32SnapShot()这个API函数遍历系统进程池里的所有进程全路径等信息来查找的,一个进程运行起来之后,它的路径是不可能被改变的,无论它自己还是别的进程。为了实现程序的高效率,这里监控进程不是用Timer控件轮寻来检测,而是用API函数WaitForSing
26、leObject (),同时传入等待时间为无限长(-1),但是这里有个问题,就是程序在等待的同时被冻结,这样用户在这个时候就无法对该监控程序进行设置操作了,为了避免这种情况,这里使用了多线程技术,在VB中使用多线程一直是不安全的,在线程代码中必须不能出任何错误。要使监控进程能自动启动操作系统,必须要在系统启动的登陆对话框出现的时候该进程也能运行起来,这可以通过把该进程放入注册表项HKEY_LOCAL_MACHINESoftWareMicrosoftWindowsCurrentVersionRunSevices里来实现。在进程运行起来之后就需要检测登陆对话框,如果找到就发送回车(这里没设登陆密码
27、,如果有密码,可以修改程序中发送的按键来实现登陆)。但是这里也有可能是登陆的时候系统设置的不是“网络用户”方式或有用户在屏幕上按了“确定”对话框,程序不能这这里一直等待一个不可能的事件,所以要在这个地方加以判断,如果等了1分钟没有找到登陆对话框,程序就继续下面的操作。三、代码示例模块中:Public Type PROCESSENTRY32记录进程信息的结构dwSize As LongcntUsage As Longth32ProcessID As Longth32DefaultHeapID As Longth32ModuleID As LongcntTreads As Longth32Pare
28、ntProcessID As LongpcPriClassBase As LongdwFlags As LongszExeFile As String * 260这就是包含全路径的进程文件名End TypePublic Declare Function Process32First Lib kernel32 (ByVal hSnapshot As Long, lppe As PROCESSENTRY32) As Long用来遍历进程池的函数,这是查找的起始函数Public Declare Function Process32Next Lib kernel32 (ByVal hSnapshot
29、As Long, lppe As PROCESSENTRY32) As Long遍历进程池的向下递归函数Public Type STARTUPINFO记录进程启动信息的结构cb As LonglpReserved As StringlpDesktop As StringlpTitle As StringdwX As LongdwY As LongdwXSize As LongdwYSize As LongdwXCountChars As LongdwYCountChars As LongdwFillAttribute As LongdwFlags As LongwShowWindow As I
30、ntegercbReserved2 As IntegerlpReserved2 As BytehStdInput As LonghStdOutput As LonghStdError As LongEnd TypePublic Type PROCESS_INFORMATION 记录进程启动后相关信息的结构hProcess As Long进程句柄hThread As Long线程句柄dwProcessId As Long进程IDdwThreadId As Long线程IDEnd TypePublic Declare Function GetCurrentProcess Lib kernel32
31、() As Long获取当前进程句柄Public Declare Function GetCurrentProcessId Lib kernel32 () As Long;获取当前进程IDPublic Const TH32CS_SNAPPROCESS = As LongH2Public Declare Function WaitForSingleObject Lib kernel32 (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As LongPublic Declare Function ExitWindowsEx Lib use
32、r32 (ByVal uFlags As Long, ByVal dwReserved As Long) As LongPublic Declare Function RegisterServiceProcess Lib kernel32 (ByVal dwProcessId As Long, ByVal dwType As Long) As LongPublic Declare Function GetModuleFileName Lib kernel32 Alias GetModuleFileNameA (ByVal hModule As Long, ByVal lpFileName As
33、 String, ByVal nSize As Long) As LongPublic Declare Function RegSetValueEx Lib advapi32.dll Alias RegSetValueExA (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, ByVal lpData As String, ByVal cbData As Long) As LongPublic Declare Function RegCloseKey Li
34、b advapi32.dll (ByVal hKey As Long) As LongPublic Declare Function RegOpenKey Lib advapi32.dll Alias RegOpenKeyA (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As LongPublic Declare Function GetWindow Lib user32 (ByVal hwnd As Long, ByVal wCmd As Long) As LongPublic Declare Functi
35、on GetWindowText Lib user32 Alias GetWindowTextA (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As LongPublic Declare Function GetWindowTextLength Lib user32 Alias GetWindowTextLengthA (ByVal hwnd As Long) As LongPublic Declare Function CreateProcess Lib kernel32 Alias CreateProce
36、ssA (ByVal lpApplicationName As String, ByVal lpCommandLine As String, ByVal lpProcessAttributes As Long, ByVal lpThreadAttributes As Long, ByVal bInheritHandles As Long, ByVal dwCreationFlags As Long, lpEnvironment As Any, ByVal lpCurrentDriectory As String, lpStartupInfo As STARTUPINFO, lpProcessI
37、nformation As PROCESS_INFORMATION) As LongPublic Declare Function GetSystemMenu Lib user32 (ByVal hwnd As Long, ByVal bRevert As Long) As LongPublic Declare Function RemoveMenu Lib user32 (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As LongPublic Declare Function DrawMenuBar
38、Lib user32 (ByVal hwnd As Long) As LongPublic Declare Function GetMenuItemCount Lib user32 (ByVal hMenu As Long) As LongPublic Declare Function ResumeThread Lib kernel32 (ByVal hThread As Long) As LongPublic Declare Function SuspendThread Lib kernel32 (ByVal hThread As Long) As LongPublic Declare Fu
39、nction CreateThread Lib kernel32 (ByVal lpThreadAttributes As Long, ByVal dwStackSize As Long, ByVal lpStartAddress As Long, ByVal lpParameter As Long, ByVal dwCreationFlags As Long, lpThreadId As Long) As LongPublic Declare Function TerminateProcess Lib kernel32 (ByVal hProcess As Long, ByVal uExit
40、Code As Long) As LongPublic Declare Function TerminateThread Lib kernel32 (ByVal hThread As Long, ByVal dwExitCode As Long) As LongPublic Const PROCESS_TERMINATE =&H1Public Const PROCESS_QUERY_INFORMATION =&H400Public Const EWX_FORCE = 4Public Const EWX_REBOOT = 2Public Const GW_CHILD = 5Public Cons
41、t GW_HWNDFIRST = 0Public Const GW_HWNDNEXT = 2Public Const GW_MAX = 5Public Const GW_OWNER = 4Public Const HKEY_LOCAL_MACHINE =&H80000002Public Const REG_SZ = 1Public Const RSP_SIMPLE_SERVICE = 1Public Const RSP_UNREGISTER_SERVICE = 0Public Const CREATE_SUSPENDED = &H4Public Const MF_BYPOSITION = &H
42、400Public Const BM_CLICK = &HF5Public pe As PROCESSENTRY32, hSnapshot As LongPublic StartNum As Long, AppName As String, Section As String, sKey As String, appValue As String, sKeyFile As String, sKeyNum As StringPublic NumTerminate As Long, hThread As Long, ThreadID As Long, sFileName As StringPubl
43、ic Function StartMonitor(lParam As Long) As Long线程函数WaitForTheProcess GetProcessHandle(sFileName), sFileName开始监控StartMonitor = 1End FunctionPublic Function SendEnter As Long()搜寻系统登陆对话框,找到就发送回车键Dim Currwnd As Long, Length As Long, ListItem As StringCurrwnd = GetWindow(Form1.hwnd, GW_HWNDFIRST)这里用窗口标题
44、查找的原因是系统重启时基本上不会加载多少进程,这样窗口的标题通常是不会被改变的。While Currwnd 0Length = GetWindowTextLength(Currwnd)获取窗口标题字符串的长度。If Length 0 ThenListItem As String = Space As String(Length)Length = GetWindowText(Currwnd, ListItem As String, Length + 2)获取窗口标题If InStr(ListItem, 输入网络密码) 0 ThenEnumChildWindows Currwnd, Address
45、Of GetOkButton, 0SendEnter = 1Exit FunctionEnd IfEnd IfCurrwnd = GetWindow(Currwnd, GW_HWNDNEXT)WendSendEnter = 0End FunctionPublic Sub WaitForTheProcess(ByVal hProcess As Long, ByVal sPath As String)开始监控进程Dim Pro_Info As PROCESS_INFORMATION, StartInfo As STARTUPINFOStartInfo.cb = Len(StartInfo)If h
46、Process 0 Then如果已经运行了被监控进程则开始监控Dim WaitResult As LongWaitResult = WaitForSingleObject(hProcess, (-1)CloseHandle hProcessIf StartNum = NumTerminate Then如果重启次数超过设置的次数就重新启动系统SaveSetting AppName, Section, sKey, 1ExitWindowsEx EWX_REBOOT Or EWX_FORCE, 0强制退出,这样可以顺利退出Exit SubEnd IfStartNum = StartNum + 1Fo
47、rm1.Label6 = StartNumEnd IfCreateProcess vbNullString, sPath, 0, 0, True, 32, ByVal 0 As Long, vbNullString, StartInfo, Pro_Info 否则用被监控进程的全路径文件名来创建被监控进程WaitForTheProcess Pro_Info.hProcess, sPathEnd SubPublic Function GetProcessHandle As Long(ByVal sPath As String)获取被监控进程的进程句柄sPath = LCase(sPath)hSna
48、pshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)创建一个snapshot对象pe.dwSize = Len(pe)bValue = Process32First(hSnapshot, pe)开始遍历系统进程池While bValue 0If InStr(LCase(pe.szExeFile), sPath) 0 Then如果找到了,则Dim hProcess As LonghProcess = OpenProcess(PROCESS_QUERY_INFORMATION, 0, pe.th32ProcessID)GetProcessH
49、andle = hProcessCloseHandle hSnapshotExit FunctionEnd IfbValue = Process32Next(hSnapshot, pe)WendCloseHandle hSnapshotGetProcessHandle = 0否则返回0End FunctionPublic Function GetOkButton(ByVal hwnd As Long, ByVal lParam As Long) As Long获取“输入网络密码框”窗口中“确定”按钮的句柄Dim Length&, ListItem$Length = GetWindowTextLength(hwnd)If Length 0 ThenListItem$ = Space$(Length)Length = GetWindowTex
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年青岛港湾职业技术学院单招职业技能测试题库带答案详解(a卷)
- 2026年顺德职业技术学院单招职业适应性考试题库带答案详解(突破训练)
- 2026年阜阳幼儿师范高等专科学校单招职业适应性测试题库及参考答案详解
- 2026年青岛职业技术学院单招职业适应性测试题库带答案详解(夺分金卷)
- 2026年黄冈职业技术学院单招职业适应性考试题库带答案详解(b卷)
- 2026年陕西国际商贸学院单招职业技能测试题库含答案详解(夺分金卷)
- 2026年青岛工程职业学院单招职业倾向性考试题库附答案详解(培优a卷)
- 2026年青海建筑职业技术学院单招职业倾向性测试题库带答案详解
- 2026年青岛工程职业学院单招职业技能测试题库带答案详解(满分必刷)
- 2026年阳泉职业技术学院单招综合素质考试题库附答案详解(b卷)
- 广州建筑工程安全培训课件
- 2025至2030中国肥料原料行业发展研究与产业战略规划分析评估报告
- 汽车吊安全培训教育课件
- 2025年国有企业总经理竞聘面试题及参考答案指南
- 招标投标实施条例课件
- 2025年大兴机场准入考试题库
- 新课标文科全科-2026高考大纲TXT便利版
- 风电场规划设计与施工
- 2025年税务局上海面试题及答案
- 北京政务云管理办法
- 学堂在线 雨课堂 学堂云 工程伦理2.0 章节测试答案
评论
0/150
提交评论