基本信息
文件名称:WPF调用WindowsAPI实现屏幕录制.docx
文件大小:25.4 KB
总页数:28 页
更新时间:2025-05-20
总字数:约2.76万字
文档摘要

WPF调用WindowsAPI实现屏幕录制

WPF实现调用WindowsAPI实现屏幕录制

框架使用.NET4VisualStudio2025接着上一篇做一个不依赖ffmpeg实现屏幕录制1000毫秒调用WindowsAPI进行截取屏幕获取图像,并保存jpg文件到指定路径(保存的文件从0.jpg至n.jpg)。

实现代码

1)获取屏幕图片并保存为jpg代码如下:

????????private?static?BitmapSource?CaptureScreen()

????????{

????????????IntPtr?desk?=?GetDesktopWindow();

????????????IntPtr?dc?=?GetWindowDC(desk);

????????????IntPtr?memdc?=?CreateCompatibleDC(dc);

????????????IntPtr?bitmap?=?CreateCompatibleBitmap(dc,?screenWidth,?screenHeight);

????????????SelectObject(memdc,?bitmap);

????????????BitBlt(memdc,?0,?0,?screenWidth,?screenHeight,?dc,?0,?0,?0xCC0020);

????????????BitmapSource?source?=?Imaging.CreateBitmapSourceFromHBitmap(bitmap,?IntPtr.Zero,?Int32Rect.Empty,?BitmapSizeOptions.FromEmptyOptions());

????????????ReleaseDC(desk,?dc);

????????????return?source;

????????}

????????Task.Factory.StartNew(()?=

????????????{

????????????????while?(IsRunning)

????????????????{

????????????????????Thread.Sleep(1000);

????????????????????num?+=?1;

????????????????????Application.Current.Dispatcher.Invoke(new?Action(()?=

????????????????????{

????????????????????????var?drawingVisual?=?new?DrawingVisual();

????????????????????????POINT?mousePosition;

????????????????????????using?(DrawingContext?drawingContext?=?drawingVisual.RenderOpen())

????????????????????????{

????????????????????????????drawingContext.DrawImage(CaptureScreen(),

????????????????????????????????new?Rect(new?Point(),

????????????????????????????????new?Size(screenWidth,?screenHeight)));

????????????????????????????if?(GetCursorPos(out?mousePosition))

????????????????????????????{

????????????????????????????????var?cursorSize?=?30;

????????????????????????????????var?cursorHalfSize?=?cursorSize?/?2;

????????????????????????????????var?cursorCenterX?=?mousePosition.X?-?SystemParameters.VirtualScreenLeft;

????????????????????????????????var?cursorCenterY?=?mousePosition.Y?-?SystemParameters.VirtualScreenTop;

????????????????????????????????drawingContext.DrawIma