Başlığı ilgi çeksin diye biraz karıştırdım. Özür dileyerek karşılığında size ilgi duyacağınız bilgiler paylaşmak istiyorum. Bir yazılımcı yazdığı programı kullanıcıya tanıtmak için demo veya kısıtlı süreli ücretsiz verir. Örneklerini her yerde görebiliriz(30 günlük antivirüs prog vs.). Kullanıcı memnun kaldığında parasını ödeyerek yazılımın serialini yani aktifleştirme kodunu satın alır. Sınırsızca veya belirli sürede kullanır vs vs.. Senaryoyu kafanızda canlandırmış sınızdır umarım. Fazla uzatmadan konuya dalmak istiyorum.

Basitçe bir form ekranına biraz afilli gözükmesi için resimdeki gibi 2 Label, 1 Progress Bar, 1 Buton ve son olarak aktifleştirme kodu girmek için 1 adet Textbox(janjanlı gözüksün diye maskedtextbox kullandım) yerleştirerek uygulamamıza başlayabiliriz. Senaryomuz şöyle ki;
Çalışma mantığı, çoğu süreli programın mantığına benzemekte. Hackerlar iyi bilir bu mantığı, nedenin soracak olursanız yapacağımız programda bu klasik yöntem ile gelişmekte. Ama o kadar da kolay kırılabilen programcık olamayacağını söyleyebilirim. Temelinde registry etkileşimi yatmakta.
Program ilk defa açılır açılmaz Registry’a bir anahtar ve alt anahtar oluşturup diğer günlerde açıldığında ilk atadığımız anahtarı baz alarak kalan süreyi kontrol edip belirtmek. Süre bittiğinde de öngörülen işlemi yapmak. Doğru aktifleştirme kodu girildiğinde ise ilk açıldığında kayıt edilen anahtarı silerek, bundan sonraki açılışlarında kontrol etmeden süresiz çalışmak.
Registry ilgili ilk örneğiniz ise bu(Csharp registry işlemleri) yazımı incelemenizde fayda olacak. Anladığınızı umarak direk kodlara dalıyorum;
RegistryKey anahtar = Registry.CurrentUser;
private void Form1_Load_1(object sender, EventArgs e)
{
anahtar = anahtar.CreateSubKey("Software\\Coder");
if ((anahtar.GetValue("Aktif") != null))
{
label1.Text = "Program aktif edilmiş";
txtserial.Enabled = false;
txtserial.Text = "4-8-15-16-23-42";
}
else
{
if (anahtar.GetValue("Sonkullanma") == null)
{
label2.Text = "Yazılımı aktif edilmesi için 10 gün kaldı...";
anahtar.SetValue("Sonkullanma", DateTime.Now.AddDays(10), RegistryValueKind.String);
anahtar.Flush();
}
else
{
DateTime dt1 = Convert.ToDateTime(anahtar.GetValue("Sonkullanma"));
DateTime dt2 = Convert.ToDateTime(DateTime.Now.AddDays(0));
TimeSpan fark = dt1 - dt2;
int sonuc = Convert.ToInt32(fark.Days);
if (sonuc <= 0)
{
MessageBox.Show("Süre Bitti");
progressBar1.Value = 100;
}
else
{
label2.Text = "Aktivasyon için " + Convert.ToString(sonuc) + " gün kaldı";
switch (sonuc)
{
case 1:
progressBar1.Value = 90;
break;
case 2:
progressBar1.Value = 80;
break;
case 3:
progressBar1.Value = 70;
break;
case 4:
progressBar1.Value = 60;
break;
case 5:
progressBar1.Value = 50;
break;
case 6:
progressBar1.Value = 40;
break;
case 7:
progressBar1.Value = 30;
break;
case 8:
progressBar1.Value = 20;
break;
case 9:
progressBar1.Value = 10;
break;
}
}
}
}
}
private void button4_Click(object sender, EventArgs e)
{
if (txtserial.Text == "4-8-15-16-23-42")
{
anahtar.SetValue("Aktif", 3, RegistryValueKind.String);
anahtar.Flush();
Application.Restart();
}
else
{
MessageBox.Show("Girilen anahtar yanlış");
}
}
Not : Kopyala yapıştır yapıldığında Form1_Load_1, button4_Click kısımlara göz ardı etmenizi isterim.
Progressbar ile kalan gün sayısını Registry’dan okuyarak switch case sayesinde doldurduk. Bu arada doğru kodu girdiğimizde ilk açıklama da belirttiğim “Aktif” anahtarını Registry’daki anahtarımızın içine kayıt ettik. Programı tekrar çalıştırmak, tamamen aktifleştirmek için Application.Restart() metodunu kullandık.
Şifre Lost hayranları için tanıdık gelebilir. Konumuza geri dönersek, bu uygulama ile Registry’a veri kayıt edip okuma, iki tarih arası fark alma, istenilen bir sonraki tarihi gösterme, tarihin sadece gün kısmını alma, switch case ile progressbar doldurma gibi birçok örneği de beraberinde kullandık.
Genel olarak demo, kısıtlı bir program yazmak için yapmanız gereken işlemler bu şekilde. Güzel bir makyaj ile uygulamayı daha tatlı hale getirebilirsiniz. Bir sonraki yazıda görüşmek dileği ile…
Bunlar da ilginizi çekebilir :
Windows'un programları çalıştırma veritabanı Registry, login isteyen uygulam ...
Registry, Windows'un çalışması ve çalıştırması gereken veritabanı diyebiliri ...
JavaScripte yeni başlayanlar için basit bir kaç örnek sunmak istiyorum. Rast ...
Combobox'daki itemlara göre işlem yaptırabilir. En bilindik örneği hatırlars ...
Bir önceki yazıda(Bugünün tarihi ve saati gösterme) uygulamasını biraz daha ...
Emeye saygi. Hocam tesekkurler. Ama bi siy var. PC -nin tarihini geriye ceksen proje yeniden calismaya basliyor.Bu nasil yapalim? Yardimci olursunuz sevinirim.
doğrudur, tarihi geriye çektiğimizde program çalışmaya başlıyor. Çoğu antivirüs programları bu mantıkta çalışıyor + tarihi geri çeken kullanıcı msn gibi network bağlantısı isteyen programları eski tarihten dolayı kullanamaz böylelikle bizim programımızda halt edememiş oluyor…
Selamlar;
ama bu kodlara tarihi textbox10.text den okumasını sağlatamadım.
Tarihi sistem yerine textbox10.text den okutmak istiyorum (textbox10.text tarihi netten alıyor)
Sebebide kullanıcının kendi pc tarihi ile oynayıp hile yapmaması