基于C#實(shí)現(xiàn)Windows桌面截圖功能
前言
- 在學(xué)習(xí)C# 的過程中,通過案例是比較高效的一種學(xué)習(xí)方式。下面我將介紹如何使用C#開發(fā)一個簡單的Windows桌面截圖程序。這個程序?qū)崿F(xiàn)了基本的屏幕截圖功能,包括捕獲全屏、預(yù)覽圖像以及保存截圖文件。通過該案例,可以了解到Windows窗體應(yīng)用(WinForms)的開發(fā)知識,并理解GDI+繪圖技術(shù)、文件對話框的使用以及事件驅(qū)動編程的核心概念。
- 實(shí)現(xiàn)的功能雖然簡單,但涵蓋了實(shí)際開發(fā)中的關(guān)鍵流程,如UI設(shè)計、功能邏輯實(shí)現(xiàn)、異常處理等。
知識梳理
實(shí)現(xiàn)功能:
- 1、點(diǎn)擊按鈕截圖。
- 2、截圖顯示、拖動縮放、功能。
- 3、截圖保存。
實(shí)現(xiàn)步驟:
- 1、獲取屏幕邊界。
- 2、創(chuàng)建位圖對象。
- 3、屏幕內(nèi)容捕獲
- 4、內(nèi)容傳遞。
- 5、顯示截圖編輯器窗口。
核心方法1:
Screen.GetBounds(Point)- 該方法用于獲取主顯示器的邊界矩形。
- 一般從屏幕左上角(0,0)開始計算。
核心方法2:
CopyFromScreen(Point,Point,Point)- 該方法實(shí)現(xiàn)屏幕內(nèi)容拷貝。
- 參數(shù)一:源位置左上角坐標(biāo)。
- 參數(shù)二:目標(biāo)位置左上角坐標(biāo)。
- 參數(shù)三:要拷貝的區(qū)域大小。
自定義顯示圖像窗體:
FrmScreenshotEditor控件代碼在文末鏈接,需要者自行下載。
運(yùn)行效果

