1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 开机自启动win7计划任务

开机自启动win7计划任务

时间:2019-12-15 12:50:13

相关推荐

开机自启动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;

}

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。