第
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