开机自启动win7计划任务

本文介绍了一个用于在Windows Vista系统上创建计划任务的C++函数。该函数通过COM接口实现,能够创建或更新一个名为“RunAtOnce”的任务,设置其在用户登录时触发,并执行当前程序。

#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;
  }
 }

转载于:https://www.cnblogs.com/lzjsky/archive/2011/01/07/1929559.html

内容概要:本文系统介绍了算术优化算法(AOA)的基本原理、核心思想及Python实现方法,并通过图像分割的实际案例展示了其应用价值。AOA是一种基于种群的元启发式算法,其核心思想来源于四则运算,利用乘除运算进行全局勘探,加减运算进行局部开发,通过数学优化器加速函数(MOA)和数学优化概率(MOP)动态控制搜索过程,在全局探索与局部开发之间实现平衡。文章详细解析了算法的初始化、勘探与开发阶段的更新策略,并提供了完整的Python代码实现,结合Rastrigin函数进行测试验证。进一步地,以Flask框架搭建前后端分离系统,将AOA应用于图像分割任务,展示了其在实际工程中的可行性与高效性。最后,通过收敛速度、寻优精度等指标评估算法性能,并提出自适应参数调整、模型优化和并行计算等改进策略。; 适合人群:具备一定Python编程基础和优化算法基础知识的高校学生、科研人员及工程技术人员,尤其适合从事人工智能、图像处理、智能优化等领域的从业者;; 使用场景及目标:①理解元启发式算法的设计思想与实现机制;②掌握AOA在函数优化、图像分割等实际问题中的建模与求解方法;③学习如何将优化算法集成到Web系统中实现工程化应用;④为算法性能评估与改进提供实践参考; 阅读建议:建议读者结合代码逐行调试,深入理解算法流程中MOA与MOP的作用机制,尝试在不同测试函数上运行算法以观察性能差异,并可进一步扩展图像分割模块,引入更复杂的预处理或后处理技术以提升分割效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值