c++ 调用windows系统定时任务
时间: 2023-07-30 22:05:36 浏览: 231
原生c++自实现定时任务引擎
5星 · 资源好评率100%
要在 C++ 中调用 Windows 系统的定时任务,可以使用 Windows API 中的相关函数。以下是一个示例代码:
```cpp
#include <iostream>
#include <windows.h>
int main() {
// 创建一个定时任务
const wchar_t* taskName = L"MyTask";
const wchar_t* taskPath = L"C:\\path\\to\\my\\task.exe";
const wchar_t* taskArgs = L"arg1 arg2";
ITaskService* pService = NULL;
CoInitialize(NULL);
CoCreateInstance(CLSID_TaskScheduler, NULL, CLSCTX_INPROC_SERVER, IID_ITaskService, (void**)&pService);
pService->Connect(_variant_t(), _variant_t(), _variant_t(), _variant_t());
ITaskFolder* pRootFolder = NULL;
pService->GetFolder(_bstr_t(L"\\"), &pRootFolder);
ITaskDefinition* pTask = NULL;
pService->NewTask(0, &pTask);
pTask->put_Name(_bstr_t(taskName));
ITriggerCollection* pTriggerCollection = NULL;
pTask->get_Triggers(&pTriggerCollection);
ITrigger* pTrigger = NULL;
pTriggerCollection->Create(TASK_TRIGGER_TIME, &pTrigger);
ITimeTrigger* pTimeTrigger = NULL;
pTrigger->QueryInterface(IID_ITimeTrigger, (void**)&pTimeTrigger);
SYSTEMTIME st;
GetLocalTime(&st);
st.wHour = 12; // 设置定时任务的触发时间
st.wMinute = 0;
VARIANT vtStartTime;
VariantInit(&vtStartTime);
vtStartTime.vt = VT_DATE;
SystemTimeToVariantTime(&st, &(vtStartTime.date));
pTimeTrigger->put_StartBoundary(vtStartTime);
pTrigger->put_Enabled(VARIANT_TRUE);
pTriggerCollection->Add(pTrigger);
pTrigger->Release();
IActionCollection* pActionCollection = NULL;
pTask->get_Actions(&pActionCollection);
IAction* pAction = NULL;
pActionCollection->Create(TASK_ACTION_EXEC, &pAction);
IExecAction* pExecAction = NULL;
pAction->QueryInterface(IID_IExecAction, (void**)&pExecAction);
pExecAction->put_Path(_bstr_t(taskPath));
pExecAction->put_Arguments(_bstr_t(taskArgs));
pActionCollection->Add(pAction);
pAction->Release();
IRegisteredTask* pRegisteredTask = NULL;
pRootFolder->RegisterTaskDefinition(
_bstr_t(taskName),
pTask,
TASK_CREATE_OR_UPDATE,
_variant_t(),
_variant_t(),
TASK_LOGON_INTERACTIVE_TOKEN,
_variant_t(L""),
&pRegisteredTask
);
std::cout << "定时任务已创建" << std::endl;
// 释放资源
pRegisteredTask->Release();
pTask->Release();
pRootFolder->Release();
pService->Release();
CoUninitialize();
return 0;
}
```
这段代码使用了 `ITaskService` 接口和其他相关接口来创建和注册一个定时任务。你需要将 `taskPath` 设置为你要定时执行的程序的路径,`taskArgs` 设置为程序的参数,`st.wHour` 和 `st.wMinute` 设置为触发时间。编译运行代码后,就会创建一个名为 `MyTask` 的定时任务,每天的 12:00 执行。
请注意,这段代码使用了 COM 接口,需要在代码中调用 `CoInitialize` 和 `CoUninitialize` 来初始化和释放 COM 组件。另外,还需要链接 `taskschd.lib` 库文件。
希望这可以帮助到你!
阅读全文