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;

Facebook Api Key Nedir?Nasıl alınır?

Bir çoğumuzun yabancı olduğu facebook api key,facebookta uygulama geliştirmek için veya yaptığınız uygulamayı Facebookla senkronize etmeye yarayan bir paroladır.Mesela sitenize facebookla bağlan butonu koyacaksanız bunun için facebook api keyi kullanmalısınız.

Peki bu facebook api key nasıl alınır?

https://developers.facebook.com adresine facebook adresinizle girip

App Id ve App Secret bilgilerinizi kolayca alabilirsiniz.

AdsızYukarıdaki görüntüyü kolayca elde edebilirsiniz.

 

“No connection string named ” ” could be found in the application config file” Hatası

Eğer Visual Studio kullanıyorsanız ve projenize veritabanınızı dll olarak eklemek istiyorsanız bu hatayla çok sık karşılaşabilirsiniz.

İster servislerle istersede normal bir console uygulamasında projeyi geliştirmeye çalışın bu hatayla sıkça karşılaşabilirsiniz.Bu hata sizin dll’e dahil ettiğiniz entityi projenin tanımadığını gösterir.Yani benim dll’deki entity ismin Adres_Defteri_Entity olsun hatamız

No connection string named “Adres_Defteri_Entity”  could be found in the application config file.

olarak karşımıza çıkacaktır.

Peki bunu nasıl çözeriz? Tabiki config dosyasını düzenleyerek. dll de kullanılan config dosyasını aynen kopyalayıp kendi projemizin içindeki config dosyasını düzgün bir şekilde yerleştirirseniz bu hatadan kurtulabilirsiniz.

Karşılaştığım hataları blogumdan paylaşmaya devam edeceğim.

DevExpress Nesnelerinin Toolbox’da Görünmemesi

Devexpress’i kurmanıza rağmen Visual Studio’da toolboxda Devexpress toolları  görünmüyor olabilir.Onun için Başlat/Tüm Programlar/Devexpress/Tools’ un içine girip ToolboxCreator’ı çalıştırmanız gerekir.

Eğer çalıştırdığınız halde şöyle bir hata alıyorsanız “command line arguments empty” devExpress Klasörünün içinde toolbox creator nesnesini kopyası yoktur.Kopyalayıp yapıştırdığınızda sorun çözülmüş olacaktır.

Ha unutmadan söyleyeyim bütün bu işlemleri Visual Studio kapalıyken gerçekleştirmelisiniz 🙂

DevExpress Nedir?

DevExpress .net platformunun bir componentidir. .Net  platformu ile uygulama geliştirenler için
 görsel açıdan çok iyi düzenlemeler sağlar. Bir web sayfası yapılırken veya formlarda kontrollerin yetersizliğini ortadan kaldırır.
DevExpress in açılımı Developer Express’tir.Ancak sağladığı bu kadar yeniliğe karşı ücretli.
Ücretsiz kullanmak isterseniz 30 günlük deneme sürümünü kullanabilirsiniz.
Veya Platforma alışmak istiyorsanız
web sitesinden demolarını indirip platforma alışabilirsiniz.Daha sonrada 30 günlük deneme sürümünü yükleyip yapmak istediğiniz projeyi geliştirebilirsiniz.
ASP.NET ve Windows Forms uygulamaları için bir çok kontrolü içerisinde barındırır.Bu yüzden gerçekleştirmek istediğiniz projeyi DevExpress ile gerçekleştirmeniz işinizi kolaylaştıracaktır.

DevExpress’in deneme sürümünü indirmek için aşağıdaki linki kullanabilirsiniz.

http://www.devexpress.com/Home/Try.xml

WCF Veritabanı Sorgulama İşlemleri(Select,Insert)

İlk olarak yeni bir proje açıp resimde bulunan işlemi gerçekleştiriniz.Image

Bu işlemi gerçekleştirdikten sonra projemize Solution Explorer penceresinden Add ile databasemizi ekliyoruz.Bu işlem Ado.Net yazımda da belirttiğim şekilde gerçekleştirebilirsiniz.Artık veritabanımızda projemizde olduğuna göre servislere el atabiliriz.

Servislerin 2 bölümü var.Bir bölümünde class tanımlamalarımızı yapıyoruz diğer interface kısmında ise classta tanımladığımız metodları çağırıyoruz.Classların public olmasına dikkat etmeyi unutmayın 🙂

Kodlama kısmına geçersek ben Adres_Defteri veritabanımda olan Firma ve Yetkili tablomdaki verileri görmek istiyorum.Bunun için aşağıdaki kodları yazdım.Databasemde bulunan Firma tablomun hepsini birden çekemediğim için bu tabloya serileştirme işlemi gerçekleştirdim.Bu işlemi ilk defa duyanlarınız olabilir bende ilk defa kullandım.Projemize class ekleyip bu classın içini de şu kodlarla doldurdum.

[DataContract]
public class CExternalFirm
{

[DataMember]
public System.Guid FirmaId { get; set; }

[DataMember]
public string Unvani { get; set; }

[DataMember]
public string Durum { get; set; }

[DataMember]
public string Aciklama { get; set; }

[DataMember]
public Nullable<System.DateTime> Kurulus_tarihi { get; set; }
}

Sizde bu kodlara göre kendi veritabanı verilerinize göre düzenleyip projenize entegre edebilirsiniz. Daha sonrada verileri çekebilmek için metodumuzun içini dolduruyoruz.

public List<CExternalFirm> GetDataFirma()
{
Adres_DefteriEntities Ad = new Adres_DefteriEntities();
var query = from p in Ad.Firma
select new CExternalFirm{
FirmaId = p.Firma_id,
Unvani=p.Unvani,
Aciklama=p.Aciklama
};
return query.ToList();
}

Böylece istediğiniz tablonun verilerini çekebilirsiniz.

Veritabanımıza veri ekleme işlemini gerçekleştirmek içinde aşağıdaki kodalrdan yararlanabilirsiniz.

public void PostDataFirm(Guid Firma_id, String Adi, String Aciklama,String Durum)
{
Adres_DefteriEntities Ad = new Adres_DefteriEntities();
Firma frm = new Firma();
frm.Firma_id = Firma_id;
frm.Durum = Durum;
frm.Unvani = Adi;
frm.Aciklama = Aciklama;
Ad.Firma.Add(frm);
Ad.SaveChanges();

}

Bu işlemleri gerçekleştirdikten sonra çalıştırdığınızda ekranınıza gelecekleri resimlerle anlatmaya çalışacağım.

Image

ImageImage

Image

Böylece Wcf ile de veritabanı işlemlerini gerçekleştirmiş bulunuyoruz.Umarım yardımcı olmuşumdur.