예제 #1
0
파일: Client.cs 프로젝트: ZhuGongpu/CloudX
        private void VideoSender()
        {
            // Console.WriteLine("video sender online");
            //while (videoSendingThreadStatus)
            while (stream != null)
            {
                //todo
                //Thread.Sleep(100);

                Bitmap bitmap;
                if (isWindowSelected)
                {
                    bitmap = WindowCaptureUtility.CaptureSelectedWindow(selectedWindowHwnd);
                }
                else
                {
                    var rect = new WindowCaptureUtility.RECT
                    {
                        Left = Screen.PrimaryScreen.Bounds.Left,
                        Right = Screen.PrimaryScreen.Bounds.Right,
                        Top = Screen.PrimaryScreen.Bounds.Top,
                        Bottom = Screen.PrimaryScreen.Bounds.Bottom
                    };

                    bitmap = WindowCaptureUtility.Capture(rect);
                }

                if (bitmap == null) continue;

                if (stream != null)
                 {
                    try
                    {
                        //todo changed
                        //bitmap.SetResolution(bitmap.Width*scaleRate, bitmap.Height*scaleRate);

                        //send the bitmap


                        SendBitmap(new Bitmap(bitmap, (int)(bitmap.Width * scaleRate), (int)(bitmap.Height * scaleRate)));
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine("Before Exception : {0}, {1}  {2}", bitmap.Width, bitmap.Height, scaleRate);

                        Console.WriteLine("Client VideoReceiver Run Into An Exception : \n" + e);
                        ConnectionFailedHandler();
                    }
                }
            }
        }
