欢迎光临 Rick 's BLOG
日志首页  | C# .Net编程  | 原创作品  | 生活点滴  | C\C++相关  | 多媒体相关※ERMP  | VB相关  | 其它运维与编程  |  留言簿
C#同步代码中调用async异步方法.Result等待导致阻塞死锁deadlock的问题 C# 使用 HttpClient错误?SocketException:现有连接被远程主机强行关闭
晴天  C#屏幕截图,指定区域截图,窗口截图的实现
[ 发布日期:3年前 (2023-12-21) ]   [ 来自:本站原创 ] [分类:C# .Net编程]
核心方法是使用Graphics类的CopyFromScreen方法将窗口的内容复制到位图中。
指定区域截图,只需要将屏幕图片按区域裁剪即可。
指定窗口截图,先获取窗口的位置和大小,然后转化为指定区域截图了。
如果是制作指定窗口的录屏程序时,需要注意实时跟踪窗口的位置和大小(窗口位置和大小可能会调整变化)。
其它的就没有特别的了。

例子代码:
[复制到剪贴板]
using System;
using System.Drawing;
using System.Runtime.InteropServices;

class
Program
{
[
DllImport("user32.dll")]
static
extern IntPtr GetForegroundWindow();

[
DllImport("user32.dll")]
[return:
MarshalAs(UnmanagedType.Bool)]
static
extern bool GetWindowRect(IntPtr hWnd, out RECT lpRect);

[
StructLayout(LayoutKind.Sequential)]
public
struct RECT
{
public
int Left;
public
int Top;
public
int Right;
public
int Bottom;
}

static
void Main()
{
try
{
// 获取活动窗口句柄
IntPtr hWnd = GetForegroundWindow();

// 获取窗口位置和大小
RECT windowRect;
GetWindowRect(hWnd, out windowRect);

// 创建Bitmap对象
using (Bitmap bmp = new Bitmap(windowRect.Right - windowRect.Left, windowRect.Bottom - windowRect.Top))
{
// 创建Graphics对象
using (Graphics g = Graphics.FromImage(bmp))
{
// 将窗口内容绘制到Bitmap中
// 这里可以直接指定位置和大小进行图片截取拷贝
g.CopyFromScreen(new Point(windowRect.Left, windowRect.Top), Point.Empty, bmp.Size);
}

// 保存屏幕截图(可根据需要进行保存)
bmp.Save("screenshot.png");

Console.WriteLine("屏幕截图已保存成功。");
}
}
catch (
Exception ex)
{
Console.WriteLine("发生异常:" + ex.Message);
}
}
}
?>
如果文章对您有帮助,给个赞赏吧!
引用通告地址 (0):
复制引用地址https://www.rickw.cn/trackback/316
复制引用地址https://www.rickw.cn/trackback/316/GBK
[ 分类:C# .Net编程  | 查看:4011 ]

暂时没有评论,快来发表一个评论吧。
发表评论
作者:   用户:[访客] 
评论:

表  情
禁止表情 | 禁止UBB | 禁止图片 | 识别链接
对不起,你没有权限上传附件!
验证:
 
PoweredBy R-Blog V1.00 © 2004-2026 WWW.RICKW.CN, Processed in second(s) , 7 queries    京ICP备17058477号-5