Merhaba;
C# ile bir ekran görüntüsü alma programı yaptım. Herşey güzel ama programı açmadan ve programın içindeki butona tıklamadan ekran görüntüsü almıyor. Buda ekran görüntüsünün bozulmasına sebep oluyor. Yani program ekranın bir kısmını kapladığı için programda açık olarak gözüküyor. Benim istediğim şey şu, programı alta alalım ve program arkada açık iken Prt sc sysrq tuşuna bastığımızda ekran görüntüsünü alıp formdaki picturebox'a aktarsın. Bunu nasıl yapabilirim?
@alattin abi :))
Kodların tamamı bana ait değil, ben ekleme ve düzenlemeler yaptım.
Hata yapmaman için Windows Formu içindeki tüm kodları aldım. Form1.cs adı ile uygulamana eklersen sorunsuz çalışır.
Program CTRL + SHIFT + F12 tuşlarına basıldığında ekran görüntüsü alır
Ekran görüntüsünü programın olduğu klasöre kaydeder.
C# ile ekran görüntüsü alıp resim olarak kaydetme:
using System;\nusing System.Drawing;\nusing System.Drawing.Imaging;\nusing System.Runtime.InteropServices;\nusing System.Windows.Forms;\n\nnamespace WindowsFormsApplication6\n{\n public partial class Form1 : Form\n {\n //Program CTRL + SHIFT + F12 tuşlarına basıldığında ekran görüntüsü alır\n //Ekran görüntüsünü programın olduğu klasöre kaydeder.\n public Form1()\n {\n InitializeComponent();\n //CTRL+SHIFT için 6 (2+4)\n //Alt = 1, Ctrl = 2, Shift = 4, Win = 8\n RegisterHotKey(this.Handle, MYACTION_HOTKEY_ID, 6, (int)Keys.F12);\n }\n [DllImport(\"user32.dll\")]\n public static extern bool RegisterHotKey(IntPtr hWnd, int id, int fsModifiers, int vlc);\n [DllImport(\"user32.dll\")]\n public static extern bool UnregisterHotKey(IntPtr hWnd, int id);\n const int MYACTION_HOTKEY_ID = 1;\n void EkranGoruntusuAl()\n {\n //bitmap oluştur\n var bmpEkranGoruntusu = new Bitmap(Screen.PrimaryScreen.Bounds.Width,\n Screen.PrimaryScreen.Bounds.Height,\n PixelFormat.Format32bppArgb);\n // bmpden bir grafik nesnesi yarat\n var gfxEkranGoruntusu = Graphics.FromImage(bmpEkranGoruntusu);\n\n // Sol ust koseden sag alt koseye kadar ekran goruntusu al\n gfxEkranGoruntusu.CopyFromScreen(Screen.PrimaryScreen.Bounds.X,\n Screen.PrimaryScreen.Bounds.Y,\n 0,\n 0,\n Screen.PrimaryScreen.Bounds.Size,\n CopyPixelOperation.SourceCopy);\n\n // Ekran goruntusunu kaydet(png formatında)\n bmpEkranGoruntusu.Save(\"EkranGoruntusu.png\", ImageFormat.Png);\n }\n protected override void WndProc(ref Message m)\n {\n if (m.Msg == 0x0312 && m.WParam.ToInt32() == MYACTION_HOTKEY_ID)\n {\n EkranGoruntusuAl();\n }\n base.WndProc(ref m);\n }\n\n }\n}\n
","url":"https://uzmanim.net/soru/c-kisayol-tuslari-olusturma/83020#a83038","author":{"@type":"Person","name":"alattin"},"comment":{"@type":"Comment","name":"@alattin abi kodlar olmadı. İstersen ben direk benim projemin kodlarını vereyim?","author":{"@type":"Person","name":"toprak34"},"text":"@alattin abi kodlar olmadı. İstersen ben direk benim projemin kodlarını vereyim?"},"commentCount":1,"dateCreated":"2017-11-24T18:23:05.287+03:00","dateModified":"2017-11-24T18:23:05.287+03:00","text":"
Kodların tamamı bana ait değil, ben ekleme ve düzenlemeler yaptım.
Hata yapmaman için Windows Formu içindeki tüm kodları aldım. Form1.cs adı ile uygulamana eklersen sorunsuz çalışır.
Program CTRL + SHIFT + F12 tuşlarına basıldığında ekran görüntüsü alır
Ekran görüntüsünü programın olduğu klasöre kaydeder.
C# ile ekran görüntüsü alıp resim olarak kaydetme:
using System;\nusing System.Drawing;\nusing System.Drawing.Imaging;\nusing System.Runtime.InteropServices;\nusing System.Windows.Forms;\n\nnamespace WindowsFormsApplication6\n{\n public partial class Form1 : Form\n {\n //Program CTRL + SHIFT + F12 tuşlarına basıldığında ekran görüntüsü alır\n //Ekran görüntüsünü programın olduğu klasöre kaydeder.\n public Form1()\n {\n InitializeComponent();\n //CTRL+SHIFT için 6 (2+4)\n //Alt = 1, Ctrl = 2, Shift = 4, Win = 8\n RegisterHotKey(this.Handle, MYACTION_HOTKEY_ID, 6, (int)Keys.F12);\n }\n [DllImport(\"user32.dll\")]\n public static extern bool RegisterHotKey(IntPtr hWnd, int id, int fsModifiers, int vlc);\n [DllImport(\"user32.dll\")]\n public static extern bool UnregisterHotKey(IntPtr hWnd, int id);\n const int MYACTION_HOTKEY_ID = 1;\n void EkranGoruntusuAl()\n {\n //bitmap oluştur\n var bmpEkranGoruntusu = new Bitmap(Screen.PrimaryScreen.Bounds.Width,\n Screen.PrimaryScreen.Bounds.Height,\n PixelFormat.Format32bppArgb);\n // bmpden bir grafik nesnesi yarat\n var gfxEkranGoruntusu = Graphics.FromImage(bmpEkranGoruntusu);\n\n // Sol ust koseden sag alt koseye kadar ekran goruntusu al\n gfxEkranGoruntusu.CopyFromScreen(Screen.PrimaryScreen.Bounds.X,\n Screen.PrimaryScreen.Bounds.Y,\n 0,\n 0,\n Screen.PrimaryScreen.Bounds.Size,\n CopyPixelOperation.SourceCopy);\n\n // Ekran goruntusunu kaydet(png formatında)\n bmpEkranGoruntusu.Save(\"EkranGoruntusu.png\", ImageFormat.Png);\n }\n protected override void WndProc(ref Message m)\n {\n if (m.Msg == 0x0312 && m.WParam.ToInt32() == MYACTION_HOTKEY_ID)\n {\n EkranGoruntusuAl();\n }\n base.WndProc(ref m);\n }\n\n }\n}\n
","upvoteCount":0},{"@type":"Answer","name":"
@alattin projenin kodları,
https://i.hizliresim.com/d7aQyZ.png Ekran görüntüsü.
using System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Data;\nusing System.Drawing;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing System.Windows.Forms;\n\nnamespace ekrangoruntusu\n{\n public partial class Form1 : Form\n {\n public Form1()\n {\n InitializeComponent();\n\n }\n\n private void button1_Click(object sender, EventArgs e)\n {\n Bitmap foto = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);\n Graphics grafik = Graphics.FromImage(foto);\n grafik.CopyFromScreen(0, 0, 0, 0, new Size(foto.Width, foto.Height));\n pictureBox1.Image = foto;\n }\n\n private void button2_Click(object sender, EventArgs e)\n {\n SaveFileDialog sfd = new SaveFileDialog();\n\n sfd.Filter = \"jpeg dosyası(*.jpg)|*.jpg|Bitmap(*.bmp)|*.bmp\";\n\n sfd.Title = \"Kayıt\";\n\n sfd.FileName = \"resim\";\n\n DialogResult sonuç = sfd.ShowDialog();\n\n if (sonuç == DialogResult.OK)\n {\n pictureBox1.Image.Save(sfd.FileName);\n }\n }\n\n private void button3_Click(object sender, EventArgs e)\n {\n\n }\n\n private void Form1_KeyDown(object sender, KeyEventArgs e)\n {\n if (e.KeyCode == Keys.Y)\n {\n button1.PerformClick();\n }\n }\n\n private void button3_Click_1(object sender, EventArgs e)\n {\n MessageBox.Show(\"Ekran görüntüsü al butonunal tıklayarak ekran görüntüsü alabilir, kaydet'e tıklayarak ise ekran görüntüsünü masaüstüne kaydedebilirsiniz.\", \"Kullanım\", MessageBoxButtons.OK, MessageBoxIcon.Information);\n }\n\n private void Form1_KeyDown_1(object sender, KeyEventArgs e)\n {\n\n }\n }\n}
(KeyDown özelliği çalışmıyor)
","url":"https://uzmanim.net/soru/c-kisayol-tuslari-olusturma/83020#a83042","author":{"@type":"Person","name":"toprak34"},"comment":[],"commentCount":0,"dateCreated":"2017-11-24T19:45:55.467+03:00","dateModified":"2017-11-24T19:58:19.057+03:00","text":"@alattin projenin kodları,
https://i.hizliresim.com/d7aQyZ.png Ekran görüntüsü.
using System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Data;\nusing System.Drawing;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing System.Windows.Forms;\n\nnamespace ekrangoruntusu\n{\n public partial class Form1 : Form\n {\n public Form1()\n {\n InitializeComponent();\n\n }\n\n private void button1_Click(object sender, EventArgs e)\n {\n Bitmap foto = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);\n Graphics grafik = Graphics.FromImage(foto);\n grafik.CopyFromScreen(0, 0, 0, 0, new Size(foto.Width, foto.Height));\n pictureBox1.Image = foto;\n }\n\n private void button2_Click(object sender, EventArgs e)\n {\n SaveFileDialog sfd = new SaveFileDialog();\n\n sfd.Filter = \"jpeg dosyası(*.jpg)|*.jpg|Bitmap(*.bmp)|*.bmp\";\n\n sfd.Title = \"Kayıt\";\n\n sfd.FileName = \"resim\";\n\n DialogResult sonuç = sfd.ShowDialog();\n\n if (sonuç == DialogResult.OK)\n {\n pictureBox1.Image.Save(sfd.FileName);\n }\n }\n\n private void button3_Click(object sender, EventArgs e)\n {\n\n }\n\n private void Form1_KeyDown(object sender, KeyEventArgs e)\n {\n if (e.KeyCode == Keys.Y)\n {\n button1.PerformClick();\n }\n }\n\n private void button3_Click_1(object sender, EventArgs e)\n {\n MessageBox.Show(\"Ekran görüntüsü al butonunal tıklayarak ekran görüntüsü alabilir, kaydet'e tıklayarak ise ekran görüntüsünü masaüstüne kaydedebilirsiniz.\", \"Kullanım\", MessageBoxButtons.OK, MessageBoxIcon.Information);\n }\n\n private void Form1_KeyDown_1(object sender, KeyEventArgs e)\n {\n\n }\n }\n}
(KeyDown özelliği çalışmıyor)
","upvoteCount":0}],"upvoteCount":0}}Merhaba;
C# ile bir ekran görüntüsü alma programı yaptım. Herşey güzel ama programı açmadan ve programın içindeki butona tıklamadan ekran görüntüsü almıyor. Buda ekran görüntüsünün bozulmasına sebep oluyor. Yani program ekranın bir kısmını kapladığı için programda açık olarak gözüküyor. Benim istediğim şey şu, programı alta alalım ve program arkada açık iken Prt sc sysrq tuşuna bastığımızda ekran görüntüsünü alıp formdaki picturebox'a aktarsın. Bunu nasıl yapabilirim?
@alattin abi :))
Toplam 2 cevap
Kodların tamamı bana ait değil, ben ekleme ve düzenlemeler yaptım.
Hata yapmaman için Windows Formu içindeki tüm kodları aldım. Form1.cs adı ile uygulamana eklersen sorunsuz çalışır.
Program CTRL + SHIFT + F12 tuşlarına basıldığında ekran görüntüsü alır
Ekran görüntüsünü programın olduğu klasöre kaydeder.
C# ile ekran görüntüsü alıp resim olarak kaydetme:
using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.Runtime.InteropServices;
using System.Windows.Forms;
namespace WindowsFormsApplication6
{
public partial class Form1 : Form
{
//Program CTRL + SHIFT + F12 tuşlarına basıldığında ekran görüntüsü alır
//Ekran görüntüsünü programın olduğu klasöre kaydeder.
public Form1()
{
InitializeComponent();
//CTRL+SHIFT için 6 (2+4)
//Alt = 1, Ctrl = 2, Shift = 4, Win = 8
RegisterHotKey(this.Handle, MYACTION_HOTKEY_ID, 6, (int)Keys.F12);
}
[DllImport("user32.dll")]
public static extern bool RegisterHotKey(IntPtr hWnd, int id, int fsModifiers, int vlc);
[DllImport("user32.dll")]
public static extern bool UnregisterHotKey(IntPtr hWnd, int id);
const int MYACTION_HOTKEY_ID = 1;
void EkranGoruntusuAl()
{
//bitmap oluştur
var bmpEkranGoruntusu = new Bitmap(Screen.PrimaryScreen.Bounds.Width,
Screen.PrimaryScreen.Bounds.Height,
PixelFormat.Format32bppArgb);
// bmpden bir grafik nesnesi yarat
var gfxEkranGoruntusu = Graphics.FromImage(bmpEkranGoruntusu);
// Sol ust koseden sag alt koseye kadar ekran goruntusu al
gfxEkranGoruntusu.CopyFromScreen(Screen.PrimaryScreen.Bounds.X,
Screen.PrimaryScreen.Bounds.Y,
0,
0,
Screen.PrimaryScreen.Bounds.Size,
CopyPixelOperation.SourceCopy);
// Ekran goruntusunu kaydet(png formatında)
bmpEkranGoruntusu.Save("EkranGoruntusu.png", ImageFormat.Png);
}
protected override void WndProc(ref Message m)
{
if (m.Msg == 0x0312 && m.WParam.ToInt32() == MYACTION_HOTKEY_ID)
{
EkranGoruntusuAl();
}
base.WndProc(ref m);
}
}
}
@alattin projenin kodları,
https://i.hizliresim.com/d7aQyZ.png Ekran görüntüsü.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace ekrangoruntusu
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Bitmap foto = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);
Graphics grafik = Graphics.FromImage(foto);
grafik.CopyFromScreen(0, 0, 0, 0, new Size(foto.Width, foto.Height));
pictureBox1.Image = foto;
}
private void button2_Click(object sender, EventArgs e)
{
SaveFileDialog sfd = new SaveFileDialog();
sfd.Filter = "jpeg dosyası(*.jpg)|*.jpg|Bitmap(*.bmp)|*.bmp";
sfd.Title = "Kayıt";
sfd.FileName = "resim";
DialogResult sonuç = sfd.ShowDialog();
if (sonuç == DialogResult.OK)
{
pictureBox1.Image.Save(sfd.FileName);
}
}
private void button3_Click(object sender, EventArgs e)
{
}
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Y)
{
button1.PerformClick();
}
}
private void button3_Click_1(object sender, EventArgs e)
{
MessageBox.Show("Ekran görüntüsü al butonunal tıklayarak ekran görüntüsü alabilir, kaydet'e tıklayarak ise ekran görüntüsünü masaüstüne kaydedebilirsiniz.", "Kullanım", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
private void Form1_KeyDown_1(object sender, KeyEventArgs e)
{
}
}
}
(KeyDown özelliği çalışmıyor)