Пример #1
0
        static void Capture(Process proc)
        {
            var rect = new User.RECT();

            User.GetWindowRect(proc.MainWindowHandle, ref rect);
            if (rect.top >= 0 && rect.bottom >= 0 && rect.left >= 0 && rect.right >= 0)
            {
                using (var bmp = new Bitmap(rect.right - rect.left - 20, rect.bottom - rect.top - 50, System.Drawing.Imaging.PixelFormat.Format16bppRgb555))
                {
                    Graphics.FromImage(bmp).CopyFromScreen(rect.left + 10, rect.top + 40, 0, 0, new System.Drawing.Size(rect.right - rect.left - 20, rect.bottom - rect.top - 50), CopyPixelOperation.SourceCopy);
                    ScreenS = ConvertTo(bmp);
                }
            }

            /*
             * DateTime fps_lock = DateTime.Now;
             * while (true)
             * {
             *  if ((DateTime.Now - fps_lock).Milliseconds >= 16)
             *  {
             *      User.GetWindowRect(proc.MainWindowHandle, ref rect);
             *      using (var bmp = new Bitmap(rect.right - rect.left, rect.bottom - rect.top, System.Drawing.Imaging.PixelFormat.Format32bppRgb))
             *      {
             *          Graphics.FromImage(bmp).CopyFromScreen(rect.left, rect.top, 0, 0, new System.Drawing.Size(rect.right - rect.left, rect.bottom - rect.top), CopyPixelOperation.SourceCopy);
             *          fps_lock = DateTime.Now;
             *          Send(bmp);
             *      }
             *  }
             * }*/
        }
Пример #2
0
        static void Main(string[] args)
        {
            myEncoderParameters.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 30L);
            myEncoderParameters.Param[1] = new EncoderParameter(System.Drawing.Imaging.Encoder.Compression, 1L);

            socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
            socket.MulticastLoopback = true;
            socket.Bind(local);
            socket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, new MulticastOption(m.Address, local.Address));
            string procid = Console.ReadLine();

            //WaveFormat format = new WaveFormat(4000, 6, 1);
            //cptr = new WasapiLoopbackCapture(10, format, ThreadPriority.AboveNormal, true);
            //WaveWriter wrt = new WaveWriter(soundarr, cptr.WaveFormat);
            //cptr.Initialize();
            //cptr.DataAvailable += (s, e) =>
            //{
            //    wrt.Write(e.Data, e.Offset, e.ByteCount);
            //};
            //cptr.Start();

            var     procs = Process.GetProcessesByName(procid);
            Process proc  = null;
            var     rect  = new User.RECT();

            foreach (var prc in procs)
            {
                User.GetWindowRect(prc.MainWindowHandle, ref rect);
                if ((rect.left != 0 || rect.right != 0) || (rect.bottom != 0 || rect.top != 0))
                {
                    proc = prc;
                    break;
                }
            }
            if (proc == null)
            {
                return;
            }

            Capture(proc);

            Task.Factory.StartNew(new Action <object>((object r_obj) => {
                var r             = (User.RECT)r_obj;
                TcpListener lstnr = new TcpListener(new IPEndPoint(IPAddress.Loopback, 8989));
                lstnr.Start();
                var clnt = lstnr.AcceptTcpClient();
                Task.Run(() =>
                {
                    using (StreamReader rdr = new StreamReader(clnt.GetStream(), Encoding.UTF8, false, 4096, true))
                    {
                        //username
                        string msg = "";
                        msg        = rdr.ReadLine();
                        users.Add(msg);

                        string bkmsg = "";
                        foreach (var u in users)
                        {
                            bkmsg += u + ";";
                        }

                        using (StreamWriter wrt = new StreamWriter(clnt.GetStream(), Encoding.UTF8, 4096, true))
                        {
                            wrt.WriteLine(bkmsg + (users.Count == 1));
                            wrt.Flush();
                        }

                        if (users.Count == 1)
                        {
                            //W;H
                            msg        = rdr.ReadLine();
                            int width  = int.Parse(msg.Split(';')[0]);
                            int height = int.Parse(msg.Split(';')[1]);

                            double own_width  = System.Windows.SystemParameters.PrimaryScreenWidth;
                            double own_height = System.Windows.SystemParameters.PrimaryScreenHeight;

                            while (msg != "clnt_chg")
                            {
                                msg      = rdr.ReadLine();
                                double X = ConvertFuckThisToDoubleFuckMeAIDSFUCK(msg.Split(';')[0].Replace(',', '.'));
                                double Y = ConvertFuckThisToDoubleFuckMeAIDSFUCK(msg.Split(';')[1].Replace(',', '.'));

                                double X_Off = ((X + 10) / width) * (r.right - r.left);
                                double Y_Off = ((Y + 10) / height) * (r.bottom - r.top);

                                //X;Y
                                LeftMouseClick((int)X_Off + r.left, (int)Y_Off + r.top);
                            }
                        }
                    }
                });
            }), rect);

            CaptureLoop          = new System.Timers.Timer();
            CaptureLoop.Interval = 32;
            CaptureLoop.Elapsed += (sender, e) => { if (ScreenS != null)
                                                    {
                                                        Send(ScreenS);
                                                    }
            };
            CaptureLoop.Start();
            while (true)
            {
                Capture(proc);
            }
        }
