[VB.net]网络状态监视器[2012.02.28]

程序可以监控网络连接状态,可以设定网络断开的话就自动关机或运行程序。

新浪博客http://blog.sina.com.cn/s/blog_647ee5f70100wicy.html


更新
2.细节调整
3.修复Bug
4.错误处理



界面图及控件命名如下:


此外,程序还包含两个Timer控件,Timer1用于定时执行命令,Timer2用于获取当前时间并显示一个NotifyIcon控件用于显示托盘图标;一个ContextMenuStrip控件用于托盘图标的右键菜单一个OpenFileDialog控件用于打开文件


代码

Public Class Monitor1

    Dim a As Boolean

    Private Sub Form1_Load(sender As System.Object,e As System.EventArgs) Handles MyBase.Load
        Label3.Text = "当前时间:" & My.Computer.Clock.LocalTime.ToLongTimeString   '获取当前时间并显示
        Timer1.Interval = My.Settings.Interval1    '从设置中获取保存的检测间隔
        ComboBox1.Selectedindex = 1               '令检测间隔选择框显示第二项

        If My.Settings.LWS = 1 Then    '初始化【开机启动】复选框状态
            CheckBox3.Checked = True
        Else
            CheckBox3.Checked = False
        End If

        If My.Settings.SWR = 1 Then   '获取【运行即监控】设置
            Timer1.Enabled = True
            CheckBox4.Checked = True
            Button1.Text = "关闭监视"
            Label2.Text = "监视功能状态:已开启"
            Label2.ForeColor = Color.DarkGreen
        Else
            Timer1.Enabled = False
            CheckBox4.Checked = False
            Button1.Text = "开启监视"
            Label2.Text = "监视功能状态:已关闭"
            Label2.ForeColor = Color.DarkRed
        End If

        a = My.Computer.Network.Ping("8.8.8.8")     '通过Ping 8.8.8.8来判断网络是否连通
        If a = True Then
            Label1.Text = "网络状态:网络已连接"       '如果网络已连接,则显示
            Light1.FillColor = Color.Green      '同时将“指示灯”颜色更改为绿色
            Light1.FillGradientColor = Color.LightGreen
            NotifyIcon1.Text = "网络监视器" & Chr(13) & "网络状态:网络已连接"
        Else
            Label1.Text = "网络状态:网络未连接"
            NotifyIcon1.Text = "网络监视器" & Chr(13) & "网络状态:网络未连接"
        End If
        NotifyIcon1.ContextMenuStrip = ContextMenuStrip1     '为托盘图标添加右键菜单
        If My.Settings.FilePath1 = "" Then
            TextBox1.Text = "请输入要运行的程序路径"
        Else
            TextBox1.Text = My.Settings.FilePath1
        End If
    End Sub

    Private Sub Timer1_Tick(sender As System.Object,_
                            e As System.EventArgs) Handles Timer1.Tick      'Timer1控件的Tick间隔为20000毫秒
        Dim result2 As String

        a = My.Computer.Network.Ping("8.8.8.8")
        If a = True Then
            Label1.Text = "网络状态:网络已连接"
            Light1.FillColor = Color.Green
            Light1.FillGradientColor = Color.LightGreen
            NotifyIcon1.Text = "网络监视器" & Chr(13) & "网络状态:网络已连接"     '设置托盘图标的显示内容
        Else
            Label1.Text = "网络状态:网络未连接"      '如果网络未连接,则显示
            Light1.FillColor = Color.Red        '同时更改“指示灯”颜色为红色
            Light1.FillGradientColor = Color.Pink
            NotifyIcon1.Text = "网络监视器" & Chr(13) & "网络状态:网络未连接"
            If CheckBox1.Checked = True Then    '如果勾选【网络断开自动关机】
                Dim systemD As String
                systemD = System.Environment.SystemDirectory
                Process.Start(systemD & "\shutdown.exe","-s -t 60")    '则执行关机命令,延迟60秒
                Timer1.Enabled = False      '令Timer1不可用,以阻止多次执行同一动作
                result2 = MsgBox("网络已断开,计算机将在60秒内关闭",MsgBoxStyle.OkCancel)  '弹出对话框提示计算机即将关闭
                Me.ShowInTaskbar = True
                If result2 = vbCancel Then
                    Process.Start(systemD & "\shutdown.exe","-a")   '若用户在关机前点击对话框的“取消”按钮,则取消自动关机
                    CheckBox1.Checked = False
                    Timer1.Enabled = True
                End If
            Else
                If CheckBox2.Checked = True And TextBox1.Text <> "" Then    '如果勾选【网络断开运行程序】
                    Try
                        Process.Start(TextBox1.Text)    '则运行程序
                        CheckBox2.Checked = False
                    Catch ex As Exception
                        MsgBox("发生错误,可能是文件不存在!",MsgBoxStyle.Exclamation)
                    End Try
                End If
            End If
        End If
    End Sub

    Private Sub CheckBox1_CheckedChanged(sender As System.Object,e As System.EventArgs) Handles CheckBox1.CheckedChanged
        If CheckBox1.Checked = True Then
            CheckBox2.Enabled = False
        Else
            CheckBox2.Enabled = True
        End If

    End Sub

    Private Sub CheckBox2_CheckedChanged(sender As System.Object,e As System.EventArgs) Handles CheckBox2.CheckedChanged
        If CheckBox2.Checked = True Then   '如果选择了第二个单选按钮
            CheckBox1.Enabled = False     '禁用另一功能
            TextBox1.Enabled = True      '启用文本框
            If TextBox1.Text = "请输入要运行的程序路径" Then
                TextBox1.Text = ""           '清空文本框内容
            End If
            Button2.Enabled = True       '启用【浏览】按钮
            Button3.Enabled = True        '启用【保存路径】按钮
        Else
            CheckBox1.Enabled = True
            TextBox1.Enabled = False
            If TextBox1.Text = "" Then
                TextBox1.Text = "请输入要运行的程序路径"
            End If
            Button2.Enabled = False
            Button3.Enabled = False
        End If
    End Sub

    Private Sub CheckBox3_CheckedChanged(sender As System.Object,e As System.EventArgs) Handles CheckBox3.CheckedChanged
        If CheckBox3.Checked = True Then
            Try
                My.Computer.Registry.SetValue("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run",_
                                              "NetworkMonitor",Application.ExecutablePath)    '写入注册表
            Catch ex As Exception
                MsgBox("发生未知错误错误代码:" & Err.Number)    '其实几乎不可能发生错误
            End Try
            MsgBox("设置完毕,已启用开机自动运行",MsgBoxStyle.information)   '提示
            My.Settings.LWS = 1    '保存设置
        Else
            Try
                My.Computer.Registry.SetValue("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run","")
            Catch ex As Exception
                MsgBox("发生错误错误代码:" & Err.Number,MsgBoxStyle.Exclamation)
            End Try
            MsgBox("设置完毕,已禁止开机自动运行",MsgBoxStyle.information)
            My.Settings.LWS = 0
        End If
    End Sub

    Private Sub CheckBox4_CheckedChanged(sender As System.Object,e As System.EventArgs) Handles CheckBox4.CheckedChanged
        If CheckBox4.Checked = True Then
            My.Settings.SWR = 1    '保存设置
        Else
            My.Settings.SWR = 0
        End If
    End Sub

    Private Sub Button1_Click(sender As System.Object,e As System.EventArgs) Handles Button1.Click
        If Button1.Text = "关闭监视" Then    '点击【关闭监视】按钮
            Timer1.Enabled = False        '则禁用计时器,即停止监视功能
            Label2.Text = "监视功能状态:已关闭"     '显示状态
            Label2.ForeColor = Color.DarkRed          '修改字体颜色
            Button1.Text = "开启监视"               '修改按钮文本
        Else
            Timer1.Enabled = True
            Label2.Text = "监视功能状态:已开启"
            Label2.ForeColor = Color.DarkGreen
            Button1.Text = "关闭监视"
        End If
    End Sub

    Private Sub Button2_Click(sender As System.Object,e As System.EventArgs) Handles Button2.Click
        Try
            OpenFileDialog1.ShowDialog()
            TextBox1.Text = OpenFileDialog1.FileName
        Catch ex As Exception
            MsgBox("发生错误",MsgBoxStyle.Exclamation)
        End Try
    End Sub

    Private Sub Button3_Click(sender As System.Object,e As System.EventArgs) Handles Button3.Click
        If TextBox1.Text <> "请请输入要运行的程序路径" And TextBox1.Text <> "" Then
            My.Settings.FilePath1 = TextBox1.Text
        Else
            MsgBox("请输入正确的路径",MsgBoxStyle.Exclamation)
        End If
    End Sub

    Private Sub Button4_Click(sender As System.Object,e As System.EventArgs) Handles Button4.Click
        If Me.Width = 425 Then
            Me.Width = 700    '展开【设置】部分
            GroupBox2.Enabled = True   '启用【设置】部分
            Button4.Text = "设置 <<"
        Else
            Me.Width = 425
            GroupBox2.Enabled = False
            Button4.Text = "设置 >>"
        End If
    End Sub

    Private Sub Button5_Click(sender As System.Object,e As System.EventArgs) Handles Button5.Click
        Dim interval2 As Integer
        If Button5.Text = "设置检测间隔" Then
            Button5.Text = "保存"
            ComboBox1.Enabled = True
        Else
            Select Case ComboBox1.Text
                Case "10秒"
                    interval2 = 10000
                Case "20秒(认)"
                    interval2 = 20000
                Case "30秒"
                    interval2 = 30000
                Case "1分钟"
                    interval2 = 60000
                Case "2分钟"
                    interval2 = 120000
                Case "5分钟"
                    interval2 = 300000
                Case "10分钟"
                    interval2 = 600000
                Case "20分钟"
                    interval2 = 1200000
                Case "30分钟"
                    interval2 = 1800000
            End Select
            My.Settings.Interval1 = interval2
            Button5.Text = "设置检测间隔"
            ComboBox1.Enabled = False
        End If
    End Sub

    Private Sub NotifyIcon1_MouseDoubleClick(sender As System.Object,e As System.Windows.Forms.MouseEventArgs) Handles NotifyIcon1.MouseDoubleClick
        Me.WindowState = FormWindowState.normal    '双击托盘图标,显示窗口
        If Me.WindowState = FormWindowState.Minimized Then
            Me.ShowInTaskbar = True
        End If
    End Sub

    Private Sub monitor1_Resize(sender As Object,e As System.EventArgs) Handles Me.Resize
        If Me.WindowState = FormWindowState.Minimized Then
            Me.ShowInTaskbar = False   '当程序最小化,则不在任务栏显示图标
        End If
    End Sub

    Private Sub ShownHide1_Click(sender As System.Object,e As System.EventArgs) Handles ShownHide1.Click
        If ShownHide1.Text = "隐藏窗口" Then
            Me.WindowState = FormWindowState.Minimized
            ShownHide1.Text = "显示窗口"
        Else
            Me.WindowState = FormWindowState.normal
            ShownHide1.Text = "隐藏窗口"
        End If
    End Sub

    Private Sub Exit1_Click(sender As System.Object,e As System.EventArgs) Handles Exit1.Click
        End
    End Sub

    Private Sub Timer2_Tick(sender As System.Object,e As System.EventArgs) Handles Timer2.Tick
        Label3.Text = "当前时间:" & My.Computer.Clock.LocalTime.ToLongTimeString
    End Sub

    Private Sub LinkLabel1_LinkClicked(sender As System.Object,e As System.Windows.Forms.LinkLabelLinkClickedEventArgs) Handles LinkLabel1.LinkClicked
        Try
            System.Diagnostics.Process.Start("mailto:wangjingkaibear@live.cn")
        Catch ex As Exception
            MsgBox("没有关联的邮件程序",MsgBoxStyle.Exclamation)
        End Try
    End Sub

    Private Sub OpenFileDialog1_FileOk(sender As System.Object,e As System.ComponentModel.CancelEventArgs) Handles OpenFileDialog1.FileOk

    End Sub
