Как сделать скриншот с помощью C# для нескольких экранных игр с высоким уровнем дефиниции
Я хочу сделать скриншот с помощью C# для нескольких экранных игр высокой четкости.Обычно он работает очень хорошо, но если я собираюсь сделать снимок экрана полноэкранных графических игр, он показывает черный прямоугольник.Я много гуглил, но так и не нашел подходящего решения.Так что может ли кто-нибудь дать решение для этого очень срочного для меня вопроса?Более того, я не работаю с directX .Более того, мой проект уже готов .Net framework 4.5.
Пожалуйста, помогите мне с правильным примером кода.Это вполне выполнимо в отношении этого...пожалуйста, ребята.
Что я уже пробовал:
I have used C# for that.My code is: string ScreenPath,directory; code to initialize: string appPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "anticheat"); try { if (!Directory.Exists(appPath)) { Directory.CreateDirectory(appPath); } } catch(Exception) { } directory = appPath; ------------------------------------------- code to capture image public void screenCapture(bool showCursor) { int noofscreens = 0; Screen[] screens; screens = Screen.AllScreens; noofscreens = screens.Length; Point curPos = new Point(Cursor.Position.X, Cursor.Position.Y); Size curSize = new Size(); curSize.Height = Cursor.Current.Size.Height; curSize.Width = Cursor.Current.Size.Width; //ScreenPath = "C:\\Users\\user\\Desktop\\sssss.bmp"; string foldername = LoginFrm.username; ScreenPath = directory +"/"+foldername.Replace('@', '_')+"-"+ DateTime.Now.ToString("dd-MMM-yyy hh-mm-ss tt") + ".jpg"; if (!ScreenShot.saveToClipboard) { } if (ScreenPath != "" || ScreenShot.saveToClipboard) { //Conceal this form while the screen capture takes place //this.WindowState = System.Windows.Forms.FormWindowState.Minimized; //this.TopMost = false; //Allow 250 milliseconds for the screen to repaint itself (we don't want to include this form in the capture) System.Threading.Thread.Sleep(250); Rectangle bounds = Screen.GetBounds(Screen.GetBounds(Point.Empty)); string fi = ""; if (ScreenPath != "") { fi = new FileInfo(ScreenPath).Extension; } //=============================================================================== //this.Visible = false; //this.Refresh(); System.Threading.Thread.Sleep(100); int i = 0; foreach (var screen in System.Windows.Forms.Screen.AllScreens) { ScreenPath = directory + "/" + foldername.Replace('@', '_') + "-" + DateTime.Now.ToString("dd-MMM-yyy hh-mm-ss tt") + "_Sc(" + (i +1)+ ")" + ".jpg"; Rectangle bounds1 = screen.Bounds;// screen.GetBounds(Screen.GetBounds(Point.Empty)); //Point source = new Point(bounds1.X, bounds1.Y); //Point destination = new Point(bounds1.X + bounds1.Width, bounds1.Y); ScreenShot.CaptureImage(showCursor, curSize, curPos, Point.Empty, Point.Empty, bounds1, ScreenPath, fi); //grabwindow[i] = new Form1(this, "Click to capture screen " + (i + 1).ToString(), screen.Bounds.X, screen.Bounds.Y, screen.Bounds.Width, screen.Bounds.Height, i); //grabwindow[i].Show(); i++; } //=============================================================================== //ScreenShot.CaptureImage(showCursor, curSize, curPos, Point.Empty, Point.Empty, bounds, ScreenPath, fi); //The screen has been captured and saved to a file so bring this form back into the foreground //this.WindowState = System.Windows.Forms.FormWindowState.Normal; //this.TopMost = true; if (ScreenShot.saveToClipboard) { // MessageBox.Show("Screen saved to clipboard", "TeboScreen", MessageBoxButtons.OK); } else { // MessageBox.Show("Screen saved to file", "TeboScreen", MessageBoxButtons.OK); } } } --------------------------------------- class ScreenShot { public static bool saveToClipboard = false; public static void CaptureImage(bool showCursor, Size curSize, Point curPos, Point SourcePoint, Point DestinationPoint, Rectangle SelectionRectangle, string FilePath, string extension) { DataLayer dl = new DataLayer(); string ftp = "my Serverpath"; if(LoginFrm.username!="") { folder = folder + LoginFrm.username + "/"; } SourcePoint = new Point(SelectionRectangle.X, SelectionRectangle.Y); using (Bitmap bitmap = new Bitmap(SelectionRectangle.Width, SelectionRectangle.Height)) { using (Graphics g = Graphics.FromImage(bitmap)) { g.CopyFromScreen(SourcePoint, DestinationPoint, SelectionRectangle.Size); if (showCursor) { Rectangle cursorBounds = new Rectangle(curPos, curSize); Cursors.Default.Draw(g, cursorBounds); } } if (saveToClipboard) { Image img = (Image)bitmap; Clipboard.SetImage(img); } else { switch (extension) { case ".bmp": bitmap.Save(FilePath, ImageFormat.Bmp); //dl.UploadFile(ftp, folder, username, psw, FilePath); break; case ".jpg": bitmap.Save(FilePath, ImageFormat.Jpeg); string fname = Path.GetFileName(FilePath); //dl.UploadFile(ftp, folder, username, psw, FilePath); break; case ".gif": bitmap.Save(FilePath, ImageFormat.Gif); dl.UploadFile(ftp, folder, username, psw, FilePath); break; case ".tiff": bitmap.Save(FilePath, ImageFormat.Tiff); dl.UploadFile(ftp, folder, username, psw, FilePath); break; case ".png": bitmap.Save(FilePath, ImageFormat.Png); dl.UploadFile(ftp, folder, username, psw, FilePath); break; default: bitmap.Save(FilePath, ImageFormat.Jpeg); dl.UploadFile(ftp, folder, username, psw, FilePath); break; } } } } }