C#
 - 
Agendando Tarefas no Windows
    
    
    ![]()  | 
    
     Neste artigo eu vou mostrar como podemos agendar e deletar tarefas usando o Task Manager do Windows em uma aplicação Windows Forms com a linguagem C#.  | 
  
O Agendador de tarefas 
(Task Manager) 
do Windows permite agendar qualquer tarefa a ser executada no período de tempo 
programado. Podemos programar o tempo para executar a tarefa de forma que ela 
seja acionada em um tempo determinado. 
Se quisermos usar a funcionalidade de agendar tarefas em nossa aplicação 
.Net, então podemos usar a windows.dll para que possamos personalizar a interface 
de usuário padrão. Para criar aplicações com estes recursos podemos usar o arquivo "taskschd.dll" do sistema operacional do 
Windows.
Existem alguns pontos que temos que considerar quando vamos realizar o 
agendamento de uma tarefa em nossa aplicação:
Neste artigo eu vou mostrar como podemos criar e deletar uma tarefa incluindo-a no agendador de tarefas do Windows. Como exemplo eu vou agendar a tarefa para abrir o MS Paint.
Recursos Usados :
Criando o projeto no Visual Studio 2013 Express for Windows Desktop
Abra o VS Express 2013 for Windows Desktop e clique em New Project;
A seguir selecione a linguagem Visual C# e o template Windows Forms Application;
Informe o nome AgendarTarefa e clique no botão OK;
    ![]()  | 
  
A seguir selecione o formulário padrão form1.vb e altere o seu nome para frmAgendarTarefa e inclua, a partir da ToolBox, os seguintes controles no formulário:
1 Button - btnCriarTarefa
1 Button - btnDeletar
1 PictureBox
Disponha os controles no formulário conforme a figura abaixo:
    ![]()  | 
  
Não esqueça de incluir uma referência a dll TaskScheduler.dll no projeto.
No início do formulário vamos criar as variáveis que iremos usar no projeto:
TaskScheduler oAgendador;//Para tratar a definição da tarefa
ITaskDefinition oDefinicaoTarefa;//Para tratar a informação do Trigger
ITimeTrigger oTrigger;//Para tratar a informação da Ação
IExecAction oAcao;No evento Click do botão btnCriarTarefa inclua o código abaixo:
     private void btnCriarTarefa_Click(object sender, EventArgs e)
        {
            try
            {
                oAgendador = new TaskScheduler();
                oAgendador.Connect();
                    //Atribuindo Definição de tarefa
                AtribuiDefinicaoTarefa();
                //Definindo a informação do gatilho da tarefa
                DefineInformacaoGatilho();
                //Definindo a informção da ação da tarefa
                DefineInformacaoAcao();
                    //Obtendo a pasta raiz
                ITaskFolder root = oAgendador.GetFolder("\\");
                //Registrando a tarefa , se a tarefa ja estiver registrada então ela será atualizada
                IRegisteredTask regTask = root.RegisterTaskDefinition("_Macoratti_Tarefa", oDefinicaoTarefa, (int)_TASK_CREATION.TASK_CREATE_OR_UPDATE,
 null, null, _TASK_LOGON_TYPE.TASK_LOGON_INTERACTIVE_TOKEN, "");
                    //Para executar a tarefa imediatamente chamamos o método Run()
                IRunningTask runtask = regTask.Run(null);
                //exibe mensagem
                MessageBox.Show("Tarefa foi criada com sucesso","Criar Tarefa",MessageBoxButtons.OK,MessageBoxIcon.Information); 
            }
            catch (Exception ex )
            {
                //exibe erros
                MessageBox.Show(ex.Message);
            }
        }
     | 
  
