コード例 #1
0
ファイル: WindowCapturer.cs プロジェクト: szshary/OpenRPA-1
        private void OnHotKeyPush(object sender, EventArgs e)
        {
            timer.Enabled = false;
            WindowModel.ClearRect();

            var mouse = new MouseModel();
            int x     = mouse.Position.X;
            int y     = mouse.Position.Y;

            // Capture window where cursor points
            WindowModel w   = WindowModel.FindByPosition(x, y);
            Bitmap      bmp = w.CaptureWindow();

            // Send capture image to server
            using (var stream = new MemoryStream())
            {
                // Make http content object from capture image
                bmp.Save(stream, System.Drawing.Imaging.ImageFormat.Png);
                stream.Position = 0;
                HttpContent content = new StreamContent(stream);

                using (var client = new HttpClient())
                    using (var formData = new MultipartFormDataContent())
                    {
                        formData.Add(content, "screenshot", "screenshot.png");
                        formData.Add(new StringContent(w.WindowTitle), "title");

                        var response = client.PostAsync(this.CaptureUploadUrl, formData).Result;
                        if (!response.IsSuccessStatusCode)
                        {
                            throw new Exception("Sending captured image failed");
                        }
                    }
            }

            Finish();
        }
コード例 #2
0
        private void FindWindowAndTryMatch(Bitmap imageToMatch, out WindowModel window, out Rectangle matchingRect)
        {
            var stopwatch = new Stopwatch();

            stopwatch.Start();

            while (true)
            {
                try
                {
                    // Capture target window
                    window = WindowModel.FindByTitle(WindowTitle);

                    Bitmap capture = window.CaptureWindow();

                    // Find matching area in target window
                    matchingRect = FindMatchingRect(capture, imageToMatch);
                }
                catch (Exception)
                {
                    stopwatch.Stop();
                    if (stopwatch.Elapsed.TotalSeconds > Timeout)
                    {
                        throw;
                    }

                    Thread.Sleep(500);

                    // Retry
                    stopwatch.Start();
                    continue;
                }

                break;
            }
        }