Win32 API 日本語リファレンス
ホームSystem.TaskScheduler › TASK_TRIGGER

TASK_TRIGGER

構造体
サイズx64: 48 バイト / x86: 48 バイト

サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。

フィールド

フィールドサイズx64x86説明
cbTriggerSizeWORD2+0+0この構造体のサイズ (バイト単位)。
Reserved1WORD2+2+2内部使用のみです。この値は 0 でなければなりません。
wBeginYearWORD2+4+4タスクトリガーが有効になる年。この値は 4 桁でなければなりません (97 ではなく 1997)。タスクを設定するときは、開始年を指定する必要があります。
wBeginMonthWORD2+6+6タスクトリガーが有効になる月 (wBeginYear メンバーで指定された年における月)。タスクを設定するときは、開始月を指定する必要があります。
wBeginDayWORD2+8+8タスクトリガーが有効になる日 (wBeginMonth メンバーで指定された月における日)。タスクを設定するときは、開始日を指定する必要があります。
wEndYearWORD2+10+10タスクトリガーが無効になる年。この値は 4 桁でなければなりません (97 ではなく 1997)。
wEndMonthWORD2+12+12タスクトリガーが無効になる月 (wEndYear メンバーで指定された年における月)。
wEndDayWORD2+14+14タスクトリガーが無効になる日 (wEndMonth メンバーで指定された月における日)。
wStartHourWORD2+16+16タスクが実行される時。この値は 24 時間制で、時は 00 から 23 までです。
wStartMinuteWORD2+18+18タスクが実行される分 (wStartHour メンバーで指定された時における分)。
MinutesDurationDWORD4+20+20

タスクの開始後にトリガーが有効なままとなる時間 (分単位)。ここで指定する分数は MinutesInterval の設定以上でなければなりません。

例えば、午前 8:00 にタスクを開始し、午後 5:00 まで繰り返しタスクを開始したい場合、継続時間は 540 分になります。

MinutesIntervalDWORD4+24+24

連続するタスクの実行間隔 (分単位)。この数値は、前回のスケジュールされたタスクの開始時点から数えられます。ここで指定する分数は MinutesDuration の設定より小さくなければなりません。

例えば、午前 8:00 から午後 5:00 まで 1 時間ごとにタスクを実行するには、このフィールドに 60 を設定します。

rgFlagsDWORD4+28+28

トリガーの動作を表す値。この値は次のフラグの組み合わせです。

TASK_TRIGGER_FLAG_HAS_END_DATE

トリガー構造体の終了日が有効です。このフラグが設定されていない場合、終了日のデータは無視され、トリガーは無期限に有効となります。

TASK_TRIGGER_FLAG_KILL_AT_DURATION_END

アクティブなトリガーの有効期間の終了時にタスクが終了されます。継続時間の終了時に、タスク スケジューラは関連付けられたアプリケーションに WM_CLOSE メッセージを送信します。WM_CLOSE を送信できない場合 (例えば、アプリケーションにウィンドウがない場合) や、WM_CLOSE を受け取ってから 3 分以内にアプリケーションが終了しない場合、タスク スケジューラは TerminateProcess を使用してアプリケーションを終了します。

TASK_TRIGGER_FLAG_DISABLED

タスクトリガーが非アクティブです。

TriggerTypeTASK_TRIGGER_TYPE4+32+32トリガーの種類を指定する TASK_TRIGGER_TYPE 列挙値です。このメンバーは Type と共に使用されます。ここで指定したトリガーの種類によって、Type メンバーで指定される TRIGGER_TYPE_UNION のどのフィールドが使用されるかが決まります。トリガーの種類は、トリガーがタスクをいつ実行するかに基づいています。
TypeTRIGGER_TYPE_UNION8+36+36トリガーの詳細を指定する TRIGGER_TYPE_UNION 構造体です。TriggerType メンバーによって、TRIGGER_TYPE_UNION 共用体のどのフィールドが使用されるかが決まることに注意してください。
Reserved2WORD2+44+44内部使用のみです。この値は 0 でなければなりません。
wRandomMinutesIntervalWORD2+46+46現在は使用されていません。

公式ドキュメント

スケジュールされた作業項目を実行する時刻を定義します。

解説(Remarks)

これらの時刻には、作業項目の開始時刻、終了時刻、継続時間、および変更フラグが含まれる場合があります。トリガーを設定するときは、開始の日、月、年を設定する必要があることに注意してください。

