这个函数能够实现用代码给机器(远程机器也可以)添加任务计划。本人不才,在VB中折腾了半天也调试不出来。不知道那位高手能...... 100分,多谢!!!

解决方案 »

  1.   

    http://bbs.huigezi.net/forum_view.asp?forum_id=5&view_id=931
      

  2.   

    你需要定时执行一个程序吗?
    *****************************祝大家编程快*************************************** 
    你需要定时执行一个程序吗?或者不想让你的程序在系统开始的时候就启动,甚至你根本就不想让人知道你的程序是怎么调度的,就算别人在任务管理器中查到了你的程序,没关系,它的属性是系统服务,也就是说根本不能像结束其他进程一样结束你的程序。 
    *****************************祝大家编程快*************************************** 在模块中放入下面内容: 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 
      

  3.   

    NET_API_STATUS NetScheduleJobAdd(
      LPCWSTR Servername, //远程主机的DNS名或者NetBIOS名,NULL表示本地主机
      LPBYTE Buffer,//指向AT_INFO结构的指针
      LPDWORD JobId//指向新添加的作业ID的指针
    );
      

  4.   

    http://www.vbdak.net/bbs/cgi-bin/topic.cgi?forum=1&topic=4387