コード例 #1
0
        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);
            }
        }
コード例 #2
0
        private void copyScreenToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.Hide();
            var copyScreen = new CopyScreen();

            copyScreen.GetScreenImage += CopyScreen_GetScreenImage;
            copyScreen.GerScreenFormRectangle();
        }
コード例 #3
0
        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();
     }
 }
コード例 #5
0
 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());
         }
     }
 }
コード例 #6
0
        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;
            }
        }
コード例 #8
0
        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;
                        }
                    }
                }
            }
        }
コード例 #9
0
        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;
                    }
                }
            }
        }