VB.Net程序设计:自动运行任务计划

一位朋友说。他的电脑要每一个小时自动打开一个程序。想到用系统自带的那个任务计划。达不到我要的效果。于是自己写一个这样的程序。

让程序在某一个时间开始。每隔一个时间段就自动运行选择的程序。可以只运行一次或者多次。

 

程序源代码下载地址:http://download.csdn.net/source/685070

 

 

下面是源代码:

 

  1. Imports System.IO
  2. Imports Microsoft.Win32.Registry
  3. Imports System.Diagnostics
  4. Imports System.Text.RegularExpressions
  5. Public Class MainFrm
  6.     Private Class Consts
  7.         Public Const RegSetString As String = "LinjimuAutoRunTask"
  8.     End Class
  9.     Public Enum MsgType
  10.         Err
  11.         Ok
  12.     End Enum
  13.     Private Pid As Integer
  14.     Private PName As String
  15.     Private Proc As Process
  16.     Dim NowStr As String
  17.     '判断时间的正则表达式
  18.     Dim RexTime As String = "^([0-1]?[0-9]|2[0-3])((:([0-5][0-9]|[0-9])){1,2})$"
  19.     Dim RexInteger As String = "^[1-9][0-9]*$"
  20.     '^[0~9]+$ ==== ^/d+$ 
  21.     '只能输入数字:“^[0-9]*$”
  22.     '只能输入n位的数字:“^/d{n}$”
  23.     '只能输入至少n位数字:“^/d{n,}$”
  24.     '只能输入m-n位的数字:“^/d{m,n}$”
  25.     '只能输入零和非零开头的数字:“^(0|[1-9][0-9]*)$”
  26.     '只能输入有两位小数的正实数:“^[0-9]+(.[0-9]{2})?$”
  27.     '只能输入有1-3位小数的正实数:“^[0-9]+(.[0-9]{1,3})?$”
  28.     '只能输入非零的正整数:“^/+?[1-9][0-9]*$”
  29.     '只能输入非零的负整数:“^/-[1-9][0-9]*$”
  30.     '只能输入长度为3的字符:“^.{3}$”
  31.     Dim Reg As Microsoft.Win32.RegistryKey
  32.     ''' <summary>
  33.     ''' 判断TextStr是否匹配Rex规则
  34.     ''' </summary>
  35.     ''' <param name="TextStr"></param>
  36.     ''' <param name="Rex"></param>
  37.     ''' <returns>匹配则返回True,否则返回False。</returns>
  38.     ''' <remarks></remarks>
  39.     Public Function RexMatch(ByVal TextStr As StringByVal Rex As StringAs Boolean
  40.         Return System.Text.RegularExpressions.Regex.Match(TextStr, Rex).Success
  41.     End Function
  42.     ''' <summary>
  43.     ''' 显示信息在LB上。
  44.     ''' </summary>
  45.     ''' <param name="Msg"></param>
  46.     ''' <param name="mType"></param>
  47.     ''' <remarks></remarks>
  48.     Private Sub ShowMsg(ByVal Msg As StringOptional ByVal mType As MsgType = MsgType.Ok)
  49.         If mType = MsgType.Ok Then
  50.             Me.LB.ForeColor = Color.Black
  51.             Me.LB.Text = Msg
  52.         Else
  53.             Me.LB.ForeColor = Color.Red
  54.             Me.LB.Text = "出错:" & Msg
  55.         End If
  56.         Me.LB.Refresh()
  57.     End Sub
  58.     Private Sub NotifyIcon1_MouseDoubleClick(ByVal sender As System.ObjectByVal e As System.Windows.Forms.MouseEventArgs) Handles NotifyIcon1.MouseDoubleClick
  59.         If Me.Visible Then
  60.             HideWin()
  61.         Else
  62.             ShowWin()
  63.         End If
  64.     End Sub
  65.     Private Sub TSMIShow_Click(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles TSMIShow.Click
  66.         ShowWin()
  67.     End Sub
  68.     Private Sub TSMIHide_Click(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles TSMIHide.Click
  69.         HideWin()
  70.     End Sub
  71.     Private Sub TSMIExit_Click(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles TSMIExit.Click
  72.         Me.Close()
  73.         Application.Exit()
  74.     End Sub
  75.     Sub ShowWin()
  76.         Me.Show()
  77.         Me.WindowState = FormWindowState.Normal
  78.         Me.Activate()
  79.     End Sub
  80.     Sub HideWin()
  81.         Me.Hide()
  82.     End Sub
  83.     Private Sub MainFrm_Resize(ByVal sender As ObjectByVal e As System.EventArgs) Handles Me.Resize
  84.         If Me.WindowState = FormWindowState.Minimized Then
  85.             HideWin()
  86.         Else
  87.             ShowWin()
  88.         End If
  89.     End Sub
  90.     Private Sub BtExit_Click(ByVal sender As ObjectByVal e As System.EventArgs) Handles BtExit.Click
  91.         Me.Close()
  92.         Application.Exit()
  93.     End Sub
  94.     Private Sub BtChoseFilePath_Click(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles BtChoseFilePath.Click
  95.         Dim fd As New OpenFileDialog()
  96.         'fd.InitialDirectory = "c:/"
  97.         fd.Title = "选择你要运行的文件."
  98.         fd.Filter = "所有文件All File(*.*)|*.*"
  99.         If fd.ShowDialog() = Windows.Forms.DialogResult.OK Then
  100.             Me.TxtBoxFilePath.Text = fd.FileName
  101.         End If
  102.     End Sub
  103.     Private Sub BtStartRunTask_Click(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles BtStartRunTask.Click
  104.         ShowMsg(".")
  105.         If Me.TxtBoxFilePath.Text.Trim.Equals(String.Empty) Then
  106.             ShowMsg("程序文件能为空,请输入。", MsgType.Err)
  107.             Exit Sub
  108.         End If
  109.         If File.Exists(Me.TxtBoxFilePath.Text) = False Then
  110.             ShowMsg("你选择的程序文件不存在。", MsgType.Err)
  111.             Exit Sub
  112.         End If
  113.         '--检测时间状态。
  114.         If ChkTimeSettingIsOk() = False Then
  115.             Exit Sub
  116.         End If
  117.         If Me.ChkBoxRunOneTimes.Checked = False Then
  118.             If RexMatch(Me.TxtBoxTimeIntervle.Text.Trim, RexInteger) = False Then
  119.                 ShowMsg("时间间隔:只能输入非零的正整数。", MsgType.Err)
  120.                 Exit Sub
  121.             End If
  122.         End If
  123.         '--开始知道运行任务计划。
  124.         Dim t1, t2 As DateTime
  125.         Dim tspan As TimeSpan
  126.         t1 = Convert.ToDateTime(Me.TxtBoxStratTime.Text)
  127.         t2 = Convert.ToDateTime(Me.TxtBoxNow.Text)
  128.         '--比较开始时间和现在时间。tspan.TotalSeconds转换为多少秒
  129.         tspan = t1.Subtract(t2)
  130.         Me.TimerOnceRunTask.Enabled = True
  131.         Me.TimerOnceRunTask.Interval = tspan.TotalSeconds * 1000
  132.         '--设置按钮
  133.         Me.BtStartRunTask.Enabled = False
  134.         Me.BtStopRunTask.Enabled = True
  135.         If Me.ChkBoxRunOneTimes.Checked Then
  136.             ShowMsg(String.Format("自动运行任务计划开始时间:{0} 自动运行一次。"Me.TxtBoxStratTime.Text))
  137.         Else
  138.             ShowMsg(String.Format("自动运行任务计划开始时间:{0} 每隔{1}分钟自动运行一次。"Me.TxtBoxStratTime.Text, Me.TxtBoxTimeIntervle.Text))
  139.         End If
  140.         'Dim tspan As TimeSpan
  141.         'tspan = Now - Now.AddMinutes(-5)
  142.         'LB.Text = tspan.ToString
  143.         'LB.Text = Today.AddDays(1 - Today.DayOfWeek)
  144.         'LB.Text = Today.Subtract(Today.AddMinutes(-10)).ToString
  145.     End Sub
  146.     Private Function ChkTimeSettingIsOk() As Boolean
  147.         If Me.TxtBoxStratTime.Text = String.Empty Then
  148.             ShowMsg("开始运行时间没有填写!", MsgType.Err)
  149.             Return False
  150.         ElseIf RexMatch(Me.TxtBoxStratTime.Text.Trim, RexTime) = False Then
  151.             ShowMsg("输入的时间不正确。", MsgType.Err)
  152.             Return False
  153.         End If
  154.         Try
  155.             Dim a As Integer
  156.             a = Date.Compare(Convert.ToDateTime(Me.TxtBoxStratTime.Text), Convert.ToDateTime(Me.TxtBoxNow.Text))
  157.             If a > 0 Then
  158.                 Return True
  159.             Else
  160.                 ShowMsg("设置的时间已经过期了。", MsgType.Err)
  161.                 Return False
  162.             End If
  163.         Catch ex As Exception
  164.             ShowMsg("设置的时间格式无效。", MsgType.Err)
  165.             Return False
  166.         End Try
  167.         Return True
  168.     End Function
  169.     Private Sub TxtBoxStratTime_DoubleClick(ByVal sender As ObjectByVal e As System.EventArgs) Handles TxtBoxStratTime.DoubleClick
  170.         Me.TxtBoxStratTime.Text = Date.Now.AddMinutes(30).ToString
  171.     End Sub
  172.     Private Sub RunTaskFirstTime()
  173.         RunTask()
  174.         If Me.ChkBoxRunOneTimes.Checked = False Then
  175.             Me.TimerRunTask.Interval = Me.TxtBoxTimeIntervle.Text * 60000
  176.             Me.TimerRunTask.Enabled = True
  177.         End If
  178.         Me.TimerOnceRunTask.Enabled = False
  179.         Me.TimerOnceRunTask.Interval = 1000
  180.     End Sub
  181.     Private Sub RunTask()
  182.         If Me.ChkBoxKillPrc.Checked Then
  183.             Try
  184.                 If Proc IsNot Nothing And Proc.HasExited = False Then
  185.                     Proc.Kill()
  186.                     Proc.Dispose()
  187.                 End If
  188.             Catch ex As Exception
  189.                 ShowMsg(ex.Message, MsgType.Err)
  190.             End Try
  191.         End If
  192.         Try
  193.             Proc = New Process
  194.             Proc = System.Diagnostics.Process.Start(Me.TxtBoxFilePath.Text)
  195.             If Me.ChkBoxRunOneTimes.Checked Then
  196.                 StopRunTask()
  197.                 ShowMsg("任务计划已经停止.")
  198.             End If
  199.         Catch ex As Exception
  200.             ShowMsg(ex.Message, MsgType.Err)
  201.         End Try
  202.     End Sub
  203.     Private Sub TimerNow_Tick(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles TimerNow.Tick
  204.         Me.TxtBoxNow.Text = String.Format("{0}:{1}:{2}"Date.Now.Hour, Date.Now.Minute, Date.Now.Second)
  205.     End Sub
  206.     Private Sub TimerOnceRunTask_Tick(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles TimerOnceRunTask.Tick
  207.         RunTaskFirstTime()
  208.     End Sub
  209.     Private Sub TimerRunTask_Tick(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles TimerRunTask.Tick
  210.         RunTask()
  211.     End Sub
  212.     Private Sub BtStopRunTask_Click(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles BtStopRunTask.Click
  213.         StopRunTask()
  214.         ShowMsg("任务计划已经停止.")
  215.     End Sub
  216.     Private Sub MainFrm_Load(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles MyBase.Load
  217.         StopRunTask()
  218.         InitVarRegSet()
  219.     End Sub
  220.     Private Sub StopRunTask()
  221.         Me.BtStartRunTask.Enabled = True
  222.         Me.BtStopRunTask.Enabled = False
  223.         Me.TimerOnceRunTask.Enabled = False
  224.         Me.TimerRunTask.Enabled = False
  225.         Me.TimerOnceRunTask.Interval = 1000
  226.         Me.TimerRunTask.Interval = 1000
  227.     End Sub
  228.     '--注册表操作
  229.     Private Sub InitVarRegSet()
  230.         Reg = CurrentUser.OpenSubKey("Software/Microsoft/Windows/CurrentVersion/Run"True)
  231.         If Reg.GetValue(Consts.RegSetString) <> "" Then
  232.             Me.ChkBoxAutoRunWithWindow.Checked = True
  233.         Else
  234.             Me.ChkBoxAutoRunWithWindow.Checked = False
  235.         End If
  236.         Reg.Close()
  237.     End Sub
  238.     Private Sub SaveSettings()
  239.         If Me.ChkBoxAutoRunWithWindow.Checked = True Then
  240.             Reg = CurrentUser.OpenSubKey("Software/Microsoft/Windows/CurrentVersion/Run"True)
  241.             Reg.SetValue(Consts.RegSetString, Application.ExecutablePath)
  242.             Reg.Close()
  243.             ShowMsg("你已经设置了:启动windows时自动运行本程序。")
  244.         Else
  245.             Reg = CurrentUser.OpenSubKey("Software/Microsoft/Windows/CurrentVersion/Run"True)
  246.             If Reg.GetValue(Consts.RegSetString) <> "" Then
  247.                 '--删除键值-会把整个 regsetstring 删除了。
  248.                 Reg.DeleteValue(Consts.RegSetString)
  249.             End If
  250.             '--可以设置:Reg.SetValue(Consts.RegSetString, "")
  251.             Reg.Close()
  252.             ShowMsg("取消启动windows时自动运行本程序。")
  253.         End If
  254.     End Sub
  255.     Private Sub ChkBoxAutoRunWithWindow_Click(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles ChkBoxAutoRunWithWindow.Click
  256.         SaveSettings()
  257.     End Sub
  258.     Private Sub ChkBoxRunOneTimes_Click(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles ChkBoxRunOneTimes.Click
  259.         If Me.ChkBoxRunOneTimes.Checked Then
  260.             Me.TxtBoxTimeIntervle.Enabled = False
  261.             Me.ChkBoxKillPrc.Enabled = False
  262.         Else
  263.             Me.TxtBoxTimeIntervle.Enabled = True
  264.             Me.ChkBoxKillPrc.Enabled = True
  265.         End If
  266.     End Sub
  267. End Class

 

 

 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值