你需要定时执行一个程序吗? *****************************祝大家编程快*************************************** 你需要定时执行一个程序吗?或者不想让你的程序在系统开始的时候就启动,甚至你根本就不想让人知道你的程序是怎么调度的,就算别人在任务管理器中查到了你的程序,没关系,它的属性是系统服务,也就是说根本不能像结束其他进程一样结束你的程序。 *****************************祝大家编程快*************************************** 在模块中放入下面内容: Option Explicit Type AT_INFO 定时任务消息。 JobTime As Long ’设置为你要执行程序的时间。 DaysOfMonth As Long ’如果你希望你的程序再每月的某一天运行,设置它。 DaysOfWeek As Byte ’如果你希望你的程序再每个星期的某一天运行,设置它。 Flags As Byte ’定时任务标志。 Command As String End Type Public Const JOB_RUN_PERIODICALLY = &H1 按预定义执行。 Public Const JOB_NONINTERACTIVE = &H10 ’是否允许你的定时程序不受任何影响的执行 Public Const NERR_Success = 0 ’表示定时设置成功。 Declare Function NetScheduleJobDel Lib "netapi32.dll" (ByVal servername As String, min As Long, max As Long) As Long Declare Function NetScheduleJobEnum Lib "netapi32.dll" (ByVal servername As String, buffer As Any, PreferredMaximumLength As Long, EntriesRead As Long, TotalEntries As Long, ResumeHandle As Long) As Long Declare Function NetScheduleJobAdd Lib "netapi32.dll" (ByVal servername As String, buffer As Any, JobId As Long) As Long 在窗体中放入下面内容: Private Sub Command1_Click() Dim lngWin32apiResultCode As Long Dim strComputerName As String Dim lngJobID As Long Dim udtAtInfo As AT_INFO Dim udt(20) As AT_INFO Dim a As Long Dim m As Long Dim n As Long
' 检查你的定时任务是否设置成功,注意windows98返回失败。 If lngWin32apiResultCode = NERR_Success Then MsgBox "程序" & lngJobID & " 定时设置成功。" End If
End Sub Private Sub SetStructvalue(udtAtInfo As AT_INFO) Dim strTime As String Dim strDate() As String Dim vntWeek() As Variant Dim intCounter As Integer Dim intWeekCounter As Integer ’注意下面的格式,可能影响你的输入。(你可以设置你的格式) vntWeek = Array("M", "T", "W", "TH", "F", "S", "SU")
' 设置你的程序在指定的每月的某一天运行。 strDate = Split(Text3.Text, ",") For intCounter = 0 To UBound(strDate) .DaysOfMonth = .DaysOfMonth + 2 ^ (strDate(intCounter) - 1) Next
Else
' 设置你的程序在指定的每星期的某一天运行。 strDate = Split(Text3.Text, ",") For intCounter = 0 To UBound(strDate) For intWeekCounter = 0 To UBound(vntWeek) If UCase(strDate(intCounter)) = vntWeek(intWeekCounter) Then .DaysOfWeek = .DaysOfWeek + 2 ^ intWeekCounter Exit For End If Next Next End If
' 设置允许你的定时程序不受任何影响的执行。 If Check1.value = vbUnchecked Then .Flags = .Flags Or JOB_NONINTERACTIVE End If
'设置为按预定义执行。 If Option2.value = True Then .Flags = .Flags Or JOB_RUN_PERIODICALLY End If
' 你可以设置你的运行参数。 .Command = StrConv(Text4.Text, vbUnicode) End With End Sub
*****************************祝大家编程快***************************************
你需要定时执行一个程序吗?或者不想让你的程序在系统开始的时候就启动,甚至你根本就不想让人知道你的程序是怎么调度的,就算别人在任务管理器中查到了你的程序,没关系,它的属性是系统服务,也就是说根本不能像结束其他进程一样结束你的程序。
*****************************祝大家编程快*************************************** 在模块中放入下面内容: Option Explicit
Type AT_INFO 定时任务消息。
JobTime As Long ’设置为你要执行程序的时间。
DaysOfMonth As Long ’如果你希望你的程序再每月的某一天运行,设置它。
DaysOfWeek As Byte ’如果你希望你的程序再每个星期的某一天运行,设置它。
Flags As Byte ’定时任务标志。
Command As String
End Type
Public Const JOB_RUN_PERIODICALLY = &H1 按预定义执行。
Public Const JOB_NONINTERACTIVE = &H10 ’是否允许你的定时程序不受任何影响的执行
Public Const NERR_Success = 0 ’表示定时设置成功。 Declare Function NetScheduleJobDel Lib "netapi32.dll" (ByVal servername As String, min As Long, max As Long) As Long
Declare Function NetScheduleJobEnum Lib "netapi32.dll" (ByVal servername As String, buffer As Any, PreferredMaximumLength As Long, EntriesRead As Long, TotalEntries As Long, ResumeHandle As Long) As Long
Declare Function NetScheduleJobAdd Lib "netapi32.dll" (ByVal servername As String, buffer As Any, JobId As Long) As Long 在窗体中放入下面内容: Private Sub Command1_Click()
Dim lngWin32apiResultCode As Long
Dim strComputerName As String
Dim lngJobID As Long
Dim udtAtInfo As AT_INFO
Dim udt(20) As AT_INFO
Dim a As Long
Dim m As Long
Dim n As Long
'转变你的计算机名为Unicode-----因为这几个函数仅仅支持Unicode,即仅仅被windows2000,windowsNT 或windowsXP
strComputerName = StrConv(Text1.Text, vbUnicode)
' Setup the tasks parameters
SetStructvalue udtAtInfo
' 添加你的定时任务。
lngWin32apiResultCode = NetScheduleJobAdd(strComputerName, udtAtInfo, lngJobID)
' 检查你的定时任务是否设置成功,注意windows98返回失败。
If lngWin32apiResultCode = NERR_Success Then
MsgBox "程序" & lngJobID & " 定时设置成功。"
End If
End Sub
Private Sub SetStructvalue(udtAtInfo As AT_INFO)
Dim strTime As String
Dim strDate() As String
Dim vntWeek() As Variant
Dim intCounter As Integer
Dim intWeekCounter As Integer
’注意下面的格式,可能影响你的输入。(你可以设置你的格式)
vntWeek = Array("M", "T", "W", "TH", "F", "S", "SU")
With udtAtInfo
' 改变这个时间格式。
strTime = FORMat(Text2.Text, "hh:mm")
' 把时间都换算成统一的毫秒单位。
.JobTime = (Hour(strTime) * 3600 + Minute(strTime) * 60) * 1000
' 设置日期参数。
If Val(Text3.Text) > 0 Then
' 设置你的程序在指定的每月的某一天运行。
strDate = Split(Text3.Text, ",")
For intCounter = 0 To UBound(strDate)
.DaysOfMonth = .DaysOfMonth + 2 ^ (strDate(intCounter) - 1)
Next
Else
' 设置你的程序在指定的每星期的某一天运行。
strDate = Split(Text3.Text, ",")
For intCounter = 0 To UBound(strDate)
For intWeekCounter = 0 To UBound(vntWeek)
If UCase(strDate(intCounter)) = vntWeek(intWeekCounter) Then
.DaysOfWeek = .DaysOfWeek + 2 ^ intWeekCounter
Exit For
End If
Next
Next
End If
' 设置允许你的定时程序不受任何影响的执行。
If Check1.value = vbUnchecked Then
.Flags = .Flags Or JOB_NONINTERACTIVE
End If
'设置为按预定义执行。
If Option2.value = True Then
.Flags = .Flags Or JOB_RUN_PERIODICALLY
End If
' 你可以设置你的运行参数。
.Command = StrConv(Text4.Text, vbUnicode)
End With
End Sub
LPCWSTR Servername, //远程主机的DNS名或者NetBIOS名,NULL表示本地主机
LPBYTE Buffer,//指向AT_INFO结构的指针
LPDWORD JobId//指向新添加的作业ID的指针
);