End Class

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Format[$] ( expr [ , fmt ] ) format 返回变体型 format$ 强制返回为文本 -------------------------------- 数字类型的格式化 --------------------------------     固定格式参数:     General Number 普通数字,如可以用来去掉千位分隔号     format$("100,1
VB6或者ASP 格式化时间为 MM/dd/yyyy 格式,竟然没有好的办法, Format 或者FormatDateTime 竟然结果和系统设置的区域语言的日期和时间格式相关。意思是尽管你用诸如 Format(Now, "MM/dd/yyyy"),如果系统的设置格式区域语言的日期和时间格式分隔符是"-",那他还会显示为 MM-dd-yyyy     只有拼凑: <%response.write
在项目中添加如下代码:新建窗口来显示异常信息。 Namespace My ‘全局错误处理,新的解决方案直接添加本ApplicationEvents.vb 到工程即可 ‘添加后还需要一个From用来显示错误。如果到这步还不会则需要先打好基础啦 ‘======================================================== ‘以下事件
转了这一篇文章,原来一直想用C#做k3的插件开发,vb没有C#用的爽呀,这篇文章写与2011年,看来我以前没有认真去找这个方法呀。 https://blog.csdn.net/chzjxgd/article/details/6176325 金蝶K3 BOS的插件官方是用VB6编写的,如果  能用.Net下的语言工具开发BOS插件是一件很愉快的事情,其中缘由不言而喻,而本文则是个人首创,实现在了用V
Sub 分列() ‘以空格为分隔符,连续空格只算1个。对所选中的单元格进行处理 Dim m As Range, tmpStr As String, s As String Dim x As Integer, y As Integer, subStr As String If MsgBox("确定要分列处理吗?请确定分列的数据会覆盖它后面的单元格!", _
  窗体代码 1 Private Sub Text1_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single) 2 Dim path As String, hash As String 3 For Each fil
  Imports MySql.Data.MySqlClient Public Class Form1 ‘ GLOBAL DECLARATIONS Dim conString As String = "Server=localhost;Database=net2;Uid=root;Pwd=123456;" Dim con As New MySqlConnection
‘導入命名空間 Imports ADODB Imports Microsoft.Office.Interop   Private Sub A1() Dim Sql As String Dim Cnn As New ADODB.Connection Dim Rs As New ADODB.Recordset Dim S As String   S = "Provider=OraOLEDB.Oracl
Imports System.IO Imports System.Threading Imports System.Diagnostics Public Class Form1 Dim A(254) As String    Function ping(ByVal IP As Integer) As String Dim IPAddress As String IPAddress = "10.0.
VB运行EXE程序,并等待其运行结束 参考:https://blog.csdn.net/useway/article/details/5494084 Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long Pr
今天碰到一个问题,登陆的时候,如果不需要验证手机号为空,则不去验证手机号 因为登陆的时候所有的验证信息都存放在一个数组里 Dim CheckUserInfo() As String ={UserBirthday, SecEmail, UserMob, UserSex, RealNameFirst, RealName, CheckCardID, CheckCardType, Contactemail
在VB6.0中,数据访问接口有三种: 1、ActiveX数据对象(ADO) 2、远程数据对象(RDO) 3、数据访问对象(DAO) 1.使用ADO(ActiveX Data Objec,ActiveX数据对象)连接SQL Server 1)使用ADO控件连接 使用ADO控件的ConnectionString属性就可以连接SQL Server,该属性包含一个由分号分隔的argument=value语
注:大家如果没有VB6.0的安装文件,可自行百度一下下载,一般文件大小在200M左右的均为完整版的软件,可以使用。   特别提示:安装此软件的时候最好退出360杀毒软件(包括360安全卫士,电脑管家等,如果电脑上有这些软件的话),因为现如今的360杀毒软件直接会对VB6.0软件误报,这样的话就可能会在安装过程中被误报阻止而导致安装失败,或者是安装后缺乏很多必须的组件(其它的杀毒软件或安全卫士之类的
Private Sub Form_Load() Call conndb End Sub Private Function conndb() Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset Dim strCn, sql As String Dim db_host As String Dim db_user As String
  PPSM06S70:  Add  moddate  EDITSPRINTJOB:  MAX(TO_CHAR(ETRN.MODDATE, ‘yyyy/mm/dd/HH24:MI AM‘)) ACTUAL_SHIPDATE   4.Test Scenario (1) :Query SQL Test DN:8016578337 SELECT CTRN.TKCTID TRUCK_ID,        
  沒有出現CrystalReportViewer時,須安裝CRforVS_13_0. 新增1個數據集,新增1個數據表,添加二列,列名要和資料庫名一樣. 修改目標Framework 修改app.config, <startup >改成<startup useLegacyV2RuntimeActivationPolicy ="true">  CrystalReport1.rpt增加數據庫專家 在表單
Imports System.Threading Imports System Public Class Form1 Dim th1, th2 As Thread Public Sub Method1() Dim i As Integer For i = 1 To 100 If Me.Label1.BackColor =
Friend Const PROCESS_ALL_ACCESS = &H1F0FFF = 2035711 Friend Const PROCESS_VM_READ = &H10 Friend Const PROCESS_VM_WRITE = &H20 Friend Const PAGE_READONLY = &H2 Friend Const PAGE_READWRITE = &H4 Friend
以下代码随手写的 并没有大量测试 效率也有待提升 如果需要C#的请自行转换 Function SplitBytes(Data As Byte(), Delimiter As Byte()) As List(Of Byte()) Dim i = 0 Dim List As New List(Of Byte()) Dim bytes As New
Imports System.Data.SqlClient Public Class Form1 REM Public conn1 As SqlConnection = New SqlConnection("server=.; Integrated Security=False;Initial Catalog= mydatabase1; User ID= sa;password")