2016-05-01 11 views
2
Sub change_the_time(ByVal NewDateTime As DateTime) 
     ' 
     Dim NewDateTime2 As DateTime 
     ' 
     NewDateTime2 = #5/1/2016 5:52:15 PM# ' try setting the time to this 
     ' 
     'set the system date and time to this date and time - throw an exception if it can't 
     Try 
      TimeOfDay = NewDateTime2 
     Catch ex As Exception 
      MessageBox.Show("Could not set time. " + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Stop) 
     End Try 
End Sub 

こんにちは。 サイトに新しいのでうまくいけば、私はルールに従います:-) 私の質問はどのようにシステム時間を変更するのですか?上記のコードは私がこのサイトで見つけたものです(私のプロジェクトの他の部分の多くの情報もあります - ありがとう!)、エラーはありませんが、例外は常にスローされます。私は管理者として実行し、私はUACを変更しようとしましたが、私はまだ時間を変更することはできません。私は、SE_SYSTEMTIME_NAME権限を設定する必要があることを読んだが、私はすべてのユーザ(すなわち私)に権限があるようにこのセットを持っている。 MS参照番号hereは、多くの洞察を提供していません。私はそれが特権の問題だと思うが、私は必要なものを設定する方法を見ることができないようだ。アプリケーションがシステム時間を値に変更するためには、何が必要ですか?動的にシステム時間を変更するwin7

さらに詳しい情報...同じ行に別の質問がありますが、それはVbではなく、私は以下のコードに似たものを試しました。まだ

Private Sub change_the_time2(ByRef NewDateTime As DateTime) 
    Dim d As DateTime 
    d = #6/10/2011# ' try setting the date to this before using NewDateTime 
    Dim worked As Boolean 
    ' 
    Try 
     worked = setlocaltime(d) 
     MsgBox(" 1. Did it work " & worked) 
    Catch ex As Exception 
     MsgBox(" 2. Did it work " & worked) 
    End Try 
End Sub 

<DllImport("kernel32.dll", setLastError:=True)> _ 
Private Shared Function setlocaltime(ByRef time As System.DateTime) As Boolean 

End Function 
+0

例外は何ですか? –

+0

こんにちはSuperPeanut、 "時間を設定できませんでした。システム時間を設定するためのセキュリティ権限が不十分です" –

+0

[システム日付をプログラムで変更する]可能な複製(http://stackoverflow.com/questions/650849/change-system-date-programmatically) –

答えて

1

これは、コメントに記載されているように本質的にはthis questionの複製です。しかし、その問題の答えの1あたりに、C#2にoposedとVB.NETのために明確にする:

Windows Vistaでは、7で、8 OSをこれは するために、UACプロンプトが必要になります必要な管理者権限を取得SetSystemTime関数を正常に実行します。

理由は、呼び出しプロセスに SE_SYSTEMTIME_NAME権限が必要なためです。 SetSystemTime関数は、 に、協定世界時(UTC)のSYSTEMTIME構造体が必要です。それ以外の場合は が動作しません。 /どのように あなたのDateTime値を取得しているところ、それは SYSTEMTIME構造体に対応する値を設定する前に)安全なそれを再生し、 ToUniversalTimeを(使用するのが最適かもしれませんによって

(VB.NET用に改造)コード例:

Dim tempDateTime As DateTime = GetDateTimeFromSomeService() 
Dim dateTime As DateTime = tempDateTime.ToUniversalTime() 

Dim st As SYSTEMTIME 
'All of these must be short 
st.wYear = dateTime.Year.ToInt16() 
st.wMonth = dateTime.Month.ToInt16() 
st.wDay = dateTime.Day.ToInt16() 
st.wHour = dateTime.Hour.ToInt16() 
st.wMinute = dateTime.Minute.ToInt16() 
st.wSecond = dateTime.Second.ToInt16() 

// invoke the SetSystemTime method now 
SetSystemTime(ByRef st) 

はい、あなたは管理者権限が必要です。

+0

ありがとう!エラーはコードではありませんでしたが、上記のコードに感謝しましたが、私が持っていたものよりも正確です。管理者として実行したときのコード。私は*私は*管理者としてコードを実行していたと思ったが、*適切なチェックはそうでなければ私に示した。ありがとうございました。 –

関連する問題