Anasayfa » Forum

C# İle bilgisayar t...
 

[Çözüldü] C# İle bilgisayar tarih biçimini değiştirme ?  

  RSS
Murat Gültekin
(@muratgultekin)
Üye

Merhabalar,

Kurumsal firmamızda bir bilgisayarımızda kullandığımız bir program tarih formatını 20/07/2019 biçiminde değiştiriyor otomatik olarak. C# ile yazdığım bir programda ise 20.07.2019 tarih biçimine getirebiliyorum. Fakat fonksiyonlar bozuluyor. Hiç bir programda tarih kısmı çalışmamaya başlıyor. Kullandığım kodlar şu şekilde :

RegistryKey regkey = Registry.CurrentUser.OpenSubKey(@"Control Panel\International", true);
regkey.SetValue("sShortDate", dateTimePicker1.Text.ToString());
regkey.SetValue("sLongDate", dateTimePicker1.Text.ToString());

dateTimePicker1'in tarih formatı dd.MM.yyyy şeklinde.

Yardımlarınızı bekler iyi çalışmalar dilerim...

Alıntı
Gönderildi : 20/07/2019 11:06 am
Enis CIFTCI
(@EnisCIFTCI)
Üye

Merhaba,

Windows 7 ve Windows 10 sistemlerinde DateTime bir Struct olarak tanımlanmıştır. Buna ilişkin olarak bu adresteki örneklerde genel olarak bir "kernel32.dll" import ediliyor ve değişken referans edilerek aktarılıyor. Geçmişte örneklerin bulunduğu adresteki yöntemlerle proje ve test'i üzerinde sorunlar yaşamıştım. Bu sorunlar arasında kodların değişimi sağlamasına karşın sistemin değişimi yapmaması veya değişimi gecikmeli yapması gibi tecrübelerim de sabit. Ancak dikkat edilmesi gerekenlerin başında UAC ayarları, ayrıcalıklı işlem yetkisinin olması gerektiği ve özellikle güvenlik programlarının ayarlanması gibi konuları da söylemek istiyorum.

Verdiğim linkteki öneriler arasında;

1) Win32 API import edilerek kullanılması (kernel32.dll ve SetSystemTime fonksiyonu kullanılması ki bu da ayrıcalıklı işlem gerektiriyor),
2) WMI kullanılması
3) C# kodları vasıtasıyla komut satırından ayrıcalıklı olarak bir process yardımıyla değiştirmeye çalışmak.

Ayrıca aşağıda gecenin geç saatleriyle birlikte yaşanmış bir tecrübeden gelen nacizhane fikrimide akarmak istiyorum.

regkey.SetValue("sShortDate", dateTimePicker1.Value.ToBinary(), RegistryValueKind.QWord);

Umarım sorunuzu yanlış anlamadım.

Saygılarımla

 

CevapAlıntı
Gönderildi : 23/07/2019 3:05 am
Murat Gültekin
(@muratgultekin)
Üye

@EnisCIFTCI

Öncelikle cevabınız için çok teşekkür ederim.

Problemimi şu şekilde sizin verdiğiniz fikir ile çözdüm;

private const int WM_SETTINGCHANGE = 0x001A;
private const int LOCALE_SSHORTDATE = 31; //'short date format string
private const int LOCALE_SLONGDATE = 32; // 'long date format string

[System.Runtime.InteropServices.DllImport("kernel32.dll", ExactSpelling = true, EntryPoint = "GetUserDefaultLCID")]
private static extern int GetUserDefaultLCID();
[System.Runtime.InteropServices.DllImport("kernel32.dll", ExactSpelling = true)]
private static extern long SetLocaleInfoA(int newLCDID, int constDate, string newFormat);

private void Form1_Load(object sender, EventArgs e)
{

    string sNewFormat1 = "dd.MM.yyyy";
    string sCultureFormat = "";
    string strDateFormat = new string('1', 25);
    string[] strDateTimeArray = DateTimeFormatInfo.CurrentInfo.GetAllDateTimePatterns();
    sCultureFormat = strDateTimeArray[0].ToString();
    if (Convert.ToString(sNewFormat1) != Convert.ToString(sCultureFormat))
    {
    int intP = GetUserDefaultLCID();
    SetLocaleInfoA(intP, LOCALE_SSHORTDATE, sNewFormat1);
    SetLocaleInfoA(intP, LOCALE_SLONGDATE, sNewFormat1);
    }

    timer1.Enabled = true;
}

CevapAlıntı
Gönderildi : 23/07/2019 9:18 am
Paylaş:
  
Çalışıyor

Lütfen Giriş yap yada Kayıt ol