VB.NET Get Application ScreenShot


Öncelikle bu başlığı biraz açıklamak lazım 🙂

Müşterileriniz için bir uygulama geliştiriyorsunuz. Müşteriniz sizden geliştirdiğiniz bir uygulamada bir GridView içinde verileri görmek istedi. Buraya kadar her şey normal fakat ya şöyle bir geliştirme isterse;

Müşteri, bu GridView’da listelenen verilerin fotoğrafını(PrintScreen) alıp Mail olarak bir çalışanına göndermek istediğini söylerse..

Tabii ki doğal olarak müşteriye şunu deriz. Bak müşteri ! 🙂 klavyende bir PrintScreen tuşu var ona bas sonra nereye yapıştırmak istersen oraya yapıştır ! 🙂

Tabii bizim bu atağımıza karşı kullanıcıda hazırlıklı, ama ben sadece uygulama penceresinin görüntüsünü almak istiyorum, diyebilir. 🙂

Sizde boş durmayıp, “o zaman demin gösterdiğim PrintScreen tuluna ALT tuşu ile beraber basarsan, sadece aktif olan pencerenin resmini çekmiş olursun” deriz. Sonrada istediğin yere yapıştır bunu diyebiliriz.

Fakat ya müşteri bunu bile sorun yaparsa, yada 1500 çalışanı olan bir şirkette bu işlemi herkese anlatmak zorunda kalsanız. Bunu anlayamayacaklar ‘da olacaktır. 🙂 Bu işin ayrı boyutu 🙂

İşte bu durumda sizde Form’unuza bir buton koyup “Uygulama Resmi Çek !” isminde bir başlık vermiş ve arka planında meşhur “Click” olayına kod yazarken kendinizi bulabilirsiniz. 🙂

İşte size bu konuda bir çözüm..

Öncelikle çekilen resimleri kullanıcıya gösterebileceğimiz bir genel kullanımlık bir form oluşturalım..

İşte form görüntüsü hadi oluşturun..


Buradaki tüm kontrollerin “Modifiers” özelliğini “Public” olarak ayarlayalım ki, bu form’u kullandığımızda kontrollere kolayca erişebilelim.

Bir de bir Timer kontrolünü form’a sürükleyip bırakalım..

Arka planında ise şu kodu yazalım..

Public
Class f_GetClipboardImage

Private
Sub f_GetClipboardImage_Load(ByVal sender As
Object, ByVal e As System.EventArgs) Handles
Me.Load

Me.tmrLoadImage.Enabled = True

Me.tmrLoadImage.Start()

End
Sub

Private
Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tmrLoadImage.Tick

If (My.Computer.Clipboard.GetImage() IsNot
Nothing) Then

Me.PictureBox.Image = CType(My.Computer.Clipboard.GetImage(), System.Drawing.Image)

Me.tmrLoadImage.Stop()

End
If

End
Sub

End
Class

Artık bu form’u istediğiniz form ya da class’dan çağırıp kullanabilirisiniz. Tabii ScreenShot işlemini bu formu’u çağırmadan “Show” etmeden önce gerekleştireceğiz. Sonra da çektiğimiz resmi bu form içindeki “PictureBox” içinde göstereceğiz. Yan tarafına da istediğimiz açıklamayı yazarak kullanıcıya yön göstereceğiz.

Kontrollerin “Modifiers” özelliğini “Public” ayarladığımız için kolayca form üzerindeki kontrollere erişebileceğiz ve bu kontrollerin olaylarını da kullanabileceğiz.

İşte Resim çekme kodu ve form’da çekilen resmi gösterme..

Private
Sub btnScreenShot_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnScreenShot.Click

Dim viewImageForm As
New Common.f_GetClipboardImage

viewImageForm.btnCommand.Text = “Kapat”

viewImageForm.Tag = Me.ParentForm.WindowState

viewImageForm.lblText.Text = “Ekran resmi çekilmiştir. “ & _

“İstediğiniz yere farenizin sağ tuşuna basıp, “ & _

“‘Yapıştır’ ifadesini seçerek ekleyebilirsiniz.”

AddHandler viewImageForm.btnCommand.Click, AddressOf viewImageForm_btnCommand_Click

AddHandler viewImageForm.FormClosing, AddressOf viewImageForm_Closing

Me.ParentForm.WindowState = FormWindowState.Maximized

My.Application.DoEvents() ‘Bu kod kullanılmazsa pencere büyümeden resim çekilir. İstenilen görüntü elde edilemez.

SendKeys.Send(“%({PRTSC})”) ‘ALT + PrintScreen tuş kombinasyonu ile aktif olan form görüntüsünü çeker.

My.Application.DoEvents() ‘Bu kod kullanılmazsa resim çekme olayı “viewImageForm.ShowDialog()” ifadesinden önce işlemez.

viewImageForm.ShowDialog()

End
Sub

Yukardaki kod ile form resmi çekilip, oluşturduğumuz “f_GetClipboardImage” form içinde gösterebiliriz. Yukarıdaki kod içinde “f_GetClipboardImage” formundaki iki adet olay da kullanılmaktadır.

İşte oraya da şöyle kodlar yazılabilir.

Private
Sub viewImageForm_btnCommand_Click(ByVal sender As
Object, ByVal e As EventArgs)

‘Image gösterme formunda butona basılınca..

‘Form kapatılır ve formu açan ana form boyutu eski boyutuna alınır.

Dim btn As Button = CType(sender, Button)

Dim frm As Form = btn.FindForm()

frm.Close()

Me.ParentForm.WindowState = CInt(frm.Tag)

End
Sub

Private
Sub viewImageForm_Closing(ByVal sender As
Object, ByVal e As FormClosingEventArgs)

‘Form kapatılır ve formu açan ana form boyutu eski boyutuna alınır.

Dim frm As Form = TryCast(sender, Form)

Me.ParentForm.WindowState = CInt(frm.Tag)

End
Sub

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Google fotoğrafı

Google hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Connecting to %s