PDA

View Full Version : راه حلی برای یک تابع API (تغییر ساعت سیستم)



Amir Taghavi
سه شنبه 31 مرداد 1385, 21:50 عصر
سلام


چطور میشه تاریخ سیستم رو تغییر داد.(کم ویا زیاد کرد)

M.GhanaatPisheh
پنج شنبه 02 شهریور 1385, 10:36 صبح
تغییر تاریخ سیستم از طریق Application های نرمال NET. امکان پذیر نیست و NET Framework. راه حلی را برای این مساله در نظر نگرفته.
شما باید از API های موجود استفاده کنید که از kernel32.dll در دسترس هست.
SetSystemTime همون API مورد نظر شماست.

[DllImport("kernel32.dll", SetLastError=true)]


[StructLayout(LayoutKind.Sequential)]
public struct SYSTEMTIME {
public short wYear;
public short wMonth;
public short wDayOfWeek;
public short wDay;
public short wHour;
public short wMinute;
public short wSecond;
public short wMilliseconds;
}

[DllImport("kernel32.dll", SetLastError=true)]
public static extern bool SetSystemTime( [In] ref SYSTEMTIME st );

Amir Taghavi
پنج شنبه 02 شهریور 1385, 13:30 عصر
سلام

یه دنیا ممنون تبدیلش کردم این شد:




<StructLayout(LayoutKind.Sequential)> _
Public Structure SYSTEMTIME
Public wYear As Short
Public wMonth As Short
Public wDayOfWeek As Short
Public wDay As Short
Public wHour As Short
Public wMinute As Short
Public wSecond As Short
Public wMilliseconds As Short
End Structure

<DllImport("kernel32.dll", SetLastError:=True)> _
Public Shared Function SetSystemTime(<[In]()> _
ByRef st As SYSTEMTIME) As Boolean
End Function

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

Dim s As SYSTEMTIME

s.wYear = 1990
s.wMonth = 2
s.wDay = 10
s.wDayOfWeek = 3
s.wHour = 4
s.wMinute = 15
s.wSecond = 25
s.wMilliseconds = 12

MsgBox(SetSystemTime(s))
End Sub

Amir Taghavi
پنج شنبه 02 شهریور 1385, 16:36 عصر
سلام

وقتی تاریخ رو تغییر می دم ساعت هم تغییر میکنه. چکار کنم که فقط تاریخ عوض بشه و ساعت سر جاش بمونه.

یا علی

M.GhanaatPisheh
جمعه 03 شهریور 1385, 14:15 عصر
ساعت جاری سیستم رو جاگزین ساعت موجود کنید.
در کل برای کسب اطلاعات بیشتر در ارتباط با تابع SetSystemTime یه سری به MSDN بزنید :
http://msdn2.microsoft.com/en-us/library/ms172517.aspx
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/sysinfo/base/systemtime_str.asp
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/sysinfo/base/system_time.asp
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wcecoreos5/html/wce50lrfgetsystemtime.asp

Amir Taghavi
جمعه 03 شهریور 1385, 19:54 عصر
ساعت جاری سیستم رو جاگزین ساعت موجود کنید.
در کل برای کسب اطلاعات بیشتر در ارتباط با تابع SetSystemTime یه سری به MSDN بزنید :
http://msdn2.microsoft.com/en-us/library/ms172517.aspx
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/sysinfo/base/systemtime_str.asp
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/sysinfo/base/system_time.asp
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wcecoreos5/html/wce50lrfgetsystemtime.asp


سلام همین کارو کردم ولی بازم ساعت تغییر میکنه. اگر سال رو 1985 کنم ساعت رو 4:30 دقیقه صبح میکنه.

M.GhanaatPisheh
جمعه 03 شهریور 1385, 20:18 عصر
Application خودتون رو اینجا Upload کنید.

Amir Taghavi
شنبه 04 شهریور 1385, 06:40 صبح
سلام

اینم App:

Amir Taghavi
شنبه 11 شهریور 1385, 05:32 صبح
سلام

کد زیر رو در نظر بگیرید:


<StructLayout(LayoutKind.Sequential)> _
Private Structure SystemDateTime
Public wYear As Short
Public wMonth As Short
Public wDayOfWeek As Short
Public wDay As Short
Public wHour As Short
Public wMinute As Short
Public wSecond As Short
Public wMilliseconds As Short
End Structure

<DllImport("kernel32.dll")> _
Private Shared Function SetSystemTime(<[In]()> _
ByRef st As SystemDateTime) As Boolean
End Function

Private MyDate As SystemDateTime

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

With MyDate

.wYear = 1985
.wMonth = 1
.wDayOfWeek = Now.DayOfWeek
.wDay = 1
.wHour = Now.Hour
.wMinute = Now.Minute
.wSecond = Now.Second
.wMilliseconds = Now.Millisecond
End With

Me.Text = SetSystemTime(MyDate)
End Sub


اگر سال رو به 1985 تغییر بدم تاریخ سیستم هم 1985 میشه. اما اگر ساعت رو به 8 تغییر بدم 8 ساعت به ساعت جاری سیستم اضافه میکنه. در این Method حتما باید تاریخ و ساعت رو وارد کنم تا Method بدرستی عمل کنه. حالا من میخوام فقط تاریخ سیستم تغییر کنه و ساعت جاری سیستم سر جاش بمونه آیا راه حلی به ذهنتون می رسه.(اگر ساعت جاری سیستم رو هم بدم(Date.Now) باز به همون اندازه به ساعت جاری اضافه میکنه)

Amir Taghavi
چهارشنبه 15 شهریور 1385, 06:34 صبح
لطفاً منو راهنمایی کنید!