Ich versuche, meine Systemzeit mit dem folgenden zu aktualisieren:
%Vor%Wenn ich debugge, sieht alles gut aus und alle Werte sind korrekt, aber wenn es die Win32SetSystemTime (ref systime) aufruft, ändert sich die tatsächliche Zeit des Systems (Anzeigezeit) nicht und bleibt gleich. Der seltsame Teil ist, dass wenn ich die Win32GetSystemTime (ref systime) aufrufen, gibt es mir die neue aktualisierte Zeit. Kann mir jemand dabei helfen?
Ein Teil Ihres Problems besteht darin, dass Sie einige falsche PInvoke-Signaturen haben. Am bemerkenswertesten SetSystemTime sollte einen nicht void Rückgabewert haben. Hier ist die richtige Signatur
%Vor%Mein Verdacht ist, dass die Sperre eines Rückgabewerts den Stack durcheinander gebracht hat und die Funktion SetSystemTime im Wesentlichen mit schlechten Daten endete.
Nach dem Code, den Sie dort haben, erhöhen Sie nicht die Stunde. Es sieht so aus, als ob Sie Ihre Systemzeit exakt auf die gleiche Zeit einstellen, als Sie Win32GetSystemTime aufgerufen haben.
Versuchen Sie:
%Vor%Dies funktioniert Es funktioniert korrekt für lokale Zeitzone.
Keine Notwendigkeit für P / Invoke - es gibt einen einfacheren Weg (aber nicht gut bekannt), der von der Microsoft.VisualBasic Assembly verfügbar ist. Wenn Sie in C # sind, denken Sie daran, einen Verweis hinzuzufügen.
Sie können die Klasse Microsoft.VisualBasic.DateAndTime
verwenden, um das Datum oder die Uhrzeit abzurufen und zu ändern. Die Eigenschaften Today
und TimeOfDay
haben Setter, die die Änderungen an Datum oder Uhrzeit vornehmen.
Sie benötigen weiterhin die entsprechenden Berechtigungen. Weitere Informationen finden Sie im folgenden MSDN-Dokumentationslink.
Hier ist ein beliebiges Beispiel, um die Zeit zu ändern:
%Vor%Referenz auf MSDN: Ссылка
Sie haben nur ein Privilegienproblem, wenn ich dieses Programm ohne Privilegien ausführe, ändert es nicht das Datum, aber wenn ich rechts auf das Programm klicke und auf als Administrator rufe, funktioniert es!