Пример #3
0
        private void button1_Click(object sender, EventArgs e)
        {
            //ищем хэндл процесса
            Process[] p = Process.GetProcessesByName("freecell");
            if (p.Length == 0)
            {
                MessageBox.Show("Процесс не найден");
                return;
            }
            WindowHandle = p[0].MainWindowHandle;
            PrHandle     = p[0].Handle;

            ((Form1)((Button)sender).Parent).WindowState = FormWindowState.Minimized;

            //ицем хэндл окна
            IntPtr hwnd = User.FindWindow(null, "Солитер");

            System.Threading.Thread.Sleep(10);

            //фигачим окно в одну и ту же позицию
            var placement = User.GetPlacement(WindowHandle);

            User.ShowWindow(hwnd, 1);
            User.SetWindowPos(hwnd, 0, 0, 0, 640, 480, SWP_SHOWWINDOW);
            placement2 = User.GetPlacement(WindowHandle);

            //User.SetWindowLong32(hwnd, )
            //Определяем рамки
            var SM_CYCAPTION = User.GetSystemMetrics(4);
            var SM_CXBORDER  = User.GetSystemMetrics(5);
            var SM_CYBORDER  = User.GetSystemMetrics(6);
            var SM_CXEDGE    = User.GetSystemMetrics(45);
            var SM_CYEDGE    = User.GetSystemMetrics(46);
            var SM_CXFRAME   = User.GetSystemMetrics(32);
            var SM_CYFRAME   = User.GetSystemMetrics(33);
            var SM_CYMENU    = User.GetSystemMetrics(15);

            //Определяем размеры рабочей области
            User.RECT t = User.GetClientRect(hwnd);

            //тут надо вычислить нормальные размеры рамок при любых условия, не ебясь со стилями, или с getsystemmetrix
            int bottom_x = (placement2.rcNormalPosition.Width - t.right) / 2;
            int bottom_y = (placement2.rcNormalPosition.Height - SM_CYCAPTION - SM_CYMENU - t.bottom) / 2;
            int x        = placement2.rcNormalPosition.X + bottom_x;
            int y        = placement2.rcNormalPosition.Y + SM_CYCAPTION + SM_CYMENU + bottom_y;
            int width    = t.right;
            int height   = t.bottom - 20;

            //Делаем скриншот
            Bitmap BMP = new Bitmap(width, height);

            System.Drawing.Graphics GFX = System.Drawing.Graphics.FromImage(BMP);
            GFX.CopyFromScreen(x, y, 0, 0, new Size(width, height));

            //если было свернуто или скрыто, то возвращаем в исходное состояние
            if (placement.showCmd == User.ShowWindowCommands.Hide)
            {
                User.ShowWindow(hwnd, 0);
            }
            else if (placement.showCmd == User.ShowWindowCommands.Minimized)
            {
                User.ShowWindow(hwnd, 2);
            }

            //анализ пикселей
            //тупо подсчитать рамки пикселей на 640х480
            Bitmap[] BMP_Free  = new Bitmap[4];
            Bitmap[] BMP_House = new Bitmap[4];
            Bitmap[,] BMP_Field = new Bitmap[8, 7];

            Bitmap s = GrayScale(BMP);
            Bitmap f = AllocationBorders(s);

            //for (int i = 0; i < 4; i++)
            //{
            //BMP_Free[i] =
            //}

            pictureBox1.Image = f;

            //BMP.GetPixel(50, 20);
            ((Form1)((Button)sender).Parent).WindowState = FormWindowState.Normal;
        }