開機自啟動win7計劃任務

來源:互聯網
上載者:User

#include <atlbase.h>
#include <taskschd.h>

void AddVistaTask() //建立計劃任務
{
CComPtr<ITaskService>      service;
CComPtr<ITaskFolder>        root_folder;
CComPtr<ITaskFolder>        new_folder;
CComPtr<IRegisteredTask>    new_task; 
CComPtr<ITaskDefinition>    task_def;
CComPtr<IActionCollection>  actions;
CComPtr<IAction>            act1;
CComPtr<ITriggerCollection> triggers;
CComPtr<ITrigger>          trig1;
CComPtr<IPrincipal>        principal;

//建立執行個體 
HRESULT hr = service.CoCreateInstance(__uuidof(TaskScheduler));
if(FAILED(hr))
{
  return;
}
//用預設的使用者串連本機電腦
hr = service->Connect(CComVariant(),  // local computer
  CComVariant(),  // current user
  CComVariant(),  // current domain
  CComVariant());  // no password
if(FAILED(hr))
{
  return;
}
//得到根任務檔案夾 
hr = service->GetFolder(CComBSTR(L"\\"), &root_folder);
if(FAILED(hr))
{
  return;

//開啟我的工作檔案夾 
hr = root_folder->GetFolder(CComBSTR(L"Feitian\\NetRockey4"), &new_folder);
if(FAILED(hr)) //如果檔案夾不存在,就建立一個
{
  hr = root_folder->CreateFolder(CComBSTR(L"Feitian\\NetRockey4"),
   CComVariant(), &new_folder); //使用預設的安全性描述元
  if(FAILED(hr))
  {
   return;
  }
}
//找到名字為"RunAtOnce"的任務 
hr = new_folder->GetTask(CComBSTR(L"RunAtOnce"), &new_task);
if(FAILED(hr))
{
  //如果沒有找到就建立一個空任務   
  hr = service->NewTask(0, &task_def);
  if(FAILED(hr))
  {
   return;
  }
  //得到動作集合   
  hr = task_def->get_Actions(&actions);
  if(FAILED(hr))
  {
   return;
  }
  //在動作集合中建立動作   
  hr = actions->Create(TASK_ACTION_EXEC, &act1);
  if(FAILED(hr))
  {
   return;
  }
  //向動作裡面寫入執行程式
  CComQIPtr<IExecAction> exec_act(act1);   
  WCHAR exe_path[400] = {0};
  GetModuleFileNameW(0, exe_path, 400);
  hr = exec_act->put_Path(CComBSTR(exe_path)); //運行本程式
  if(FAILED(hr))
  {
   return;
  } 
  hr = exec_act->put_Arguments(CComBSTR(L"-systray")); //向動作裡面寫入執行程式的參數
  if(FAILED(hr))
  {
   return;
  }
  //得到觸發器集合   
  hr = task_def->get_Triggers(&triggers);
  if(FAILED(hr))
  {
   return;
  }
  //在觸發器集合中建立觸發器   
  hr = triggers->Create(TASK_TRIGGER_LOGON, &trig1); //當使用者啟動時觸發
  if(FAILED(hr))
  {
   return;
  }
  //指定最高許可權   
  hr = task_def->get_Principal(&principal);
  if(FAILED(hr))
  {
   return;
  }
  hr = principal->put_RunLevel(TASK_RUNLEVEL_HIGHEST);
  if(FAILED(hr))
  {
   return;
  }
  //把任務添加到目錄中去   
  hr = new_folder->RegisterTaskDefinition(CComBSTR(L"RunAtOnce"), //新任務的名稱
   task_def,
   TASK_CREATE_OR_UPDATE,
   CComVariant(), // user name
   CComVariant(), // password
   TASK_LOGON_INTERACTIVE_TOKEN,
   CComVariant(), // sddl
   &new_task);
  if(FAILED(hr))
  {
   return;
  }
}
else //如果找到了那個任務,就檢查路徑對不對
{
else //如果找到了那個任務,就檢查路徑對不對
{
  //得到任務定義
  hr = new_task->get_Definition(&task_def);
  if(FAILED(hr))
  {
   return;
  }
  //得到動作集合   
  hr = task_def->get_Actions(&actions);
  if(FAILED(hr))
  {
   return;
  }
  //在動作集合中得到動作   
  hr = actions->get_Item(1, &act1);
  if(FAILED(hr))
  {
   return;
  }
  //得到動作中的執行程式
  CComQIPtr<IExecAction> exec_act(act1); 
  CComBSTR exe_path2;
  hr = exec_act->get_Path(&exe_path2);

  WCHAR exe_path[400] = {0};
  GetModuleFileNameW(0, exe_path, 400);
  CComBSTR exe_path3(exe_path);

  //如果路徑不同就修改路徑
  if(exe_path3 != exe_path2)
  {
   hr = exec_act->put_Path(exe_path3);
   if(FAILED(hr))
   {
    return;
   }
   //修改任務
   hr = new_folder->RegisterTaskDefinition(CComBSTR(L"RunAtOnce"), //新任務的名稱
    task_def,
    TASK_CREATE_OR_UPDATE,
    CComVariant(), // user name
    CComVariant(), // password
    TASK_LOGON_INTERACTIVE_TOKEN,
    CComVariant(), // sddl
    &new_task);
   if(FAILED(hr))
   {
    return;
   }
  } 
}
}
//移除Vista的計劃任務
void RemoveVistaTask()
{
  CComPtr<ITaskService>      service;
  CComPtr<ITaskFolder>        root_folder;
  CComPtr<ITaskFolder>        new_folder;
  CComPtr<IRegisteredTask>    new_task; 
  CComPtr<ITaskDefinition>    task_def;
  CComPtr<IActionCollection>  actions;
  CComPtr<IAction>            act1;
  CComPtr<ITriggerCollection> triggers;
  CComPtr<ITrigger>          trig1;
  CComPtr<IPrincipal>        principal;

  //建立執行個體 
  HRESULT hr = service.CoCreateInstance(__uuidof(TaskScheduler));
  if(FAILED(hr))
  {
   return;
  }
  //用預設的使用者串連本機電腦
  hr = service->Connect(CComVariant(),  // local computer
   CComVariant(),  // current user
   CComVariant(),  // current domain
   CComVariant());  // no password
  if(FAILED(hr))
  {
   return;
  }
  //得到根任務檔案夾 
  hr = service->GetFolder(CComBSTR(L"\\"), &root_folder);
  if(FAILED(hr))
  {
   return;
  } 
  //開啟我的工作檔案夾 
  hr = root_folder->GetFolder(CComBSTR(L"Feitian\\NetRockey4"), &new_folder);
  if(FAILED(hr)) //如果檔案夾不存在,就建立一個
  {
   return;
  }
  //找到任務
  hr = new_folder->GetTask(CComBSTR(L"RunAtOnce"), &new_task);
  if(FAILED(hr))
  {
   return;
  }
  //刪除任務
  hr = new_folder->DeleteTask(CComBSTR(L"RunAtOnce"), 0);
  if(FAILED(hr))
  {
   return;
  }
}

#include <atlbase.h>
#include <taskschd.h>

void AddVistaTask() //建立計劃任務
{
CComPtr<ITaskService>      service;
CComPtr<ITaskFolder>        root_folder;
CComPtr<ITaskFolder>        new_folder;
CComPtr<IRegisteredTask>    new_task; 
CComPtr<ITaskDefinition>    task_def;
CComPtr<IActionCollection>  actions;
CComPtr<IAction>            act1;
CComPtr<ITriggerCollection> triggers;
CComPtr<ITrigger>          trig1;
CComPtr<IPrincipal>        principal;

//建立執行個體 
HRESULT hr = service.CoCreateInstance(__uuidof(TaskScheduler));
if(FAILED(hr))
{
  return;
}
//用預設的使用者串連本機電腦
hr = service->Connect(CComVariant(),  // local computer
  CComVariant(),  // current user
  CComVariant(),  // current domain
  CComVariant());  // no password
if(FAILED(hr))
{
  return;
}
//得到根任務檔案夾 
hr = service->GetFolder(CComBSTR(L"\\"), &root_folder);
if(FAILED(hr))
{
  return;

//開啟我的工作檔案夾 
hr = root_folder->GetFolder(CComBSTR(L"Feitian\\NetRockey4"), &new_folder);
if(FAILED(hr)) //如果檔案夾不存在,就建立一個
{
  hr = root_folder->CreateFolder(CComBSTR(L"Feitian\\NetRockey4"),
   CComVariant(), &new_folder); //使用預設的安全性描述元
  if(FAILED(hr))
  {
   return;
  }
}
//找到名字為"RunAtOnce"的任務 
hr = new_folder->GetTask(CComBSTR(L"RunAtOnce"), &new_task);
if(FAILED(hr))
{
  //如果沒有找到就建立一個空任務   
  hr = service->NewTask(0, &task_def);
  if(FAILED(hr))
  {
   return;
  }
  //得到動作集合   
  hr = task_def->get_Actions(&actions);
  if(FAILED(hr))
  {
   return;
  }
  //在動作集合中建立動作   
  hr = actions->Create(TASK_ACTION_EXEC, &act1);
  if(FAILED(hr))
  {
   return;
  }
  //向動作裡面寫入執行程式
  CComQIPtr<IExecAction> exec_act(act1);   
  WCHAR exe_path[400] = {0};
  GetModuleFileNameW(0, exe_path, 400);
  hr = exec_act->put_Path(CComBSTR(exe_path)); //運行本程式
  if(FAILED(hr))
  {
   return;
  } 
  hr = exec_act->put_Arguments(CComBSTR(L"-systray")); //向動作裡面寫入執行程式的參數
  if(FAILED(hr))
  {
   return;
  }
  //得到觸發器集合   
  hr = task_def->get_Triggers(&triggers);
  if(FAILED(hr))
  {
   return;
  }
  //在觸發器集合中建立觸發器   
  hr = triggers->Create(TASK_TRIGGER_LOGON, &trig1); //當使用者啟動時觸發
  if(FAILED(hr))
  {
   return;
  }
  //指定最高許可權   
  hr = task_def->get_Principal(&principal);
  if(FAILED(hr))
  {
   return;
  }
  hr = principal->put_RunLevel(TASK_RUNLEVEL_HIGHEST);
  if(FAILED(hr))
  {
   return;
  }
  //把任務添加到目錄中去   
  hr = new_folder->RegisterTaskDefinition(CComBSTR(L"RunAtOnce"), //新任務的名稱
   task_def,
   TASK_CREATE_OR_UPDATE,
   CComVariant(), // user name
   CComVariant(), // password
   TASK_LOGON_INTERACTIVE_TOKEN,
   CComVariant(), // sddl
   &new_task);
  if(FAILED(hr))
  {
   return;
  }
}
else //如果找到了那個任務,就檢查路徑對不對
{
else //如果找到了那個任務,就檢查路徑對不對
{
  //得到任務定義
  hr = new_task->get_Definition(&task_def);
  if(FAILED(hr))
  {
   return;
  }
  //得到動作集合   
  hr = task_def->get_Actions(&actions);
  if(FAILED(hr))
  {
   return;
  }
  //在動作集合中得到動作   
  hr = actions->get_Item(1, &act1);
  if(FAILED(hr))
  {
   return;
  }
  //得到動作中的執行程式
  CComQIPtr<IExecAction> exec_act(act1); 
  CComBSTR exe_path2;
  hr = exec_act->get_Path(&exe_path2);

  WCHAR exe_path[400] = {0};
  GetModuleFileNameW(0, exe_path, 400);
  CComBSTR exe_path3(exe_path);

  //如果路徑不同就修改路徑
  if(exe_path3 != exe_path2)
  {
   hr = exec_act->put_Path(exe_path3);
   if(FAILED(hr))
   {
    return;
   }
   //修改任務
   hr = new_folder->RegisterTaskDefinition(CComBSTR(L"RunAtOnce"), //新任務的名稱
    task_def,
    TASK_CREATE_OR_UPDATE,
    CComVariant(), // user name
    CComVariant(), // password
    TASK_LOGON_INTERACTIVE_TOKEN,
    CComVariant(), // sddl
    &new_task);
   if(FAILED(hr))
   {
    return;
   }
  } 
}
}
//移除Vista的計劃任務
void RemoveVistaTask()
{
  CComPtr<ITaskService>      service;
  CComPtr<ITaskFolder>        root_folder;
  CComPtr<ITaskFolder>        new_folder;
  CComPtr<IRegisteredTask>    new_task; 
  CComPtr<ITaskDefinition>    task_def;
  CComPtr<IActionCollection>  actions;
  CComPtr<IAction>            act1;
  CComPtr<ITriggerCollection> triggers;
  CComPtr<ITrigger>          trig1;
  CComPtr<IPrincipal>        principal;

  //建立執行個體 
  HRESULT hr = service.CoCreateInstance(__uuidof(TaskScheduler));
  if(FAILED(hr))
  {
   return;
  }
  //用預設的使用者串連本機電腦
  hr = service->Connect(CComVariant(),  // local computer
   CComVariant(),  // current user
   CComVariant(),  // current domain
   CComVariant());  // no password
  if(FAILED(hr))
  {
   return;
  }
  //得到根任務檔案夾 
  hr = service->GetFolder(CComBSTR(L"\\"), &root_folder);
  if(FAILED(hr))
  {
   return;
  } 
  //開啟我的工作檔案夾 
  hr = root_folder->GetFolder(CComBSTR(L"Feitian\\NetRockey4"), &new_folder);
  if(FAILED(hr)) //如果檔案夾不存在,就建立一個
  {
   return;
  }
  //找到任務
  hr = new_folder->GetTask(CComBSTR(L"RunAtOnce"), &new_task);
  if(FAILED(hr))
  {
   return;
  }
  //刪除任務
  hr = new_folder->DeleteTask(CComBSTR(L"RunAtOnce"), 0);
  if(FAILED(hr))
  {
   return;
  }
}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.