如何在Windows 7上使用vb.net更改系统日期和时间

时间:2014-11-13 03:41:32

标签: .net vb.net datetime elevated-privileges

所以我试图创建一个小程序来快速改变Windows 7的时间。遵循“SetSystemTime(ByRef theDateTime As SYSTEMTIME)”,就像每个人在互联网上做的一样。我做了同样的事情。

但什么都没发生。

以下是代码:

Imports System.Data
Imports System.Text
Imports System.Runtime.InteropServices

Public Class Form1

Private WithEvents timer1 As New Timer

<StructLayoutAttribute(LayoutKind.Sequential)> _
Private Structure SYSTEMTIME
    Public year As Short
    Public month As Short
    Public dayOfWeek As Short
    Public day As Short
    Public hour As Short
    Public minute As Short
    Public second As Short
    Public milliseconds As Short
End Structure

<DllImport("kernel32.dll", setLastError:=True)> _
Private Shared Function SetSystemTime(ByRef theDateTime As SYSTEMTIME) As Boolean

End Function

Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click

    Dim newtime As New SYSTEMTIME

    newtime.year = dtpDate1.Value.Year
    newtime.month = dtpDate1.Value.Year
    newtime.dayOfWeek = dtpDate1.Value.DayOfWeek
    newtime.day = dtpDate1.Value.Day
    newtime.hour = CShort(txtHrs.Text) 'dtpDate1.Value.Hour
    newtime.minute = CShort(txtMins.Text) 'dtpDate1.Value.Minute
    newtime.second = CShort(txtSec.Text) 'dtpDate1.Value.Second
    newtime.milliseconds = dtpDate1.Value.Millisecond

    Try
        If SetSystemTime(newtime) Then
            MsgBox("time changed")
        End If
    Catch ex As Exception
        MsgBox(ex.Message)
    End Try

End Sub

Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    Try


        dtpDate1.Value = DateTime.Now
        dtpDate2.Value = DateTime.Now

        txtHrs.Text = DateTime.Now.Hour
        txtMins.Text = DateTime.Now.Minute
        txtSec.Text = DateTime.Now.Second

        txtHrst.Text = DateTime.Now.Hour
        txtMinst.Text = DateTime.Now.Minute
        txtSect.Text = DateTime.Now.Second

        timer1.Interval = 1000
        timer1.Start()
    Catch ex As Exception
        MsgBox(ex.Message)
    End Try
End Sub

Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click

    Dim newtime As New SYSTEMTIME

    newtime.year = dtpDate2.Value.Year
    newtime.month = dtpDate2.Value.Year
    newtime.dayOfWeek = dtpDate2.Value.DayOfWeek
    newtime.day = dtpDate1.Value.Day
    newtime.hour = CShort(txtHrst.Text) 'dtpDate1.Value.Hour
    newtime.minute = CShort(txtMinst.Text) 'dtpDate1.Value.Minute
    newtime.second = CShort(txtSect.Text) 'dtpDate1.Value.Second
    newtime.milliseconds = dtpDate2.Value.Millisecond

    Try
        If SetSystemTime(newtime) Then
            MsgBox("time changed")
        End If
    Catch ex As Exception
        MsgBox(ex.Message)
    End Try

End Sub

Private Sub timer1_Tick(sender As Object, e As System.EventArgs) Handles timer1.Tick

    txtSec.Text = CInt(txtSec.Text) + 1
    txtSect.Text = CInt(txtSect.Text) + 1

End Sub

Private Sub txtSec_TextChanged(sender As Object, e As System.EventArgs) Handles txtSec.TextChanged

    If CInt(txtSec.Text) = 60 Then
        txtMins.Text = CInt(txtMins.Text) + 1
        txtSec.Text = 0
    End If

End Sub

Private Sub txtSect_TextChanged(sender As Object, e As System.EventArgs) Handles txtSect.TextChanged

    If CInt(txtSect.Text) = 60 Then
        txtMinst.Text = CInt(txtMinst.Text) + 1
        txtSect.Text = 0
    End If

End Sub


Private Sub txtMins_TextChanged(sender As Object, e As System.EventArgs) Handles txtMins.TextChanged

    If CInt(txtMins.Text) = 60 Then
        txtHrs.Text = CInt(txtHrs.Text) + 1
        txtMins.Text = 0
    End If

End Sub

Private Sub txtMinst_TextChanged(sender As Object, e As System.EventArgs) Handles txtMinst.TextChanged

    If CInt(txtMinst.Text) = 60 Then
        txtHrst.Text = CInt(txtHrst.Text) + 1
        txtMinst.Text = 0
    End If

End Sub

Private Sub txtHrs_TextChanged(sender As Object, e As System.EventArgs) Handles txtHrs.TextChanged

    If CInt(txtHrs.Text) = 24 Then
        dtpDate1.Value.Date.AddDays(1)
        txtHrs.Text = 0
    End If

End Sub

Private Sub txtHrst_TextChanged(sender As Object, e As System.EventArgs) Handles txtHrst.TextChanged

    If CInt(txtHrst.Text) = 24 Then
        dtpDate2.Value.Date.AddDays(1)
        txtHrst.Text = 0
    End If

End Sub
End Class

我不知道我做错了什么,我尝试构建一个exe并以管理员身份运行。

3 个答案:

答案 0 :(得分:2)

到目前为止,最简单的方法是在Microsoft.VisualBasic命名空间中使用内置方法:

    'create a date to use
    Dim d As DateTime
    'set the date to a hour from now
    d = DateTime.Now.AddHours(1)
    'set the system date and time to this date and time - throw an exception if we can't set it
    Try
        Microsoft.VisualBasic.TimeOfDay = d
    Catch ex As Exception
        MessageBox.Show("Could not set the time. You probably need to run as Administrator to do this. " + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Stop)
    End Try

请注意,您通常需要以管理员身份运行才能更改系统日期或时间。

答案 1 :(得分:0)

您可能没有权限这样做......

调用进程必须具有SE_SYSTEMTIME_NAME权限。默认情况下禁用此权限。 SetLocalTime函数在更改本地时间之前启用SE_SYSTEMTIME_NAME权限,并在返回之前禁用该权限。

此处有更多内容......

http://msdn.microsoft.com/en-us/library/windows/desktop/ms717802(v=vs.85).aspx

答案 2 :(得分:-3)

只需使用此代码

即可
Today = "06/09/2015 06:09:06 PM"