メモ スケジュールされた作業項目には、1 つ以上のトリガーを定義できます。作業項目が実行される時刻は、その項目に対して定義されたすべてのトリガーの和集合となります。
出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

各言語での定義

#include <windows.h>

// DAILY  (x64 2 / x86 2 バイト)
typedef struct DAILY {
    WORD DaysInterval;
} DAILY;

// WEEKLY  (x64 4 / x86 4 バイト)
typedef struct WEEKLY {
    WORD WeeksInterval;
    WORD rgfDaysOfTheWeek;
} WEEKLY;

// MONTHLYDATE  (x64 8 / x86 8 バイト)
typedef struct MONTHLYDATE {
    DWORD rgfDays;
    WORD rgfMonths;
} MONTHLYDATE;

// MONTHLYDOW  (x64 6 / x86 6 バイト)
typedef struct MONTHLYDOW {
    WORD wWhichWeek;
    WORD rgfDaysOfTheWeek;
    WORD rgfMonths;
} MONTHLYDOW;

// TRIGGER_TYPE_UNION  (x64 8 / x86 8 バイト)
typedef struct TRIGGER_TYPE_UNION {
    DAILY Daily;
    WEEKLY Weekly;
    MONTHLYDATE MonthlyDate;
    MONTHLYDOW MonthlyDOW;
} TRIGGER_TYPE_UNION;