代碼
主窗體代碼
- 主窗體中添加截圖按鈕,實(shí)現(xiàn)點(diǎn)擊按鈕截圖功能,在截圖前隱藏該窗體主窗體,否則會截到主窗體,添加一定的延時,否則還是會截到主窗體,因?yàn)橹鞔绑w可能未隱藏成功。截圖成功后再顯示主窗體和子窗體。
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
this.CenterToParent();
this.MaximumSize = this.Size;
this.MinimumSize = this.Size;
}
private void Btn_Screenshot_Click(object sender, EventArgs e)
{
this.Hide();
Thread.Sleep(500);
Screenshot();
}
/// 截圖方法
private void Screenshot()
{
try
{
// 獲取屏幕尺寸
Rectangle bounds = Screen.GetBounds(Point.Empty);
// 創(chuàng)建位圖對象
using (Bitmap bitmap = new Bitmap(bounds.Width, bounds.Height))
{
// 創(chuàng)建繪圖對象
using (Graphics g = Graphics.FromImage(bitmap))
{
// 將屏幕內(nèi)容復(fù)制到位圖中
g.CopyFromScreen(Point.Empty, Point.Empty, bounds.Size);
}
this.Show();
//顯示圖像
FrmScreenshotEditor frmScreenshotEditor = new FrmScreenshotEditor();
frmScreenshotEditor.Image = bitmap;
frmScreenshotEditor.ShowDialog();
}
}
catch (Exception ex)
{
MessageBox.Show($"截圖失敗: {ex.Message}", "錯誤",MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
截圖編輯窗體
- 在截圖編輯子窗體中添加自定義圖像顯示控件,該控件需要實(shí)現(xiàn)圖像的滾動和縮放功能。添加一個Image屬性,用于設(shè)置顯示的圖片。最后添加一個保存按鈕,實(shí)現(xiàn)圖像保存功能。
public partial class FrmScreenshotEditor :WinFormBase
{
public Image Image
{
get => uvCanvas.Image;
set
{
uvCanvas.Image = value;
Invalidate();
}
}
public FrmScreenshotEditor()
{
InitializeComponent();
this.CenterToParent();
this.WindowState = FormWindowState.Maximized;
}
private void btn_Save_Click(object sender, System.EventArgs e)
{
SaveFileDialog saveFileDialog = new SaveFileDialog();
saveFileDialog.FileName = "截圖1"; //設(shè)置初始文件名
saveFileDialog.Filter= "PNG Image|*.png|JPEG Image|*.jpg|BMP Image|*.bmp";
if (saveFileDialog.ShowDialog()== DialogResult.OK)
{
string extension = Path.GetExtension(saveFileDialog.FileName).ToLower();
ImageFormat imageFormat;
switch (extension)
{
case ".png":
imageFormat = ImageFormat.Png;
break;
case ".jpg":
imageFormat = ImageFormat.Jpeg;
break;
case ".bmp":
imageFormat = ImageFormat.Bmp;
break;
default:
imageFormat = ImageFormat.Png;
break;
}
try
{
Image.Save(saveFileDialog.FileName, imageFormat);
MessageBox.Show($"圖片已成功保存至: {saveFileDialog.FileName}");
}
catch (Exception ex)
{
MessageBox.Show($"保存圖片時出錯: {ex.Message}");
}
}
}
}
總結(jié)
- 通過實(shí)現(xiàn)案例學(xué)習(xí)編程是一種高效的學(xué)習(xí)方法。這種學(xué)習(xí)方式將抽象概念具體化。通過上面的截圖程序,我們實(shí)際應(yīng)用了窗體控件、事件處理、GDI+繪圖等核心知識點(diǎn),比單純學(xué)習(xí)理論更容易理解和記憶。
- 其次通過案例可以獲得正向反饋,看到自己編寫的代碼真正實(shí)現(xiàn)功能,極大提升了學(xué)習(xí)動力和成就感。
- 最后,該案例后面可以自己擴(kuò)展性,當(dāng)你掌握了更多的基礎(chǔ)知識后,可以逐步添加區(qū)域選擇、圖像編輯等更高級的功能。
最后
以上就是基于C#實(shí)現(xiàn)Windows桌面截圖功能的詳細(xì)內(nèi)容,更多關(guān)于C# Windows桌面截圖的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
C#實(shí)現(xiàn)將RTF文檔高效轉(zhuǎn)換為PDF格式的兩種方法詳解
在現(xiàn)代辦公自動化和文檔處理場景中,經(jīng)常需要將不同格式的文檔統(tǒng)一轉(zhuǎn)換為?PDF?格式,本文將詳細(xì)介紹如何使用?C#?實(shí)現(xiàn)從?RTF?到?PDF?的轉(zhuǎn)換,并提供兩種主流方案,希望對大家有所幫助2026-03-03
C#中comboBox實(shí)現(xiàn)三級聯(lián)動
給大家分享了C#中comboBox實(shí)現(xiàn)三級聯(lián)動的全部代碼,代碼經(jīng)過測試,有興趣的朋友跟著做一下。2018-03-03
C#創(chuàng)建壓縮文件的實(shí)現(xiàn)代碼
本篇文章主要介紹了C# 創(chuàng)建壓縮文件的實(shí)現(xiàn)代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-05-05
C#使用CefSharp實(shí)現(xiàn)內(nèi)嵌網(wǎng)頁詳解
這篇文章主要介紹了C# WPF里怎么使用CefSharp嵌入一個網(wǎng)頁,并給出一個簡單示例演示C#和網(wǎng)頁(JS)的交互實(shí)現(xiàn),感興趣的小伙伴可以了解一下2023-04-04
使用C#將Excel文件轉(zhuǎn)換為SVG的實(shí)現(xiàn)代碼
SVG是Scalable Vector Graphics的縮寫,是一種適合在Web上使用的矢量圖像格式,與其他圖像格式相比,SVG具有許多優(yōu)勢,其中最顯著的一點(diǎn)是分辨率無關(guān)性,有時,為了在網(wǎng)頁中展示內(nèi)容,你可能需要將Excel文件轉(zhuǎn)換為SVG,本文將演示如何通過C#和VB.NET以編程方式將Excel轉(zhuǎn)換為SVG2025-12-12