A seguir temos o código das rotinas que contém o comentário explicando passo a passo cada linha de código:
1- AtribuiDefinicaoTarefa
           //Atribuição da da Definição da tarefa
        private void AtribuiDefinicaoTarefa()
        {
            try
            {
                 oDefinicaoTarefa = oAgendador.NewTask(0);
                //Registra informação para a tarefa
                //nome do autor da tarefa
                oDefinicaoTarefa.RegistrationInfo.Author = "Macoratti";
                //descrição da tarefa
                oDefinicaoTarefa.RegistrationInfo.Description = "_Macoratti_Tarefa";
                //Registro da data da tarefa
                oDefinicaoTarefa.RegistrationInfo.Date = DateTime.Today.ToString("yyyy-MM-ddTHH:mm:ss"); //formatacao
                    //Definição da tarefa
                //Prioridade da Thread
                oDefinicaoTarefa.Settings.Priority = 7;
                //Habilita a tarefa
                oDefinicaoTarefa.Settings.Enabled =true ;
                //Para ocultar/exibir a tarefa
                oDefinicaoTarefa.Settings.Hidden = false;
                //Tempo de execução limite para a tarefa
                oDefinicaoTarefa.Settings.ExecutionTimeLimit = "PT10M"; //10 minutos
                //Define que não precisa de conexão de rede
                oDefinicaoTarefa.Settings.RunOnlyIfNetworkAvailable = false ;
                }
            catch (Exception ex)
            {
                throw ex;
            }
        }
     | 
  
2 - Rotina DefineInformacaoGatilho
| 
    
    
          
     //Definindo a informação do Gatilho (Trigger) private void DefineInformacaoGatilho() { try { //informação do gatilho baseada no tempo - TASK_TRIGGER_TIME oTrigger = (ITimeTrigger)oDefinicaoTarefa.Triggers.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_TIME); //ID do Trigger oTrigger.Id ="Trigger_Da_Tarefa"; //hora de inicio oTrigger.StartBoundary = "2014-01-09T10:10:00"; //yyyy-MM-ddTHH:mm:ss //hora de encerramento oTrigger.EndBoundary = "2016-01-01T07:30:00"; //yyyy-MM-ddTHH:mm:ss } catch (Exception ex) { throw ex; } }  | 
  
3- Rotina DefineInformacaoAcao()
| 
    
        
      //Define a informação da Ação da tarefa private void DefineInformacaoAcao() { try { //Informação da Ação baseada no exe- TASK_ACTION_EXEC oAcao=(IExecAction)oDefinicaoTarefa.Actions.Create(_TASK_ACTION_TYPE.TASK_ACTION_EXEC); //ID da Ação oAcao.Id = "testeAcao1"; //Define o caminho do arquivo EXE a executar (Vamos abrir o Paint) oAcao.Path = "mspaint"; } catch (Exception ex) { throw ex; } }  | 
  
Para deletar uma tarefa criada usamos o código a seguir no evento Click do botão de comando btnDeletar informando o nome da tarefa a ser deletada :
| 
    
    private void btnDeletar_Click(object sender, EventArgs e) { try { //cria instância do agendador TaskScheduler oAgendador = new TaskScheduler(); oAgendador.Connect(); 
    
    
                    
    //define a pasta raiz  | 
  
Executando o projeto e clicando no botão Criar Tarefa iremos obter o resultado abaixo onde vemos o MSPaint iniciado:
    ![]()  | 
  
Para ver a tarefa agendada no Task Manager faça o seguinte: (O procedimento é válido para o Windows 7)
Você deverá visualizar a janela do Agendador de Tarefas e identificar a tarefa _Macoratti_Tarefa conforme figura a seguir:
    ![]()  | 
  
Pegue o projeto 
completo aqui: 
AgendarTarefa.zip
Lucas 8:20 E foi-lhe dito: Estão lá fora tua mãe e teus irmãos, que querem ver-te,
Lucas 8:21 Mas, respondendo ele (Jesus), disse-lhes: Minha mãe e meus irmãos são aqueles que ouvem a palavra de Deus e a executam.
| 
    
    Veja os 
    Destaques e novidades do SUPER DVD Visual Basic 
(sempre atualizado) : clique e confira ! 
 Quer migrar para o VB .NET ? 
 Quer aprender C# ?? 
 Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?  | 
  
  Gostou ?  
Compartilhe no Facebook
  
 
Compartilhe no Twitter 
Referências: