C# ile Ekran Görüntüsünü Alma(PrintScreen)

C# kodlarıyla printscreen işlemi ilk önce kulağa çok zor gelse de gayet basit bir yapısı var. Bir web form application ile bu işlemi gerçekleştirmeye çalışalım.

//Bütün sayfanın ekran görüntüsünü almak için kullanılan metod

private void PrintScreen()
{

Bitmap printscreen = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);
Graphics graphics = Graphics.FromImage(printscreen as Image);

graphics.CopyFromScreen(0, 0, 0, 0, printscreen.Size);

printscreen.Save(@”C:\Print\printscreen2.jpg”, ImageFormat.Jpeg);

}

//Aktif olan formun ekran görüntüsünü almak için kullanılan metod

private Bitmap Snapshot()
{
// bitmap nesnesi oluştur
Bitmap Screenshot = new Bitmap(this.Width, this.Height);

// bitmapten grafik nesnesi oluştur
Graphics GFX = Graphics.FromImage(Screenshot);

// ekrandan programın bulunduğu konumun resmini alalım
GFX.CopyFromScreen(this.Left, this.Top, 0, 0, this.Size);
return Screenshot;
}

Yukarıdaki metodları çağırmak için ben formuma buton yerleştirdim. Butonun click kısmında da metodları çağırdım. O kodlar da aşağıda bulunmaktadır.

private void button1_Click(object sender, EventArgs e)
{
PrintScreen();
Snapshot().Save(@”C:\Print\program_goruntusu.jpg”);

}

Yukarıdaki kodları kullanırken dikkat edilmesi gereken önemli bir husus resmin nerede olmasını istiyorsanız o adresin pathini doğru vermeniz.

Bu işlemi gerçekleştirmek için yararlandığım kaynak linkler şunlardır:

http://kodzilla.wordpress.com/2012/09/09/c-ile-programin-ekran-goruntusunu-alma-snapshot/

http://social.msdn.microsoft.com/Forums/vstudio/en-US/79efecc4-fa6d-4078-afe4-bb1379bb968b/print-screen-in-c

http://monolara.blogspot.com/

Asp.Net’te Mail Gönderme

.Net’te Mail gönderme işlemi çok sık kullanılan ve gayette kolay olan bir sistemdir.Hemen hemen bütün web sitelerinin hepsinde bu sistem kullanılır. Bu yüzden hemen projeyi yapmaya başlayalım.

Bu sistemi oluşturabilmek için ilk olarak Visual Studio’da bir Web Servis açmalısınız.

Daha sonra bu web servise aşağıdaki resimdeki gibi bir arayüz oluşturmalısınız. Ben bu arayüzü Html table,buton,label ve textArea kullanarak oluşturdum.

Image

Arayüzümüz hazır olduğuna göre artık kodlama kısmına geçebiliriz. Bu yüzden Send Message isimli butonumuzun Click eventine aşağıdaki kodları yapıştırıyoruz. Aşağıdaki kodların çalışması için ilk olarak

using System.Net;
using System.Net.Mail;

bu iki kütüphaneye dahil etmeniz gereklidir.

             MailMessage e_posta = new MailMessage();
            //yeni bir  mailmesage nesnesi tanımladık
            e_posta.From = new MailAddress("gamzepolat77@gmail.com");
            //from method'u mesajın kimden gönderilecegini
            e_posta.To.Add(email.Text);
            //mesaj gönderilecek kişilerin bilgilerini To.Add method'u saysinde ekledik bu birden fazlada olabilir
            e_posta.Subject = subject.Text;
            //Subject method'uyla konu ne olacagını atadık
            e_posta.Body = message.Text;
            // body method'u sayasinde icerik kısmının text öazelligine yazılan metni atamış olduk
            e_posta.IsBodyHtml = true;
            SmtpClient smtp = new SmtpClient("smtp.gmail.com");
            smtp.EnableSsl = true;
           smtp.UseDefaultCredentials = false;
            smtp.Credentials = new NetworkCredential("gamzepolat77@gmail.com", "12345");
           //gönderenin mail adresi ve şifresini girmiş olduk.
            smtp.Port = 587;
            try
            {
                smtp.Send(e_posta);
                Response.Write("// ");
            }
            catch(Exception exp)
            {
                Response.Write(exp);
                Response.Write("// ");
            }

Bu sistemi uyguladığınız da düzgün bir şekilde çalıştığını göreceksiniz.Eğer “the remote certificate is invalid according to the validation procedure” şeklinde bir hata alırsanız bunu da mail gönderme işlemi yapmadan önce

“//  ServicePointManager.ServerCertificateValidationCallback = delegate(object s, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) { return true; };”

yukarıdaki kodu yazarsanız çalışır.Ancak bu kod nerdeyse bütün güvenliği ortadan kaldırdığı için çok tavsiye edilen bir yöntem değildir.

“Cross-thread operation not valid: Control ‘progressBar1’ accessed from a thread other than the thread it was created on.” Hatası

Eğer Formunuzda Progressbar kullanırken böyle bir hatayla karşılaşıyorsanız Formun constructor kısmına 

“CheckForIllegalCrossThreadCalls = false;” yazmanız yeterlidir.

public Form1() {
CheckForIllegalCrossThreadCalls = false;
InitializeComponent();
}

Yukarıdaki kod parçasını yazdığınızda sorun ortadan kalkmış olacaktır.

LinqPad nedir?

Linq ile uğraşanlar için çok yardımcı olabilecek bir tooldur. Özellikle karmaşık linq sorgularını kod içerisinde değil de sadece linq sorgumuzun doğru olup olmadığını test etmek için kullanabileceğimiz yararlı bir araçtır. Linqpad’i kullanırken makinemizdeki veritabanlarını sisteme dahil edip onlar üzerinden gerekli sorgulamaları yapabiliriz.
Kurulumunun da gayet kolay olduğu toolu      http://www.linqpad.net/  adresinden kolayca indirebilirsiniz.

“unable to create a constant value of type ‘system.object’. only primitive types” Hatası

Eğer projenizde linq kullanırken “unable to create a constant value of type ‘system.object’. only primitive types” böyle bir hata alıyorsanız.Bu hatayı şu şekilde çözebiliriz.

Mesela aşağıdaki kod parçasını Equals yerine “==” şeklinde değiştirirseniz,sorunu halletmiş olacaksınız.

var query1 = from p in harmonyEntities.VDB_ASSET_INFORMATIONS
where p.PRM1.Equals(1) && p.GUID_PARENT.Equals(item.GUID) &&
p.GUID_TYPE.Equals(typeId)
select p;

Düzeltilmiş hali:

var query1 = from p in harmonyEntities.VDB_ASSET_INFORMATIONS
where p.PRM1==1 && p.GUID_PARENT==item.GUID &&
p.GUID_TYPE==typeId
select p;

Jira nedir??

 

Jira dediğimiz kavram tam olarak yazılımcıların elinden çıkmış olan ve Java platformunda çalışan,açık kaynak kodlu iş, istekhata takip ve yazılım proje yönetim aracıdır.

Başarısını kanıtlamış olan Jira hızlı proje yönetimi,kolay iş takibini, çalışan performans ölçümünü gerek grafiklerle gerekse de rakamlarla karşımıza çıkarır.Değiştirilebilir özel filtreler, ayarlanabilir iş takip grafikleri ve kullanıcıyı bilgilendiren otomatik bildiri e-postaları gibi özellikleri ile kullanıcılarına büyük fayda sağlıyor.

Hata takibini rahatça yapmamızı sağlayan Jira çok karmaşık hataları ve çözümleri ,düzenli bir şekilde bulmamızı kolaylaştırır. Düzeltilmesi gereken hataların kritiklik düzeyini bile görmemizi sağlar.

 

Daha detaylı bilgiyi http://jiraturkiye.com/ adresinden öğrenebilirsiniz..

“Arguments cannot have explicit memory specificator” Hatası

Gömülü sistem ile uğraşan arkadaşların karşılaşacağı bir problem de “Arguments cannot have explicit memory specificator”
hatası olabilir bu hatanın nedeni ise kullandığınız derleyicideki keywordlerden birini değişken olarak kullanmaya çalışmanızdır.
Mesela ben Micro C derleyicisine “data” isimli bir değişken verince böyle bir sorunla karşılaşıyorum. Eğer değişkenin ismini değiştirirseniz bu hata ortadan kalkacaktır.

I2C Haberleşmesi Kullanılarak Sıcaklığı Lcd’de Yazdırma

İlk olarak ı2c modülünün ne olduğunu anlatarak başlayalım.
i2c Inter-Integrated Circuit ifadesinin kısaltması olup, iki tel arayüz olarak anılır. i2c protokolü philips firması tarafından bulunmuş olup, düşük hızlı çevre birimlerini birbirine bağlamak için kullanılır.Dijital sistemlerde kablolu seri haberleşme ile ilgili birçok standart vardır. SPI, I2C bunlara örnek olarak verilebilir.I2C protokolünde temel olarak iki hat vardır. Bunlar SCL ve SDA olup, SCL (SerialCLock) veri senkronizasyonu için kullanılan clock darbeleri hattı, SDA (SerialDAta) ise veri hattıdır.

Genel bir bilgi verdikten sonra projemiz de ne yapacağımızdan bahsedelim.Projemizin amacı i2c protokolünü kullanıp TC74 sensörüyle sıcaklığı Lcd ekrana yazdırmak.
Bununiçin ilk olarak aşağıdaki şemayı isisde çizmemiz gerekmektedir.

sicaklik

Kodlarımız da aşağıdaki şekildeki gibi olursa Lcd de Tc74 ile alınan sıcaklık değerini görebiliriz.

Kodlarımız şu şekildedir:

unsigned short temp;

sbit LCD_RS at Rb0_bit;
sbit LCD_EN at Rb1_bit;
sbit LCD_D7 at Rb7_bit;
sbit LCD_D6 at Rb6_bit;
sbit LCD_D5 at Rb5_bit;
sbit LCD_D4 at Rb4_bit;

sbit LCD_RS_Direction at TRISb0_bit;
sbit LCD_EN_Direction at TRISb1_bit;
sbit LCD_D7_Direction at TRISb7_bit;
sbit LCD_D6_Direction at TRISb6_bit;
sbit LCD_D5_Direction at TRISb5_bit;
sbit LCD_D4_Direction at TRISb4_bit;

void main() {
char temperature[6];
Lcd_Init();
Lcd_Cmd(_Lcd_Cursor_Off);

while(1){

I2C1_Init(10000);
I2C1_Start();
I2C1_Wr(0x92);
I2C1_Wr(0x00);
I2C1_Repeated_Start();
I2C1_Wr(0x93);
temp=I2C1_Rd(0);
shorttostr(temp,temperature);
I2C1_Stop();
Lcd_Out(1,2,”sicaklik”);
Lcd_Out(2,2,temperature);

delay_ms(10);
}
}

Micro C’de “Demo Limit” Sorunu

MicroC’nin demo sürümünü kullananlar böyle bir hatayla karşılaşabilirler.Özellikle de mmc ile programlama yapılıyorsa böyle bir sorunla karşılaşılması mümkün.Demo sürümü bize sadece 2k okuma ve yazma sınırı veriyor.Eğer bu limiti geçerse MicroC programı derlemez.

Peki biz böyle Ram’in yetmediği durumda ne yapacağız?

Demo sürümünü cracklayıp kullanacağız.Cracklama işlemi çok basit.

HIDDongleDLL.dll dosyasını MicroC nin kurulu olduğu dizinde aynı isimle dosyayla yer değiştireceğiz.

Crack dosyasını buradan paylaşamıyorum.Bu yüzden ihtiyacınız olursa mail yoluyla size ulaştırabilirim.

Pwm Modülünün Osiloskop’da Gösterimi

İlk olarak pwm modülü ile ilgili bilginiz yoksa bu modülle ilgili bilgi alabileceğiniz linki aşağıda veriyorum.

https://dosya.sakarya.edu.tr/Dokumanlar/2013/440/125663773_h5_mikro_ii.pdf

16F877A işlemcisine entegre olan pwm modülünün osiloskopta kare dalga formatında gösterme işlemini yapacağız.

Bu işlem için  gerekli modülleri bulabileceğiniz isis görüntüsü şu şekilde olmalıdır.

isisİsis’de yaptığımız programı kısaca anlatayım.Yukarıdaki butona basıldığında duty cycle’ı arttırıyoruz.Aşağıdaki butona bastığımız da ise duty cycle azaltılıyor.Peki osiloskopun en üstteki girişine neden bağlıyoruz?Çünkü kare dalga formatında çıkış istedik.

Ayrıca  Osiloskobu 16F877A işlemcisinin pwm entegresine bağlıyoruz.

Duty cycle dediğimiz ise iş süresidir.İş süresi ile pals genişliği ayarlanır.

Micro c kısmı ise şu şekilde olmalıdır.
int duty_cycle=100;
int okunan_deger=50;
void main()
{

ADCON1=7;
CMCON=7;
TRISC=0;
portc=0;
PortA.RA0=0;
PortA.RA1=0;
porta.ra2=0;
PWM1_Init(5000);
PWM1_Start(); // start PWM2
PWM1_Set_Duty(duty_cycle);
while(1)
{
if(PORTA.RA0==1)
{
duty_cycle++;
PWM1_Set_Duty(duty_cycle);
}
if(PORTA.RA1==1)
{
duty_cycle–;
PWM1_Set_Duty(duty_cycle);
}
if(porta.ra2)
{
okunan_deger=ADC_Read(2);
PWM1_Set_Duty(okunan_deger);

}

}

}