// TASK_TRIGGER  (x64 48 / x86 48 バイト)
typedef struct TASK_TRIGGER {
    WORD cbTriggerSize;
    WORD Reserved1;
    WORD wBeginYear;
    WORD wBeginMonth;
    WORD wBeginDay;
    WORD wEndYear;
    WORD wEndMonth;
    WORD wEndDay;
    WORD wStartHour;
    WORD wStartMinute;
    DWORD MinutesDuration;
    DWORD MinutesInterval;
    DWORD rgFlags;
    TASK_TRIGGER_TYPE TriggerType;
    TRIGGER_TYPE_UNION Type;
    WORD Reserved2;
    WORD wRandomMinutesInterval;
} TASK_TRIGGER;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct DAILY
{
    public ushort DaysInterval;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct WEEKLY
{
    public ushort WeeksInterval;
    public ushort rgfDaysOfTheWeek;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct MONTHLYDATE
{
    public uint rgfDays;
    public ushort rgfMonths;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct MONTHLYDOW
{
    public ushort wWhichWeek;
    public ushort rgfDaysOfTheWeek;
    public ushort rgfMonths;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct TRIGGER_TYPE_UNION
{
    public DAILY Daily;
    public WEEKLY Weekly;
    public MONTHLYDATE MonthlyDate;
    public MONTHLYDOW MonthlyDOW;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct TASK_TRIGGER
{
    public ushort cbTriggerSize;
    public ushort Reserved1;
    public ushort wBeginYear;
    public ushort wBeginMonth;
    public ushort wBeginDay;
    public ushort wEndYear;
    public ushort wEndMonth;
    public ushort wEndDay;
    public ushort wStartHour;
    public ushort wStartMinute;
    public uint MinutesDuration;
    public uint MinutesInterval;
    public uint rgFlags;
    public int TriggerType;
    public TRIGGER_TYPE_UNION Type;
    public ushort Reserved2;
    public ushort wRandomMinutesInterval;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure DAILY
    Public DaysInterval As UShort
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure WEEKLY
    Public WeeksInterval As UShort
    Public rgfDaysOfTheWeek As UShort
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure MONTHLYDATE
    Public rgfDays As UInteger
    Public rgfMonths As UShort
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure MONTHLYDOW
    Public wWhichWeek As UShort
    Public rgfDaysOfTheWeek As UShort
    Public rgfMonths As UShort
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure TRIGGER_TYPE_UNION
    Public Daily As DAILY
    Public Weekly As WEEKLY
    Public MonthlyDate As MONTHLYDATE
    Public MonthlyDOW As MONTHLYDOW
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure TASK_TRIGGER
    Public cbTriggerSize As UShort
    Public Reserved1 As UShort
    Public wBeginYear As UShort
    Public wBeginMonth As UShort
    Public wBeginDay As UShort
    Public wEndYear As UShort
    Public wEndMonth As UShort
    Public wEndDay As UShort
    Public wStartHour As UShort
    Public wStartMinute As UShort
    Public MinutesDuration As UInteger
    Public MinutesInterval As UInteger
    Public rgFlags As UInteger
    Public TriggerType As Integer
    Public Type As TRIGGER_TYPE_UNION
    Public Reserved2 As UShort
    Public wRandomMinutesInterval As UShort
End Structure
import ctypes
from ctypes import wintypes

class DAILY(ctypes.Structure):
    _fields_ = [
        ("DaysInterval", ctypes.c_ushort),
    ]

class WEEKLY(ctypes.Structure):
    _fields_ = [
        ("WeeksInterval", ctypes.c_ushort),
        ("rgfDaysOfTheWeek", ctypes.c_ushort),
    ]

class MONTHLYDATE(ctypes.Structure):
    _fields_ = [
        ("rgfDays", wintypes.DWORD),
        ("rgfMonths", ctypes.c_ushort),
    ]

class MONTHLYDOW(ctypes.Structure):
    _fields_ = [
        ("wWhichWeek", ctypes.c_ushort),
        ("rgfDaysOfTheWeek", ctypes.c_ushort),
        ("rgfMonths", ctypes.c_ushort),
    ]

class TRIGGER_TYPE_UNION(ctypes.Structure):
    _fields_ = [
        ("Daily", DAILY),
        ("Weekly", WEEKLY),
        ("MonthlyDate", MONTHLYDATE),
        ("MonthlyDOW", MONTHLYDOW),
    ]

class TASK_TRIGGER(ctypes.Structure):
    _fields_ = [
        ("cbTriggerSize", ctypes.c_ushort),
        ("Reserved1", ctypes.c_ushort),
        ("wBeginYear", ctypes.c_ushort),
        ("wBeginMonth", ctypes.c_ushort),
        ("wBeginDay", ctypes.c_ushort),
        ("wEndYear", ctypes.c_ushort),
        ("wEndMonth", ctypes.c_ushort),
        ("wEndDay", ctypes.c_ushort),
        ("wStartHour", ctypes.c_ushort),
        ("wStartMinute", ctypes.c_ushort),
        ("MinutesDuration", wintypes.DWORD),
        ("MinutesInterval", wintypes.DWORD),
        ("rgFlags", wintypes.DWORD),
        ("TriggerType", ctypes.c_int),
        ("Type", TRIGGER_TYPE_UNION),
        ("Reserved2", ctypes.c_ushort),
        ("wRandomMinutesInterval", ctypes.c_ushort),
    ]
#[repr(C)]
pub struct DAILY {
    pub DaysInterval: u16,
}

#[repr(C)]
pub struct WEEKLY {
    pub WeeksInterval: u16,
    pub rgfDaysOfTheWeek: u16,
}

#[repr(C)]
pub struct MONTHLYDATE {
    pub rgfDays: u32,
    pub rgfMonths: u16,
}

#[repr(C)]
pub struct MONTHLYDOW {
    pub wWhichWeek: u16,
    pub rgfDaysOfTheWeek: u16,
    pub rgfMonths: u16,
}

#[repr(C)]
pub struct TRIGGER_TYPE_UNION {
    pub Daily: DAILY,
    pub Weekly: WEEKLY,
    pub MonthlyDate: MONTHLYDATE,
    pub MonthlyDOW: MONTHLYDOW,
}

#[repr(C)]
pub struct TASK_TRIGGER {
    pub cbTriggerSize: u16,
    pub Reserved1: u16,
    pub wBeginYear: u16,
    pub wBeginMonth: u16,
    pub wBeginDay: u16,
    pub wEndYear: u16,
    pub wEndMonth: u16,
    pub wEndDay: u16,
    pub wStartHour: u16,
    pub wStartMinute: u16,
    pub MinutesDuration: u32,
    pub MinutesInterval: u32,
    pub rgFlags: u32,
    pub TriggerType: i32,
    pub Type: TRIGGER_TYPE_UNION,
    pub Reserved2: u16,
    pub wRandomMinutesInterval: u16,
}
import "golang.org/x/sys/windows"

type DAILY struct {
	DaysInterval uint16
}

type WEEKLY struct {
	WeeksInterval uint16
	rgfDaysOfTheWeek uint16
}

type MONTHLYDATE struct {
	rgfDays uint32
	rgfMonths uint16
}

type MONTHLYDOW struct {
	wWhichWeek uint16
	rgfDaysOfTheWeek uint16
	rgfMonths uint16
}

type TRIGGER_TYPE_UNION struct {
	Daily DAILY
	Weekly WEEKLY
	MonthlyDate MONTHLYDATE
	MonthlyDOW MONTHLYDOW
}

type TASK_TRIGGER struct {
	cbTriggerSize uint16
	Reserved1 uint16
	wBeginYear uint16
	wBeginMonth uint16
	wBeginDay uint16
	wEndYear uint16
	wEndMonth uint16
	wEndDay uint16
	wStartHour uint16
	wStartMinute uint16
	MinutesDuration uint32
	MinutesInterval uint32
	rgFlags uint32
	TriggerType int32
	Type TRIGGER_TYPE_UNION
	Reserved2 uint16
	wRandomMinutesInterval uint16
}
type
  DAILY = record
    DaysInterval: Word;
  end;

  WEEKLY = record
    WeeksInterval: Word;
    rgfDaysOfTheWeek: Word;
  end;

  MONTHLYDATE = record
    rgfDays: DWORD;
    rgfMonths: Word;
  end;

  MONTHLYDOW = record
    wWhichWeek: Word;
    rgfDaysOfTheWeek: Word;
    rgfMonths: Word;
  end;

  TRIGGER_TYPE_UNION = record
    Daily: DAILY;
    Weekly: WEEKLY;
    MonthlyDate: MONTHLYDATE;
    MonthlyDOW: MONTHLYDOW;
  end;

  TASK_TRIGGER = record
    cbTriggerSize: Word;
    Reserved1: Word;
    wBeginYear: Word;
    wBeginMonth: Word;
    wBeginDay: Word;
    wEndYear: Word;
    wEndMonth: Word;
    wEndDay: Word;
    wStartHour: Word;
    wStartMinute: Word;
    MinutesDuration: DWORD;
    MinutesInterval: DWORD;
    rgFlags: DWORD;
    TriggerType: Integer;
    Type: TRIGGER_TYPE_UNION;
    Reserved2: Word;
    wRandomMinutesInterval: Word;
  end;
const DAILY = extern struct {
    DaysInterval: u16,
};

const WEEKLY = extern struct {
    WeeksInterval: u16,
    rgfDaysOfTheWeek: u16,
};

const MONTHLYDATE = extern struct {
    rgfDays: u32,
    rgfMonths: u16,
};

const MONTHLYDOW = extern struct {
    wWhichWeek: u16,
    rgfDaysOfTheWeek: u16,
    rgfMonths: u16,
};

const TRIGGER_TYPE_UNION = extern struct {
    Daily: DAILY,
    Weekly: WEEKLY,
    MonthlyDate: MONTHLYDATE,
    MonthlyDOW: MONTHLYDOW,
};

const TASK_TRIGGER = extern struct {
    cbTriggerSize: u16,
    Reserved1: u16,
    wBeginYear: u16,
    wBeginMonth: u16,
    wBeginDay: u16,
    wEndYear: u16,
    wEndMonth: u16,
    wEndDay: u16,
    wStartHour: u16,
    wStartMinute: u16,
    MinutesDuration: u32,
    MinutesInterval: u32,
    rgFlags: u32,
    TriggerType: i32,
    Type: TRIGGER_TYPE_UNION,
    Reserved2: u16,
    wRandomMinutesInterval: u16,
};
type
  DAILY {.bycopy.} = object
    DaysInterval: uint16

  WEEKLY {.bycopy.} = object
    WeeksInterval: uint16
    rgfDaysOfTheWeek: uint16

  MONTHLYDATE {.bycopy.} = object
    rgfDays: uint32
    rgfMonths: uint16

  MONTHLYDOW {.bycopy.} = object
    wWhichWeek: uint16
    rgfDaysOfTheWeek: uint16
    rgfMonths: uint16

  TRIGGER_TYPE_UNION {.bycopy.} = object
    Daily: DAILY
    Weekly: WEEKLY
    MonthlyDate: MONTHLYDATE
    MonthlyDOW: MONTHLYDOW

  TASK_TRIGGER {.bycopy.} = object
    cbTriggerSize: uint16
    Reserved1: uint16
    wBeginYear: uint16
    wBeginMonth: uint16
    wBeginDay: uint16
    wEndYear: uint16
    wEndMonth: uint16
    wEndDay: uint16
    wStartHour: uint16
    wStartMinute: uint16
    MinutesDuration: uint32
    MinutesInterval: uint32
    rgFlags: uint32
    TriggerType: int32
    Type: TRIGGER_TYPE_UNION
    Reserved2: uint16
    wRandomMinutesInterval: uint16
struct DAILY
{
    ushort DaysInterval;
}

struct WEEKLY
{
    ushort WeeksInterval;
    ushort rgfDaysOfTheWeek;
}

struct MONTHLYDATE
{
    uint rgfDays;
    ushort rgfMonths;
}

struct MONTHLYDOW
{
    ushort wWhichWeek;
    ushort rgfDaysOfTheWeek;
    ushort rgfMonths;
}

struct TRIGGER_TYPE_UNION
{
    DAILY Daily;
    WEEKLY Weekly;
    MONTHLYDATE MonthlyDate;
    MONTHLYDOW MonthlyDOW;
}

struct TASK_TRIGGER
{
    ushort cbTriggerSize;
    ushort Reserved1;
    ushort wBeginYear;
    ushort wBeginMonth;
    ushort wBeginDay;
    ushort wEndYear;
    ushort wEndMonth;
    ushort wEndDay;
    ushort wStartHour;
    ushort wStartMinute;
    uint MinutesDuration;
    uint MinutesInterval;
    uint rgFlags;
    int TriggerType;
    TRIGGER_TYPE_UNION Type;
    ushort Reserved2;
    ushort wRandomMinutesInterval;
}

HSP用 定義

HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; TASK_TRIGGER サイズ: 48 バイト(x64)
dim st, 12    ; 4byte整数×12(構造体サイズ 48 / 4 切り上げ)
; cbTriggerSize : WORD (+0, 2byte)  wpoke st,0,値  /  値 = wpeek(st,0)
; Reserved1 : WORD (+2, 2byte)  wpoke st,2,値  /  値 = wpeek(st,2)
; wBeginYear : WORD (+4, 2byte)  wpoke st,4,値  /  値 = wpeek(st,4)
; wBeginMonth : WORD (+6, 2byte)  wpoke st,6,値  /  値 = wpeek(st,6)
; wBeginDay : WORD (+8, 2byte)  wpoke st,8,値  /  値 = wpeek(st,8)
; wEndYear : WORD (+10, 2byte)  wpoke st,10,値  /  値 = wpeek(st,10)
; wEndMonth : WORD (+12, 2byte)  wpoke st,12,値  /  値 = wpeek(st,12)
; wEndDay : WORD (+14, 2byte)  wpoke st,14,値  /  値 = wpeek(st,14)
; wStartHour : WORD (+16, 2byte)  wpoke st,16,値  /  値 = wpeek(st,16)
; wStartMinute : WORD (+18, 2byte)  wpoke st,18,値  /  値 = wpeek(st,18)
; MinutesDuration : DWORD (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; MinutesInterval : DWORD (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; rgFlags : DWORD (+28, 4byte)  st.7 = 値  /  値 = st.7   (lpoke/lpeek も可)
; TriggerType : TASK_TRIGGER_TYPE (+32, 4byte)  st.8 = 値  /  値 = st.8   (lpoke/lpeek も可)
; Type : TRIGGER_TYPE_UNION (+36, 8byte)  varptr(st)+36 を基点に操作(8byte:入れ子/配列)
; Reserved2 : WORD (+44, 2byte)  wpoke st,44,値  /  値 = wpeek(st,44)
; wRandomMinutesInterval : WORD (+46, 2byte)  wpoke st,46,値  /  値 = wpeek(st,46)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global TASK_TRIGGER
    #field short cbTriggerSize
    #field short Reserved1
    #field short wBeginYear
    #field short wBeginMonth
    #field short wBeginDay
    #field short wEndYear
    #field short wEndMonth
    #field short wEndDay
    #field short wStartHour
    #field short wStartMinute
    #field int MinutesDuration
    #field int MinutesInterval
    #field int rgFlags
    #field int TriggerType
    #field byte Type 8
    #field short Reserved2
    #field short wRandomMinutesInterval
#endstruct

stdim st, TASK_TRIGGER        ; NSTRUCT 変数を確保
st->cbTriggerSize = 100
mes "cbTriggerSize=" + st->cbTriggerSize
; ※union フィールドは byte 列で確保(NSTRUCT は union 非対応)。必要に応じ手動でアクセス。