public static void ScreenCopy(string FileName) { try { Form form = Application.OpenForms["FormMain"]; if (form.InvokeRequired) { CopyScreen ph = new CopyScreen(ScreenCopy); form.BeginInvoke(ph, FileName); } else { Bitmap bit = new Bitmap(form.Width, form.Height);//例項化一個和窗體一樣大的bitmap //form.DrawToBitmap(bit, form.ClientRectangle); Graphics g = Graphics.FromImage(bit); g.CompositingQuality = CompositingQuality.HighQuality; //質量設為最高 g.CopyFromScreen(form.Left, form.Top, 0, 0, new Size(form.Width, form.Height)); //儲存整個窗體為圖片 //IntPtr dc1 = g.GetHdc(); //g.ReleaseHdc(dc1); bit.Save(FileName); } } catch (Exception e) { logger.Debug(e.StackTrace); } }
private void copyScreenToolStripMenuItem_Click(object sender, EventArgs e) { this.Hide(); var copyScreen = new CopyScreen(); copyScreen.GetScreenImage += CopyScreen_GetScreenImage; copyScreen.GerScreenFormRectangle(); }
private void btnPlay_Click(object sender, EventArgs e) { CopyScreen.PerformClick(); stopbtn.PerformClick(); btnPlay.Enabled = false; btnPause.Enabled = true; //CopyScreen.PerformClick(); george.SpeakAsync(convertedtxt.Text); }
private void btnPlay_Click(object sender, EventArgs e) { CopyScreen.PerformClick(); if (cbVoice.SelectedIndex >= 0) { stopbtn.PerformClick(); btnPlay.Enabled = false; btnPause.Enabled = true; //CopyScreen.PerformClick(); Marvel.SpeakAsync(convertedtxt.Text); } else { Marvel.Speak("Please select a voice for reading"); cbVoice.Focus(); } }
private static byte[] SendFullFrame() { using (var memoryStream = new MemoryStream()) { using (var writer = new BinaryWriter(memoryStream)) { var bounds = Screen.PrimaryScreen.Bounds; writer.Write(bounds.Bottom); writer.Write(bounds.Right); var image = CopyScreen.CaptureDesktop(); //Okay the image is null if (image == null) { //Lets try resetting the thread var setCurrent = Desktop.SetCurrent(lastDesktopInput); if (setCurrent) { //if the image is still null, send a frame so we don't break the whole screen share instance. image = CopyScreen.CaptureDesktop(); if (image == null) { var bmp = new Bitmap(bounds.Width, bounds.Height); using (var gfx = Graphics.FromImage(bmp)) using (var brush = new SolidBrush(Color.FromArgb(67, 75, 99))) { gfx.FillRectangle(brush, 0, 0, bounds.Width, bounds.Height); } image = bmp; } } } var imageBytes = ImageToByte(image, true); writer.Write(imageBytes.Length); writer.Write(imageBytes); return(memoryStream.ToArray()); } } }
private static byte[] SendCleanFrame() { var image = CopyScreen.CaptureDesktop(); return(image == null ? new byte[0] : ImageToByte(image, true)); }
/// <summary> /// Handles the SpeechRecognized event of the engine control. /// </summary> /// <param name="sender">The source of the event.</param> /// <param name="e">The <see cref="System.Speech.Recognition.SpeechRecognizedEventArgs"/> instance containing the event data.</param> void engine_SpeechRecognized(object sender, SpeechRecognizedEventArgs e) { //inputtxt.Text = getKnownTextOrExecute(e.Result.Text); string speech = (e.Result.Text); switch (speech) { //GREETINGS case "start reading": CopyScreen.PerformClick(); btnPlay.PerformClick(); break; case "read the result": case "read the results": case "whats the results": case "whats the result": case "what is the result": GetResult(); break; case "search": convertbtn.PerformClick(); break; case "pause": btnPause.PerformClick(); break; case "resume": btnPause.PerformClick(); break; case "stop": stopbtn.PerformClick(); break; case "close website search": closebtn.PerformClick(); break; case "hide website reader": FormBorderStyle = FormBorderStyle.None; WindowState = FormWindowState.Minimized; TopMost = false; break; case "show website reader": case "show website reader again": FormBorderStyle = FormBorderStyle.None; WindowState = FormWindowState.Normal; TopMost = true; break; case "change voice to brian": //cbVoice.SelectedIndex = 0; if (cbVoice.Text != "IVONA 2 Brian OEM") { cbVoice.SelectedItem = "IVONA 2 Brian OEM"; Marvel.SelectVoice("IVONA 2 Brian OEM"); } else { cbVoice.SelectedItem = "Microsoft David Desktop"; Marvel.SelectVoice("Microsoft David Desktop"); Marvel.Speak("ivona 2 brian is, not installed, here is microsoft david desktop, at your service"); } break; case "change voice to salli": if (cbVoice.Text != "IVONA 2 Salli OEM") { cbVoice.SelectedItem = "IVONA 2 Salli OEM"; Marvel.SelectVoice("IVONA 2 Salli OEM"); } else { cbVoice.SelectedItem = "Microsoft Zira Desktop"; Marvel.SelectVoice("Microsoft Zira Desktop"); Marvel.Speak("Ivona salli, is not installed, here is microsoft zira desktop, at your service"); } break; case "change voice to microsoft devid": //cbVoice.SelectedIndex = 0; //computer.SelectVoice(cbVoice.Text); cbVoice.SelectedItem = "Microsoft David Desktop"; Marvel.SelectVoice("Microsoft David Desktop"); break; case "change voice to amy": if (cbVoice.Text != "IVONA 2 Amy OEM") { cbVoice.SelectedItem = "IVONA 2 Amy OEM"; Marvel.SelectVoice("IVONA 2 Amy OEM"); } else { cbVoice.SelectedItem = "Microsoft Zira Desktop"; Marvel.SelectVoice("Microsoft Zira Desktop"); Marvel.Speak("Ivona amy, is not installed, here is microsoft zira desktop, at your service"); } break; case "change voice to microsoft zira": //cbVoice.SelectedIndex = 2; //computer.SelectVoice(cbVoice.Text); cbVoice.SelectedItem = "Microsoft Zira Desktop"; Marvel.SelectVoice("Microsoft Zira Desktop"); break; } }
private void bitmapCmpToBlockingQueue() { while (isSendPic) { while (!picFlag) { try { manulResetEvent.WaitOne(); } catch (ThreadInterruptedException ex) { manulResetEvent.Reset(); Console.WriteLine(ex.Message); ErrorInfo.getErrorWriter().writeErrorMassageToFile(ex.Message); return; } } while (picFlag) { BitmapWithCursor bitmapWithCursor = screenCopyQueue.Dequeue(); if (bitmapWithCursor != null) { // Console.WriteLine("btmCmpThread***********"); try { //发送关键帧,校准 //keyFrameAdjusttimes++; //if (keyFrameAdjusttimes > 300) //{ // keyFrameAdjusttimes = 0; // sendKeyFrame(); //} Bitmap btm1 = bitmapWithCursor.getScreenBitmap(); if (isFirstFrame) { globalBtmWidth = btm1.Width; globalBtmHeight = btm1.Height; upDateKeyFrame(btm1, bitmapWithCursor.getCursorPoint()); isFirstFrame = false; } else { int lastBtmWidth = btm1.Width; int lastBtmHeight = btm1.Height; if (lastBtmWidth != globalBtmWidth || lastBtmHeight != globalBtmHeight) { globalBtmWidth = lastBtmWidth; globalBtmHeight = lastBtmHeight; upDateKeyFrame(btm1, bitmapWithCursor.getCursorPoint()); continue; } Bitmap btm2 = globalComparerBitmap; List <ShortRec> difPoints = null; if (isWin8Above) { // Stopwatch sw = new Stopwatch(); //sw.Start(); difPoints = BitmapCmp32Bit.Compare(bitmapWithCursor.dirtyRecs, btm2, btm1, bitCmpSize); //sw.Stop(); //Console.WriteLine(sw.ElapsedMilliseconds+"ms"); } else { difPoints = BitmapCmp24Bit.Compare(btm1, btm2, bitCmpSize); } Bitmap sendPic = null; if (difPoints.Count > 0) { DifferentBitmapWithCursor differentBitmapWithCursor = new ScreenBitmap.DifferentBitmapWithCursor(); double VPTNOW = (double)(CopyScreen.getReslution().Width *CopyScreen.getReslution().Height) / (bitCmpSize.Width * bitCmpSize.Height); if ((double)difPoints.Count >= VPT07 * VPTNOW)//超过70%的改变,直接发送K帧 { sendPic = btm1; differentBitmapWithCursor.setBitmapType(SendPacket.BitmapType.COMPLETE); } else { //Stopwatch sw = new Stopwatch(); //sw.Start(); sendPic = GetDifBlocks.getBlocksIn1BitmapClone(difPoints, btm1, bitCmpSize); //sw.Stop(); //Console.WriteLine(sw.ElapsedMilliseconds+"ms"); differentBitmapWithCursor.setBitmapType(SendPacket.BitmapType.BLOCK); differentBitmapWithCursor.setDifPointsList(difPoints); } /**更新全局比较帧*/ globalComparerBitmap.Dispose(); globalComparerBitmap = (Bitmap)btm1.Clone(); differentBitmapWithCursor.setCursorPoint(bitmapWithCursor.getCursorPoint()); differentBitmapWithCursor.setDifBitmap(sendPic); screenCopyDifQueue.Enqueue(differentBitmapWithCursor); textBoxDBQ.Text = "" + screenCopyDifQueue.getQueueSize(); } } } catch (Exception ex) { Console.WriteLine(ex.Message); ErrorInfo.getErrorWriter().writeErrorMassageToFile(ex.Message); return; } } } } }
private void copyScreenToBlockingQueue() { Stopwatch sw = new Stopwatch(); sw.Start(); int fps = 0;//统计FPS bool nullFrame = true; while (isSendPic) { while (!picFlag) { try { manulResetEvent.WaitOne(); } catch (ThreadInterruptedException ex) { manulResetEvent.Reset(); Console.WriteLine(ex.Message); ErrorInfo.getErrorWriter().writeErrorMassageToFile(ex.Message); return; } } while (picFlag) { try { Thread.Sleep(dynamicTime); // Console.WriteLine("screenCopyThread***********"); if (isWin8Above)//above win8 version { /**采用DXGI形式获取桌面,只能使用在win8以上系统,效率比较高,用来代替Mirror Driver*/ DesktopFrame frame = CopyScreen.getScreenPicDXGI(); if (frame != null) { if (nullFrame) { //第一针总是黑屏,所以直接舍弃 nullFrame = false; continue; } fps++; BitmapWithCursor bitmapWithCursor = new BitmapWithCursor(); bitmapWithCursor.setCursorPoint(new ShortPoint(System.Windows.Forms.Cursor.Position.X, System.Windows.Forms.Cursor.Position.Y)); bitmapWithCursor.setScreenBitmap(frame.DesktopImage); bitmapWithCursor.dirtyRecs = frame.UpdatedRegions; screenCopyQueue.Enqueue(bitmapWithCursor); textBoxCSQ.Text = "" + screenCopyQueue.getQueueSize(); } } else//below win8 { int cursorX, cursorY; /* 采用的GDI形式获取桌面图形,效率比较低*/ Bitmap btm = CopyScreen.getScreenPic(out cursorX, out cursorY); if (btm != null) { fps++; BitmapWithCursor bitmapWithCursor = new BitmapWithCursor(); bitmapWithCursor.setCursorPoint(new ShortPoint(cursorX, cursorY)); bitmapWithCursor.setScreenBitmap(btm); screenCopyQueue.Enqueue(bitmapWithCursor); textBoxCSQ.Text = "" + screenCopyQueue.getQueueSize(); } } /**fps count*/ if (sw.ElapsedMilliseconds > 1000) { sw.Restart(); textBoxFPS.Text = "" + fps; fps = 0; } } catch (Exception ex) { Console.WriteLine(ex.Message); ErrorInfo.getErrorWriter().writeErrorMassageToFile(ex.Message); return; } } } }