BIOS pili saati ilerletmeyecek kadar bitmiş durumda bende bu saati güncelle demekten yoruldum, BIOS pili lehimli olmasa sökerdim ama işte, saati internet aracılığıyla güncel tutacak program biliyor musunuz?
Otomatik saat güncellemeyi kapatın. Saat dilimini +3 İstanbul seçin. Rar'dan dosyayı çıkarın. Yönetici olarak çalıştırın. 30 saniyede bir saatiniz güncellenir.
Kaynak kodları:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Net;
using System.Net.Sockets;
namespace zaman_guncelle
{
public partial class Form1 : Form
{
int sayac = 0;
[DllImport("kernel32.dll")]
public extern static uint SetSystemTime(ref SYSTEMTIME lpSystemTime);
[StructLayout(LayoutKind.Sequential)]
public struct SYSTEMTIME
{
public short Year;
public short Month;
public short DayOfWeek;
public short Day;
public short Hour;
public short Minute;
public short Second;
public short Milliseconds;
}
public Form1()
{
InitializeComponent();
guncelle();
timer1.Start();
}
void guncelle()
{
SYSTEMTIME zaman = new SYSTEMTIME();
zaman.Day = (short)(GetNetworkTime().Day);
zaman.Month = (short)(GetNetworkTime().Month);
zaman.Year = (short)(GetNetworkTime().Year);
zaman.Hour = (short)(GetNetworkTime().Hour);
zaman.Minute = (short)(GetNetworkTime().Minute);
zaman.Second = (short)(GetNetworkTime().Second);
zaman.Milliseconds = (short)(GetNetworkTime().Millisecond);
SetSystemTime(ref zaman);
textBox1.Text = GetNetworkTime().ToString();
}
public static DateTime GetNetworkTime()
{
const string ntpServer = "0.tr.pool.ntp.org";
var ntpData = new byte[48];
ntpData[0] = 0x1B; //LeapIndicator = 0 (no warning), VersionNum = 3 (IPv4 only), Mode = 3 (Client Mode)
var addresses = Dns.GetHostEntry(ntpServer).AddressList;
var ipEndPoint = new IPEndPoint(addresses[0], 123);
var socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
socket.Connect(ipEndPoint);
socket.Send(ntpData);
socket.Receive(ntpData);
socket.Close();
ulong intPart = (ulong)ntpData[40] << 24 | (ulong)ntpData[41] << 16 | (ulong)ntpData[42] << 8 | (ulong)ntpData[43];
ulong fractPart = (ulong)ntpData[44] << 24 | (ulong)ntpData[45] << 16 | (ulong)ntpData[46] << 8 | (ulong)ntpData[47];
var milliseconds = (intPart * 1000) + ((fractPart * 1000) / 0x100000000L);
var networkDateTime = (new DateTime(1900, 1, 1)).AddMilliseconds((long)milliseconds);
return networkDateTime;
}
private void timer1_Tick(object sender, EventArgs e)
{
sayac++;
if (sayac%30==0)
{
guncelle();
}
}
}
}
Her açtığınızda 1 kere yönetici olarak çalıştırsanız yeterli olacaktır. C# ile yaptım. Kodları da paylaştım. Sadece kendi bilgisayarımda (Windows 11) denedim.
Evet saat ilerlemeye başladı ama mesela görev yöneticisinde başlangıçtaki uygulamalar var onları etkinleştir yapıyoruz ve bilgisayarı açtığımızda açılıyor onu kastetmiştim mesela Steam'de internetli ama PC açıldığında oda açılıyor.
Evet saat ilerlemeye başladı ama mesela görev yöneticisinde başlangıçtaki uygulamalar var onları etkinleştir yapıyoruz ve bilgisayarı açtığımızda açılıyor onu kastetmiştim mesela Steam'de internetli ama PC açıldığında oda açılıyor.
Uygulamada yaptığım değişiklikler:
1. Uygulama setup haline getirildi.
2. Uygulama açıldığında simge durumuna küçültülmüş olarak başlayacak.
3. Bilgisayar açıldığında uygulamanın başlaması için kurulumdan sonra masaüstünde sistem açılış uygulaması olacak. Bu uygulamadan sistem açılışında uygulamanın başlaması için saat güncelleyici uygulaması seçilecek.
4. Uygulamaya yönetici hakları verildi.