Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: xassiz_ en 11 Octubre 2009, 13:38 pm



Título: Existe algo como at?
Publicado por: xassiz_ en 11 Octubre 2009, 13:38 pm
En VB existe algo como el comando at en Windows?

Me refiero para poder programar una tarea a una hora o día determinados..

Graciass ;)


Título: Re: Existe algo como at?
Publicado por: seba123neo en 11 Octubre 2009, 18:33 pm
Hola, podes probar con la api NetScheduleJobAdd de netpi32.dll.

saludos.


Título: Re: Existe algo como at?
Publicado por: xassiz_ en 11 Octubre 2009, 21:04 pm
Encontré esto (http://msdn.microsoft.com/en-us/library/aa370248(VS.85).aspx) en el MDSN, no se si es eso..

No entendí mucho como utilizarlo..

Código:
typedef struct _AT_INFO {
  DWORD_PTR JobTime;
  DWORD     DaysOfMonth;
  UCHAR     DaysOfWeek;
  UCHAR     Flags;
  LPWSTR    Command;
}AT_INFO, *PAT_INFO, *LPAT_INFO;

Podrías dar un ejemplo?


Título: Re: Existe algo como at?
Publicado por: seba123neo en 11 Octubre 2009, 21:49 pm
ejemplo de como ejecutar la calculadora de windows despues al minuto de apretar un boton.

Código
  1. Option Explicit
  2.  
  3. Private Declare Function NetScheduleJobAdd Lib "netapi32.dll" (ByVal Servername As String, Buffer As Any, JobID As Long) As Long
  4.  
  5. Private Type AT_INFO
  6.    JobTime As Long
  7.    DaysOfMonth As Long
  8.    DaysOfWeek As Byte
  9.    Flags As Byte
  10.    Command As String
  11. End Type
  12.  
  13. Private Enum Periodicidad
  14.    JOB_RUN_PERIODICALLY = 1&
  15.    JOB_ADD_CURRENT_DATE = 8&
  16.    JOB_NONINTERACTIVE = 16&
  17. End Enum
  18.  
  19. Private Enum DiasSemana
  20.    Lunes = 1
  21.    Martes = 2
  22.    Miercoles = 4
  23.    Jueves = 8
  24.    Viernes = 16
  25.    Sabado = 32
  26.    Domingo = 64
  27. End Enum
  28.  
  29. Private Enum DiaMes
  30.    Dia_1 = 1
  31.    Dia_2 = 2
  32.    Dia_3 = 4
  33.    Dia_4 = 8
  34.    Dia_5 = 16
  35.    Dia_6 = 32
  36.    Dia_7 = 64
  37.    Dia_8 = 128
  38.    Dia_9 = 256
  39.    Dia_10 = 512
  40.    Dia_11 = 1024
  41.    Dia_12 = 2048
  42.    Dia_13 = 4096
  43.    Dia_14 = 8192
  44.    Dia_15 = 16384
  45.    Dia_16 = 32768
  46.    Dia_17 = 65536
  47.    Dia_18 = 131072
  48.    Dia_19 = 262144
  49.    Dia_20 = 524288
  50.    Dia_21 = 1048576
  51.    Dia_22 = 2097152
  52.    Dia_23 = 4194304
  53.    Dia_24 = 8388608
  54.    Dia_25 = 16777216
  55.    Dia_26 = 33554432
  56.    Dia_27 = 67108864
  57.    Dia_28 = 134217728
  58.    Dia_29 = 268435456
  59.    Dia_30 = 536870912
  60.    Dia_31 = 1073741824
  61. End Enum
  62.  
  63. Private Function AgregarTareaProgramada(pComando As String, pHorario As Date, pParametros As Periodicidad, Optional pDia As DiasSemana = 0, Optional pDiaMes As DiaMes = 0) As Long
  64.    Dim vPropiedadesTarea As AT_INFO
  65.    Dim vIDTarea As Long
  66.  
  67.    vPropiedadesTarea.Command = StrConv(pComando, vbUnicode)
  68.    vPropiedadesTarea.Flags = pParametros
  69.    vPropiedadesTarea.JobTime = DateDiff("s", "00:00:00", Format(pHorario, "hh:mm:ss")) * 1000
  70.    vPropiedadesTarea.DaysOfWeek = pDia
  71.    vPropiedadesTarea.DaysOfMonth = pDiaMes
  72.  
  73.    NetScheduleJobAdd vbNullString, vPropiedadesTarea, vIDTarea
  74.  
  75.    AgregarTareaProgramada = vIDTarea
  76. End Function
  77.  
  78. Private Sub Command1_Click()
  79.    Call AgregarTareaProgramada("C:\WINDOWS\System32\calc.exe", DateAdd("n", 1, Now), JOB_ADD_CURRENT_DATE)
  80. End Sub
  81.  

saludos.


Título: Re: Existe algo como at?
Publicado por: xassiz_ en 11 Octubre 2009, 21:56 pm
:o interesante.

Modificando el code tambien se podría fijar una hora determinada no? Me refiero sin hacer una cuenta atrás..


Título: Re: Existe algo como at?
Publicado por: cobein en 12 Octubre 2009, 05:50 am
Seba podes simplicar eso un poco para no usar los enum, mandale 2 ^ (dia-1).


Título: Re: Existe algo como at?
Publicado por: seba123neo en 12 Octubre 2009, 06:18 am
Seba podes simplicar eso un poco para no usar los enum, mandale 2 ^ (dia-1).

jeje si, todos se van multiplicando de a 2 y se puede simplificar con un simple calculo..pero bueno que lo haga el... ;D