开机自启动win7计划任务
#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
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的开机自启动win7计划任务的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 事务相关、不可重复读与幻读的区别
- 下一篇: 什么是CDN ,CDN的作用