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: