NonSoft

タスク スケジューラを登録するサンプル(C#.NET)


 サンプル(ソース/コード)
<このサンプルの概要>
タスク スケジュールを登録するサンプルです。定期的に実行(起動)するタスク登録に如何でしょうか。
3流プログラマのメモ書き様(http://jehupc.exblog.jp/)のサンプルを参考にしています。

こちらでは、タスク登録方法を色々な方法を試しています。試している事は以下の項目です。
1.一回だけ実行するタスク・スケジューラの作成
2.毎日(または2日に)、1回だけ実行するタスク・スケジューラの作成
3.毎日、3時間に1回、実行するタスク・スケジューラの作成
4.毎週、月水金曜日に実行するタスク・スケジューラの作成
5.毎月、15日に実行するタスク・スケジューラの作成

実は、タスク スケジューラを登録するサンプルは「古いごみ削除ツール(NonRccDel)」で
使用したいと思い勉強したのですが、まだ実装出来ていません。
代わりにマニュアルを作りましたが...

クラス(Class1.cs)
using System.Runtime.InteropServices;
using System.Runtime.InteropServices.ComTypes;

class Class1
{
    private static Guid CLSID_CTaskScheduler =new Guid("{148BD52A-A2AB-11CE-B11F-00AA00530503}");
    private static Guid CLSID_CTask =new Guid("{148BD520-A2AB-11CE-B11F-00AA00530503}");
    private static Guid IID_ITaskScheduler =new Guid("{148BD527-A2AB-11CE-B11F-00AA00530503}");
    private static Guid IID_ITask = new Guid("{148BD524-A2AB-11CE-B11F-00AA00530503}");

    private enum CLSCTX : int
    {
        CLSCTX_INPROC_SERVER = 0x1,
        CLSCTX_INPROC_HANDLER = 0x2,
        CLSCTX_LOCAL_SERVER = 0x4,
        CLSCTX_INPROC_SERVER16 = 0x8,
        CLSCTX_REMOTE_SERVER = 0x10,
        CLSCTX_INPROC_HANDLER16 = 0x20,
        CLSCTX_RESERVED1 = 0x40,
        CLSCTX_RESERVED2 = 0x80,
        CLSCTX_RESERVED3 = 0x100,
        CLSCTX_RESERVED4 = 0x200,
        CLSCTX_NO_CODE_DOWNLOAD = 0x400,
        CLSCTX_RESERVED5 = 0x800,
        CLSCTX_NO_CUSTOM_MARSHAL = 0x1000,
        CLSCTX_ENABLE_CODE_DOWNLOAD = 0x2000,
        CLSCTX_NO_FAILURE_LOG = 0x4000,
        CLSCTX_DISABLE_AAA = 0x8000,
        CLSCTX_ENABLE_AAA = 0x10000,
        CLSCTX_FROM_DEFAULT_CONTEXT = 0x20000,
        CLSCTX_INPROC = CLSCTX_INPROC_SERVER | CLSCTX_INPROC_HANDLER,
        CLSCTX_SERVER = CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER | CLSCTX_REMOTE_SERVER,
        CLSCTX_ALL = CLSCTX_SERVER | CLSCTX_INPROC_HANDLER
    }

    private enum TASK_TRIGGER_TYPE : int
    {
        TASK_TIME_TRIGGER_ONCE = 0,
        TASK_TIME_TRIGGER_DAILY = 1,
        TASK_TIME_TRIGGER_WEEKLY = 2,
        TASK_TIME_TRIGGER_MONTHLYDATE = 3,
        TASK_TIME_TRIGGER_MONTHLYDOW = 4,
        TASK_EVENT_TRIGGER_ON_IDLE = 5,
        TASK_EVENT_TRIGGER_AT_SYSTEMSTART = 6,
        TASK_EVENT_TRIGGER_AT_LOGON = 7
    }

    private struct DAILY
    {
        public short DaysInterval;
        public DAILY(int dummy)
        {
            DaysInterval = 0; 
        }
    }

    private struct WEEKLY
    {
        public short WeeksInterval;
        public short rgfDaysOfTheWeek;
        public WEEKLY(int dummy)
        {
            WeeksInterval = 0; 
            rgfDaysOfTheWeek = 0; 
        }
    }

    private struct MONTHLYDATE
    {
        public int rgfDays;
        public short rgfMonths;
        public MONTHLYDATE(int dummy)
        {
            rgfDays = 0;
            rgfMonths = 0; 
        }
    }

    private struct MONTHLYDOW
    {
        public short wWhichWeek;
        public short rgfDaysOfTheWeek;
        public short rgfMonths;
        public MONTHLYDOW(int dummy)
        {
            wWhichWeek = 0;
            rgfDaysOfTheWeek = 0; 
            rgfMonths = 0; 
        }
    }

    [StructLayout(LayoutKind.Explicit)]
    private struct TRIGGER_TYPE_UNION
    {
        [FieldOffset(0)] public DAILY Daily;
        [FieldOffset(0)] public WEEKLY Weekly;
        [FieldOffset(0)] public MONTHLYDATE MonthlyDate;
        [FieldOffset(0)] public MONTHLYDOW MonthlyDOW;
    }

    [StructLayout(LayoutKind.Sequential)]
    private struct TASK_TRIGGER
    {
        public short cbTriggerSize;
        public short Reserved1;
        public short wBeginYear;
        public short wBeginMonth;
        public short wBeginDay;
        public short wEndYear;
        public short wEndMonth;
        public short wEndDay;
        public short wStartHour;
        public short wStartMinute;
        public int MinutesDuration;
        public int MinutesInterval;
        public int rgFlags;
        public TASK_TRIGGER_TYPE TriggerType;
        public TRIGGER_TYPE_UNION Type;
        public short Reserved2;
        public short wRandomMinutesInterval;
    }

    [InterfaceType(ComInterfaceType.InterfaceIsIUnknown), 
    Guid("148BD527-A2AB-11CE-B11F-00AA00530503")]
    private interface ITaskScheduler
    {
        void SetTargetComputer();
        void GetTargetComputer();
        void Enum_();
        void Activate();
        void Delete();
        [return: MarshalAs(UnmanagedType.Interface)]
        Object NewWorkItem([In, MarshalAs(UnmanagedType.LPWStr)] String pwszTaskName,
                           [In, MarshalAs(UnmanagedType.LPStruct)] Guid rclsid,
                           [In, MarshalAs(UnmanagedType.LPStruct)] Guid riid);
        void AddWorkItem();
        void IsOfType();
    }

    [InterfaceType(ComInterfaceType.InterfaceIsIUnknown), 
    Guid("148BD524-A2AB-11CE-B11F-00AA00530503")]
    private interface ITask
    {
        [return: MarshalAs(UnmanagedType.Interface)]
        Object CreateTrigger(out short iNewTrigger); 
        void DeleteTrigger();
        void GetTriggerCount();
        void GetTrigger();
        void GetTriggerString();
        void GetRunTimes();
        void GetNextRunTime();
        void SetIdleWait();
        void GetIdleWait();
        void Run();
        void Terminate();
        void EditWorkItem();
        void GetMostRecentRunTime();
        void GetStatus();
        void GetExitCode();
        void SetComment();
        void GetComment();
        void SetCreator();
        void GetCreator();
        void SetWorkItemData();
        void GetWorkItemData();
        void SetErrorRetryCount();
        void GetErrorRetryCount();
        void SetErrorRetryInterval();
        void GetErrorRetryInterval();
        void SetFlags();
        void GetFlags();
        void SetAccountInformation(
            [In, MarshalAs(UnmanagedType.LPWStr)] String pwszAccountName,
            [In, MarshalAs(UnmanagedType.LPWStr)] String pwszPassword);
        void GetAccountInformation();
        void SetApplicationName(
            [In, MarshalAs(UnmanagedType.LPWStr)] String pwszApplicationName);
        void GetApplicationName();
        void SetParameters();
        void GetParameters();
        void SetWorkingDirectory();
        void GetWorkingDirectory();
        void SetPriority();
        void GetPriority();
        void SetTaskFlags();
        void GetTaskFlags();
        void SetMaxRunTime();
        void GetMaxRunTime();
    }

    [InterfaceType(ComInterfaceType.InterfaceIsIUnknown), 
    Guid("148BD52B-A2AB-11CE-B11F-00AA00530503")]
    private interface ITaskTrigger
    {
        void SetTrigger(ref TASK_TRIGGER pTrigger);
        void GetTrigger();
        void GetTriggerString();
    }

    [DllImport("ole32.dll", ExactSpelling=true, PreserveSig=false)]
    [return: MarshalAs(UnmanagedType.Interface)]
    private static extern Object CoCreateInstance(
        [In, MarshalAs(UnmanagedType.LPStruct)] Guid rclsid ,
        [MarshalAs(UnmanagedType.IUnknown)] Object pUnkOuter,
        CLSCTX dwClsContext,
        [In, MarshalAs(UnmanagedType.LPStruct)] Guid riid);

    private ITaskScheduler objTaskScheduler = null;
    private ITask objTask = null;
    private ITaskTrigger objTaskTrigger = null;
    private IPersistFile objPersistFile = null;

    // 1回だけ実行するタスク・スケジューラの作成
    public void Test1()
    {
        try{
            // タスク作成(タスク名)
            objTaskScheduler = (ITaskScheduler)CoCreateInstance(
                CLSID_CTaskScheduler, null, CLSCTX.CLSCTX_INPROC_SERVER, IID_ITaskScheduler);
            objTask = (ITask)objTaskScheduler.NewWorkItem("TaskName1", CLSID_CTask, IID_ITask);

            // 実行プログラム設定
            objTask.SetApplicationName("notepad.exe");

            // 実行アカウント名とパスワード設定
            objTask.SetAccountInformation("user", "password");

            // トリガー作成
            short iNewTrigger;
            objTaskTrigger = (ITaskTrigger)objTask.CreateTrigger(out iNewTrigger);

            // スケジュール設定------------------------------------------------------
            TASK_TRIGGER pTrigger = new TASK_TRIGGER();
            pTrigger.cbTriggerSize = (short)Marshal.SizeOf(pTrigger);
            pTrigger.wBeginYear = 2100;             // 2100年
            pTrigger.wBeginMonth = 12;              // 12月
            pTrigger.wBeginDay = 31;                // 31日
            pTrigger.wStartHour = 17;               // 17時
            pTrigger.wStartMinute = 30;             // 30分
            pTrigger.TriggerType = TASK_TRIGGER_TYPE.TASK_TIME_TRIGGER_ONCE;
            objTaskTrigger.SetTrigger(ref pTrigger);
            // ----------------------------------------------------------------------

            // タスク保存
            IntPtr pPersistFile = IntPtr.Zero;
            Guid IID_IPersistFile = Marshal.GenerateGuidForType(typeof(IPersistFile));
            Marshal.QueryInterface(
                Marshal.GetIUnknownForObject(objTask), ref IID_IPersistFile, out pPersistFile);
            objPersistFile = (IPersistFile)Marshal.GetObjectForIUnknown(pPersistFile);
            objPersistFile.Save(null, true);
        }catch(Exception ex){
            throw ex;
        }finally{
            // COMオブジェクト解放
            ReleaseComObject();
        }
    }

    // 毎日(または2日に)、1回だけ実行するタスク・スケジューラの作成
    public void Test2()
    {
        try
        {
            // タスク作成(タスク名)
            objTaskScheduler = (ITaskScheduler)CoCreateInstance(
                CLSID_CTaskScheduler, null, CLSCTX.CLSCTX_INPROC_SERVER, IID_ITaskScheduler);
            objTask = (ITask)objTaskScheduler.NewWorkItem("TaskName2", CLSID_CTask, IID_ITask);

            // 実行プログラム設定
            objTask.SetApplicationName("notepad.exe");

            // 実行アカウント名とパスワード設定
            objTask.SetAccountInformation("user", "password");

            // トリガー作成
            short iNewTrigger;
            objTaskTrigger = (ITaskTrigger)objTask.CreateTrigger(out iNewTrigger);

            // スケジュール設定------------------------------------------------------
            TASK_TRIGGER pTrigger = new TASK_TRIGGER();
            pTrigger.cbTriggerSize = (short)Marshal.SizeOf(pTrigger);
            pTrigger.wBeginYear = 2100;             // 2100年
            pTrigger.wBeginMonth = 12;              // 12月
            pTrigger.wBeginDay = 31;                // 31日
            pTrigger.wStartHour = 17;               // 17時
            pTrigger.wStartMinute = 30;             // 30分
            //pTrigger.Type.Daily.DaysInterval = 1; // 1日に1回
            pTrigger.Type.Daily.DaysInterval = 2;   // 2日に1回
            pTrigger.TriggerType = TASK_TRIGGER_TYPE.TASK_TIME_TRIGGER_DAILY;
            objTaskTrigger.SetTrigger(ref pTrigger);
            // ----------------------------------------------------------------------

            // タスク保存
            IntPtr pPersistFile = IntPtr.Zero;
            Guid IID_IPersistFile = Marshal.GenerateGuidForType(typeof(IPersistFile));
            Marshal.QueryInterface(
                Marshal.GetIUnknownForObject(objTask), ref IID_IPersistFile, out pPersistFile);
            objPersistFile = (IPersistFile)Marshal.GetObjectForIUnknown(pPersistFile);
            objPersistFile.Save(null, true);
        }
        catch (Exception ex)
        {
            throw ex;
        }
        finally
        {
            // COMオブジェクト解放
            ReleaseComObject();
        }
    }

    // 毎日、3時間に1回、実行するタスク・スケジューラの作成
    public void Test3()
    {
        try
        {
            // タスク作成(タスク名)
            objTaskScheduler = (ITaskScheduler)CoCreateInstance(
                CLSID_CTaskScheduler, null, CLSCTX.CLSCTX_INPROC_SERVER, IID_ITaskScheduler);
            objTask = (ITask)objTaskScheduler.NewWorkItem("TaskName3", CLSID_CTask, IID_ITask);

            // 実行プログラム設定
            objTask.SetApplicationName("notepad.exe");

            // 実行アカウント名とパスワード設定
            objTask.SetAccountInformation("user", "password");

            // トリガー作成
            short iNewTrigger;
            objTaskTrigger = (ITaskTrigger)objTask.CreateTrigger(out iNewTrigger);

            // スケジュール設定------------------------------------------------------
            TASK_TRIGGER pTrigger = new TASK_TRIGGER();
            pTrigger.cbTriggerSize = (short)Marshal.SizeOf(pTrigger);
            pTrigger.wBeginYear = 2100;             // 2100年
            pTrigger.wBeginMonth = 12;              // 12月
            pTrigger.wBeginDay = 31;                // 31日
            pTrigger.wStartHour = 17;               // 17時
            pTrigger.wStartMinute = 30;             // 30分
            pTrigger.MinutesDuration = 24 * 60;     // 24時間継続
            pTrigger.MinutesInterval = 3 * 60;      // 03時間間隔
            pTrigger.Type.Daily.DaysInterval = 1;   // 1日に1回
            pTrigger.TriggerType = TASK_TRIGGER_TYPE.TASK_TIME_TRIGGER_DAILY;
            objTaskTrigger.SetTrigger(ref pTrigger);
            // ----------------------------------------------------------------------

            // タスク保存
            IntPtr pPersistFile = IntPtr.Zero;
            Guid IID_IPersistFile = Marshal.GenerateGuidForType(typeof(IPersistFile));
            Marshal.QueryInterface(
                Marshal.GetIUnknownForObject(objTask), ref IID_IPersistFile, out pPersistFile);
            objPersistFile = (IPersistFile)Marshal.GetObjectForIUnknown(pPersistFile);
            objPersistFile.Save(null, true);
        }
        catch (Exception ex)
        {
            throw ex;
        }
        finally
        {
            // COMオブジェクト解放
            ReleaseComObject();
        }
    }

    // 毎週、月水金曜日に実行するタスク・スケジューラの作成
    public void Test4()
    {
        try
        {
            // タスク作成(タスク名)
            objTaskScheduler = (ITaskScheduler)CoCreateInstance(
                CLSID_CTaskScheduler, null, CLSCTX.CLSCTX_INPROC_SERVER, IID_ITaskScheduler);
            objTask = (ITask)objTaskScheduler.NewWorkItem("TaskName4", CLSID_CTask, IID_ITask);

            // 実行プログラム設定
            objTask.SetApplicationName("notepad.exe");

            // 実行アカウント名とパスワード設定
            objTask.SetAccountInformation("user", "password");

            // トリガー作成
            short iNewTrigger;
            objTaskTrigger = (ITaskTrigger)objTask.CreateTrigger(out iNewTrigger);

            // スケジュール設定------------------------------------------------------
            TASK_TRIGGER pTrigger = new TASK_TRIGGER();
            pTrigger.cbTriggerSize = (short)Marshal.SizeOf(pTrigger);
            pTrigger.wBeginYear = 2100;                         // 2100年
            pTrigger.wBeginMonth = 12;                          // 12月
            pTrigger.wBeginDay = 31;                            // 31日
            pTrigger.wStartHour = 17;                           // 17時
            pTrigger.wStartMinute = 30;                         // 30分
            pTrigger.Type.Weekly.WeeksInterval = 1;             // 1週に1回
            pTrigger.Type.Weekly.rgfDaysOfTheWeek = 2 + 8 + 32; // 月水金曜日
            pTrigger.TriggerType = TASK_TRIGGER_TYPE.TASK_TIME_TRIGGER_WEEKLY;
            objTaskTrigger.SetTrigger(ref pTrigger);
            // ----------------------------------------------------------------------

            // タスク保存
            IntPtr pPersistFile = IntPtr.Zero;
            Guid IID_IPersistFile = Marshal.GenerateGuidForType(typeof(IPersistFile));
            Marshal.QueryInterface(
                Marshal.GetIUnknownForObject(objTask), ref IID_IPersistFile, out pPersistFile);
            objPersistFile = (IPersistFile)Marshal.GetObjectForIUnknown(pPersistFile);
            objPersistFile.Save(null, true);
        }
        catch (Exception ex)
        {
            throw ex;
        }
        finally
        {
            // COMオブジェクト解放
            ReleaseComObject();
        }
    }

    // 毎月、15日に実行するタスク・スケジューラの作成
    public void Test5()
    {
        try
        {
            // タスク作成(タスク名)
            objTaskScheduler = (ITaskScheduler)CoCreateInstance(
                CLSID_CTaskScheduler, null, CLSCTX.CLSCTX_INPROC_SERVER, IID_ITaskScheduler);
            objTask = (ITask)objTaskScheduler.NewWorkItem("TaskName5", CLSID_CTask, IID_ITask);

            // 実行プログラム設定
            objTask.SetApplicationName("notepad.exe");

            // 実行アカウント名とパスワード設定
            objTask.SetAccountInformation("user", "password");

            // トリガー作成
            short iNewTrigger;
            objTaskTrigger = (ITaskTrigger)objTask.CreateTrigger(out iNewTrigger);

            // スケジュール設定------------------------------------------------------
            TASK_TRIGGER pTrigger = new TASK_TRIGGER();
            pTrigger.cbTriggerSize = (short)Marshal.SizeOf(pTrigger);
            pTrigger.wBeginYear = 2100;             // 2100年
            pTrigger.wBeginMonth = 12;              // 12月
            pTrigger.wBeginDay = 31;                // 31日
            pTrigger.wStartHour = 17;               // 17時
            pTrigger.wStartMinute = 30;             // 30分
            pTrigger.Type.MonthlyDate.rgfMonths =
                1 | 2 | 4 | 8 | 16 | 32 |
                64 | 128 | 256 | 512 | 1024 | 2048; // 1,2,3,4,5,6,7,8,9,10,11,12月
            pTrigger.Type.MonthlyDate.rgfDays = (int)Math.Pow(2, 15 - 1); // 15日
            pTrigger.TriggerType = TASK_TRIGGER_TYPE.TASK_TIME_TRIGGER_MONTHLYDATE;
            objTaskTrigger.SetTrigger(ref pTrigger);
            // ----------------------------------------------------------------------

            // タスク保存
            IntPtr pPersistFile = IntPtr.Zero;
            Guid IID_IPersistFile = Marshal.GenerateGuidForType(typeof(IPersistFile));
            Marshal.QueryInterface(
                Marshal.GetIUnknownForObject(objTask), ref IID_IPersistFile, out pPersistFile);
            objPersistFile = (IPersistFile)Marshal.GetObjectForIUnknown(pPersistFile);
            objPersistFile.Save(null, true);
        }
        catch (Exception ex)
        {
            throw ex;
        }
        finally
        {
            // COMオブジェクト解放
            ReleaseComObject();
        }
    }

    // 毎月、第2木曜日に実行するタスク・スケジューラの作成
    public void Test6()
    {
        try
        {
            // タスク作成(タスク名)
            objTaskScheduler = (ITaskScheduler)CoCreateInstance(
                CLSID_CTaskScheduler, null, CLSCTX.CLSCTX_INPROC_SERVER, IID_ITaskScheduler);
            objTask = (ITask)objTaskScheduler.NewWorkItem("TaskName6", CLSID_CTask, IID_ITask);

            // 実行プログラム設定
            objTask.SetApplicationName("notepad.exe");

            // 実行アカウント名とパスワード設定
            objTask.SetAccountInformation("user", "password");

            // トリガー作成
            short iNewTrigger;
            objTaskTrigger = (ITaskTrigger)objTask.CreateTrigger(out iNewTrigger);

            // スケジュール設定------------------------------------------------------
            TASK_TRIGGER pTrigger = new TASK_TRIGGER();
            pTrigger.cbTriggerSize = (short)Marshal.SizeOf(pTrigger);
            pTrigger.wBeginYear = 2100;             // 2100年
            pTrigger.wBeginMonth = 12;              // 12月
            pTrigger.wBeginDay = 31;                // 31日
            pTrigger.wStartHour = 17;               // 17時
            pTrigger.wStartMinute = 30;             // 30分
            pTrigger.Type.MonthlyDOW.rgfMonths =
                1 | 2 | 4 | 8 | 16 | 32 |
                64 | 128 | 256 | 512 | 1024 | 2048; // 1,2,3,4,5,6,7,8,9,10,11,12月
            pTrigger.Type.MonthlyDOW.wWhichWeek = 2;        // 第2週
            pTrigger.Type.MonthlyDOW.rgfDaysOfTheWeek = 16; // 木曜日
            pTrigger.TriggerType = TASK_TRIGGER_TYPE.TASK_TIME_TRIGGER_MONTHLYDOW;
            objTaskTrigger.SetTrigger(ref pTrigger);
            // ----------------------------------------------------------------------

            // タスク保存
            IntPtr pPersistFile = IntPtr.Zero;
            Guid IID_IPersistFile = Marshal.GenerateGuidForType(typeof(IPersistFile));
            Marshal.QueryInterface(
                Marshal.GetIUnknownForObject(objTask), ref IID_IPersistFile, out pPersistFile);
            objPersistFile = (IPersistFile)Marshal.GetObjectForIUnknown(pPersistFile);
            objPersistFile.Save(null, true);
        }
        catch (Exception ex)
        {
            throw ex;
        }
        finally
        {
            // COMオブジェクト解放
            ReleaseComObject();
        }
    }

    /// <summary>
    /// COMオブジェクト解放
    /// </summary>
    /// <returns></returns>
    private void ReleaseComObject()
    {
        try
        {
            if (objPersistFile != null)
            {
                Marshal.ReleaseComObject(objPersistFile);
                objPersistFile = null;
            }
        }
        catch { }

        try
        {
            if (objTaskTrigger != null)
            {
                Marshal.ReleaseComObject(objTaskTrigger);
                objTaskTrigger = null;
            }
        }
        catch { }

        try
        {
            if (objTask != null)
            {
                Marshal.ReleaseComObject(objTask);
                objTask = null;
            }
        }
        catch { }

        try
        {
            if (objTaskScheduler != null)
            {
                Marshal.ReleaseComObject(objTaskScheduler);
                objTaskScheduler = null;
            }
        }
        catch { }
    }

    /// <summary>
    /// デストラクタ
    /// </summary>
    ~Class1()
    {
        // COMオブジェクト解放
        ReleaseComObject();
    }
}

★テスト用フォーム(Form1.cs)
public partial class Form1 : Form
{
    // 1回だけ実行するタスク・スケジューラの作成
    private void Button1_Click(object sender, EventArgs e)
    {
        Class1 obj =new Class1();
        obj.Test1();
    }

    // 毎日(または2日に)、1回だけ実行するタスク・スケジューラの作成
    private void Button2_Click(object sender, EventArgs e)
    {
        Class1 obj = new Class1();
        obj.Test2();
    }

    // 毎日、3時間に1回、実行するタスク・スケジューラの作成
    private void Button3_Click(object sender, EventArgs e)
    {
        Class1 obj = new Class1();
        obj.Test3();
    }

    // 毎週、月水金曜日に実行するタスク・スケジューラの作成
    private void Button4_Click(object sender, EventArgs e)
    {
        Class1 obj = new Class1();
        obj.Test4();
    }

    // 毎月、15日に実行するタスク・スケジューラの作成
    private void Button5_Click(object sender, EventArgs e)
    {
        Class1 obj = new Class1();
        obj.Test5();
    }

    // 毎月、第2木曜日に実行するタスク・スケジューラの作成
    private void Button6_Click(object sender, EventArgs e)
    {
        Class1 obj = new Class1();
        obj.Test6();
    }
}