0

Win32SetSystemTime時分秒(年月日のみ)を変更せずに( を使用して)システム時刻を設定することはできますか?

これが私のコードです。ご覧のとおり、falseData.Hour、falseData.Minute、および falseData.Second を変更したくないのでコメントしました。ただし、このコードでは、システム時刻は自動的に 01:00:00 に設定されます。手動で、時間、分、秒を変更せずに (タスクバーの時計をクリックして) システム日付を変更できますが、プログラムで変更できますか?

どんな助けでも大歓迎です。ありがとう。マルコ

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Globalization; 
using System.Runtime.InteropServices; 

namespace SysData1_0
{
    public partial class Form1 : Form
    {
        public struct SystemTime
        {
            public ushort Year;
            public ushort Month;
            public ushort DayOfWeek;
            public ushort Day;
            public ushort Hour;
            public ushort Minute;
            public ushort Second;
            public ushort Milliseconds;
        };

        [DllImport("kernel32.dll", EntryPoint = "GetSystemTime", SetLastError = true)]
        public extern static void Win32GetSystemTime(ref SystemTime sysTime);

        [DllImport("kernel32.dll", EntryPoint ="SetSystemTime",SetLastError=true)]
        public extern static bool Win32SetSystemTime(ref SystemTime sysTime);

        public Form1()
        {
            InitializeComponent();
        }   

        private void buttonImpostaDataFittizia_Click(object sender, EventArgs e)
        {
            SystemTime falseData = new SystemTime ();
            if (comboBox.SelectedIndex == 0)
            {
                falseData.Year = (ushort)2015;
                falseData.Month = (ushort)3;
            }

            if (comboBox.SelectedIndex == 1)
            {
                falseData.Year = (ushort)2014;
                falseData.Month = (ushort)9;
            }

            //Please, read here 
            falseData.Day = (ushort)1;
            //falseData.Hour = (ushort)10 - 1;
            //falseData.Minute = (ushort)30;
            //falseData.Second = (ushort)30;
            Win32SetSystemTime(ref falseData);

            string Y,M,D;
            Y = Convert.ToString(falseData.Year);
            M = Convert.ToString(falseData.Month);
            D = Convert.ToString(falseData.Day);
            textBoxDataImpostata.Text = D + "/" + M + "/" + Y;
        }
    }
}
4

2 に答える 2

1

実際、これを行うのは非常に簡単で、必要なメソッドはすべて既に用意されています。変更してシステムに戻す前に、現在の時刻を取得するだけです。

var nowSystemTime = new SystemTime(); //dummy value so that the code compiles.

Win32GetSystemTime(ref nowSystemTime);

nowSystemTime.Year = (ushort)2015;
nowSystemTime.Month = (ushort)3;

Win32SetSystemTime(ref nowSystemTime);

もちろん、この方法をとる場合は、システム時間を戻す前にあまり時間を費やさないようにするか、補償する方法を見つけてください!

于 2015-03-18T12:32:54.510 に答える
0

すべての SystemTime フィールドは、作成時にタイプのデフォルト値に初期化されます。ushort の場合は 0 です。

実際には日付関連の値を設定しますが、0 のままである時間関連の値は設定しません。

時間の 1 はタイムゾーンに関連していると思います。

次のようなことをする必要があります:

falseData.Hour = DateTime.Now.Hour
falseData.Minute = DateTime.Now.Minute
falseData.Second = DateTime.Now.Seconds
于 2015-03-18T12:34:03.647 に答える