Coder

25 Aralık 2011

Demo süreli program yapma

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;

Uygulama ilk çalıştığı an itibariyle 10 günlük olup, doğru aktifleştirme kodu girildiğinde süresiz çalışan yazılım.

Ç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;

[cc lang="c#"]

using Microsoft.Win32; //Eklemeyi unutmayalım !!

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ış"); } } [/cc] Not : Kopyala yapıştır yapıldığında Form1_Load_1, button4_Click kısımlara göz ardı etmenizi isterim.

İşlemlerimizin çoğu formload kısmında gelişmekte. Sadece aktif etmek için buton kullanıldı. İlk olarak CurrentUser içindeki Software anahtarı içine Coder adında anahtar oluşturduk. “Aktif” isimli anahtarı koşullandırıp devam ettik (aktif anahtarı doğru aktivasyon kodu girdiğimizde oluşmakta tekrar değineceğim konuya). Ardından “Sonkullanma” isimli anahtarın var olup olmadığını kontrol edip yoksa 10 gün sonrası tarihe Registry’a kayıt ettik(programımız 10 günlük olduğu için). Eğer daha önceden eklenmiş ise Registry’dan değeri okuyarak bugününün tarihini çıkardık. 0 veya küçük ise gerekli işlemi yaptırdık.

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…

Powered by WordPress