예제 #2
0
파일: Client.cs 프로젝트: ZhuGongpu/CloudX
        /// <summary>
        ///     处理收到的Command包
        /// </summary>
        /// <param name="command"></param>
        private void CommandProcessor(Command command)
        {
            int hwnd;
            int x, y;

            switch (command.CommandType)
            {
                case Command.Types.CommandType.LeftClick:
                    if (!isWindowSelected)
                    {
                        if ((DateTime.Now - lastLeftClickTime).TotalMilliseconds > MinTimeGapBetweenClicks)
                            MouseUtility.SetCursorPos((int)command.X, (int)command.Y);

                        MouseUtility.mouse_event(
                            MouseUtility.MOUSEEVENTF_LEFTDOWN | MouseUtility.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
                        lastLeftClickTime = DateTime.Now;

                        x = (int)command.X;
                        y = (int)command.Y;

                        // MouseUtility.mouse_event(MouseUtility.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
                    }
                    else
                    {
                        var rect = new WindowCaptureUtility.RECT();
                        WindowsUtility.GetWindowRect(selectedWindowHwnd, ref rect);
                        if ((DateTime.Now - lastLeftClickTime).TotalMilliseconds > MinTimeGapBetweenClicks)
                            MouseUtility.SetCursorPos((int)command.X + rect.Left,
                                (int)command.Y + rect.Top);

                        MouseUtility.mouse_event(
                            MouseUtility.MOUSEEVENTF_LEFTDOWN | MouseUtility.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
                        lastLeftClickTime = DateTime.Now;

                        x = (int)command.X + rect.Left;
                        y = (int)command.Y + rect.Top;

                        // MouseUtility.mouse_event(MouseUtility.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
                    }

                    Console.WriteLine("mouse left clicked : {0},{1}", x, y);

                    break;
                case Command.Types.CommandType.RightClick:

                    if (!isWindowSelected)
                    {
                        if ((DateTime.Now - lastRightClickTime).TotalMilliseconds > MinTimeGapBetweenClicks)
                            MouseUtility.SetCursorPos((int)command.X, (int)command.Y);

                        MouseUtility.mouse_event
                            (MouseUtility.MOUSEEVENTF_RIGHTDOWN | MouseUtility.MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0);

                        lastRightClickTime = DateTime.Now;

                        x = (int)command.X;
                        y = (int)command.Y;
                        //MouseUtility.mouse_event(MouseUtility.MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0);
                    }
                    else
                    {
                        var rect = new WindowCaptureUtility.RECT();
                        WindowsUtility.GetWindowRect(selectedWindowHwnd, ref rect);

                        if ((DateTime.Now - lastRightClickTime).TotalMilliseconds > MinTimeGapBetweenClicks)
                            MouseUtility.SetCursorPos((int)command.X + rect.Left,
                                (int)command.Y + rect.Top)
                                ;

                        MouseUtility.mouse_event(
                            MouseUtility.MOUSEEVENTF_RIGHTDOWN | MouseUtility.MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0);

                        lastRightClickTime = DateTime.Now;

                        x = (int)command.X + rect.Left;
                        y = (int)command.Y + rect.Top;

                        // MouseUtility.mouse_event(MouseUtility.MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0);
                    }

                    Console.WriteLine("mouse right clicked : {0},{1}", x, y);

                    break;
                case Command.Types.CommandType.Scroll:

                    MouseUtility.mouse_event(MouseUtility.MOUSEEVENTF_WHEEL, 0, 0, (int)command.Y, 0);
                    Console.WriteLine("scroll : " + command.Y);
                    break;
                case Command.Types.CommandType.Minimize:

                    hwnd = isWindowSelected
                        ? selectedWindowHwnd
                        : WindowsUtility.WindowFromPoint((int)command.X, (int)command.Y);
                    //找到主窗口
                    while (WindowsUtility.GetParent(hwnd) != 0)
                        hwnd = WindowsUtility.GetParent(hwnd);

                    WindowsUtility.ShowWindow(hwnd, 2);
                    Console.WriteLine("Minimize");
                    break;
                case Command.Types.CommandType.SelectWindow:
                    if (command.X > 0 && command.Y > 0)
                    {
                        selectedWindowHwnd = WindowsUtility.WindowFromPoint((int)command.X, (int)command.Y);
                        if (selectedWindowHwnd != 0)
                        {
                            var rect = new WindowCaptureUtility.RECT();

                            WindowsUtility.GetWindowRect(selectedWindowHwnd, ref rect);

                            scaleRate = Math.Min(ClientScreenWidth / (float)(rect.Right - rect.Left),
                                ClientScreenHeight / (float)(rect.Bottom - rect.Top)
                                );

                            //todo uncertain
                            if (scaleRate > 1)
                                scaleRate = 1;

                            isWindowSelected = true;
                        }

                        Console.WriteLine("window selected");
                    }
                    else
                    {
                        isWindowSelected = false;
                        selectedWindowHwnd = 0;
                        scaleRate = Math.Min(ClientScreenWidth / (float)Screen.PrimaryScreen.Bounds.Width,
                            ClientScreenHeight / (float)Screen.PrimaryScreen.Bounds.Height
                            );

                        //todo uncertain
                        if (scaleRate > 1)
                            scaleRate = 1;

                        Console.WriteLine("canceled the selected window");
                    }
                    break;
                case Command.Types.CommandType.ShutDownApp:
                    hwnd = isWindowSelected
                        ? selectedWindowHwnd
                        : WindowsUtility.WindowFromPoint((int)command.X, (int)command.Y);
                    WindowsUtility.ShutDownSpecifiedProgram(hwnd);
                    Console.WriteLine("Shut down selected app");
                    break;
                case Command.Types.CommandType.ShowDesktop:
                    WindowsUtility.ShowDesktop();
                    break;
                ////todo mute audio and etc
                case Command.Types.CommandType.StartAudioAndVideoTransmission:
                    //    audioSendingThreadStatus = true;
                    //videoSendingThreadStatus = true;

                    videoSendingThread.Start();

                    break;
                //case Command.Types.CommandType.StartAudioTransmission:
                //    audioSendingThreadStatus = true;

                //    break;
                //case Command.Types.CommandType.StartVideoTransmission:
                //    videoSendingThreadStatus = true;
                //    break;
                //case Command.Types.CommandType.StopAudioAndVideoTransmission:
                //    audioSendingThreadStatus = false;
                //    videoSendingThreadStatus = false;

                //    break;
                //case Command.Types.CommandType.StopAudioTransmission:
                //    audioSendingThreadStatus = false;

                //    break;
                //case Command.Types.CommandType.StopVideoTransmission:
                //    videoSendingThreadStatus = false;

                //    break;
                default:
                    break;
            }

            Console.WriteLine("CommandType " + command.CommandType);

            //UpdateVideoAndAudioThreadStatus();
        }