//-->

Burak Tunçbilek

ActiveWindowScreenShot

Aktif Pencerenin ekran görüntüsünü almak

Aktif Pencerenin Ekran Görüntüsünü Almak

Açıklama: Kimi zaman aktif pencerenin ekran görüntüsünü almak gerekebilir özellikle Keylogger gibi bir uygulama yazıyorsanız yada windows 7 de bulunan ekran alıntısı aracını taklit etmek isterseniz en kolay yol budur Burada dikkat edilmesi gereken en önemli husus kod anlık olarak çalışacağı için sizin formunuzun ekran görüntüsünü alacaktır,bunu engellemek için benimde yaptığım şekilde timer kullanarak geciktirebilirsiniz. fazla uzatmadan kodlara geçelim Her zaman olduğu gibi önce isim uzayları(namespaces) kısmına using System.Runtime.Interopservices; Ekliyoruz.ve

public enum enmScreenCaptureMode

        {

            Screen,

            Window

        }

 

        class ScreenCapturer

        {

            [DllImport("user32.dll")]

            private static extern IntPtr GetForegroundWindow();

 

            [DllImport("user32.dll")]

            private static extern IntPtr GetWindowRect(IntPtr hWnd, ref Rect rect);

 

            [StructLayout(LayoutKind.Sequential)]

            private struct Rect

            {

                public int Left;

                public int Top;

                public int Right;

                public int Bottom;

            }

 

            public Bitmap YakalananResim(enmScreenCaptureMode screenCaptureMode = enmScreenCaptureMode.Window)

            {

                Rectangle bounds;

 

                if (screenCaptureMode == enmScreenCaptureMode.Screen)

                {

                    bounds = Screen.GetBounds(Point.Empty);

                    CursorPosition = Cursor.Position;

                }

                else

                {

                    var foregroundWindowsHandle = GetForegroundWindow();

                    var rect = new Rect();

                    GetWindowRect(foregroundWindowsHandle, ref rect);

                    bounds = new Rectangle(rect.Left, rect.Top, rect.Right - rect.Left, rect.Bottom - rect.Top);

                    CursorPosition = new Point(Cursor.Position.X - rect.Left, Cursor.Position.Y - rect.Top);

                }

 

                var result = new Bitmap(bounds.Width, bounds.Height);

 

                using (var g = Graphics.FromImage(result))

                {

                    g.CopyFromScreen(new Point(bounds.Left, bounds.Top), Point.Empty, bounds.Size);

                }

 

                return result;

            }

 

            public Point CursorPosition

            {

                get;

                protected set;

            }

        }

 

 

Class'ımızı ve Enum değerlerini oluşturduktan sonra kullanımı şu şekilde olacaktır;(örnekte picturebox ile gösterilmiştir.)

ScreenCapturer SC = new ScreenCapturer();

pictureBox1.Image = SC.YakalananResim();

bu şekilde kullandıktan sonra Picturebox1'in Image'ını Save ederek görseli kayıt edebilirsiniz.

Örnek uygulamayı indirmek için linki tıklayın

SkyDrive ile indirmek için tıklayın .rar 350kb

Fileden ile indirmek için tıklayın .rar 350kb

 

Etiketler: c# get active window screen shot , aktif pencerenin ekran görüntüsünü almak , c# , csharp , Screencapturer ,screen capture , active screen capture , API , etkin pencerenin ekran görüntüsünü almak , açık pencerenin ekran görüntüsü , örnekli , example , articles , c# ile etkin pencerenin resmini çekmek