Exemple #1
0
        /// <summary>
        /// Returns a base64 string of the screenshot
        /// </summary>
        /// <returns></returns>
        public static ScreenshotModel MakeScreenshot(string monitorNumber)
        {
            int  number = 0;
            bool parse  = int.TryParse(monitorNumber, out number);

            if (parse)
            {
                Screen  screen = Screen.AllScreens[number];
                DEVMODE dm     = new DEVMODE();
                dm.dmSize = (short)Marshal.SizeOf(typeof(DEVMODE));
                EnumDisplaySettings(screen.DeviceName, ENUM_CURRENT_SETTINGS, ref dm);
                using (Bitmap bmp = new Bitmap(dm.dmPelsWidth, dm.dmPelsHeight))
                    using (Graphics g = Graphics.FromImage(bmp))
                    {
                        g.CopyFromScreen(dm.dmPositionX, dm.dmPositionY, 0, 0, bmp.Size);

                        byte[] imageArray = bmp.ToByteArray(ImageFormat.Png);

                        ScreenshotModel ss = new ScreenshotModel
                        {
                            ScreenshotData = Convert.ToBase64String(imageArray),
                            Timestamp      = DateTime.Now
                        };

                        return(ss);
                    }
            }
            else
            {
                return(default);
        public void CreateNewScreenshot()
        {
            if (!GetIsSelectedRectangleValid())
            {
                Close();
                return;
            }

            // Only get the rectangle portion of the dekstop we want
            Bitmap croppedBitmap = BitmapService.CropBitmap(OriginalScreenBitmap, GetSelectedCaptureArea());

            // When creating the new Screenshot form, make sure to place it on the relevant part of the desktop
            var topLeftPoint = GetTopLeftPoint();

            // Apply offset
            var leftMostScreen   = Screen.AllScreens.OrderBy(s => s.Bounds.Left).First();
            var leftMostLocation = leftMostScreen.Bounds.Location;

            topLeftPoint.X += DesktopRectangle.X;
            topLeftPoint.Y += DesktopRectangle.Y;

            // TODO: Add Screenshots to groups (for grouped moving etc.)
            var screenshotModel     = new ScreenshotModel(croppedBitmap, topLeftPoint);
            var newScreenshotForm   = new ScreenshotView();
            var screenshotPresenter = new ScreenshotPresenter(newScreenshotForm, screenshotModel);

            newScreenshotForm.SetBitmap(croppedBitmap, topLeftPoint);
            newScreenshotForm.Show();

            Close();
        }
        public ScreenshotPresenter(IScreenshotView screenshotView, ScreenshotModel screenshotModel)
        {
            ScreenshotView  = screenshotView;
            ScreenshotModel = screenshotModel;

            ScreenshotView.CopyScreenshotToClipboard += ScreenshotView_CopyScreenshotToClipboard;
            ScreenshotView.SaveScreenshotToFile      += ScreenshotView_SaveScreenshotToFile;
        }
        public JsonResult List()
        {
            var mongo = new MongoHelper();

            // 获取所有类别
            var filter = Builders <BsonDocument> .Filter.Eq("Type", "Screenshot");

            var categories = mongo.FindMany(Constant.CategoryCollectionName, filter).ToList();

            var docs = mongo.FindAll(Constant.ScreenshotCollectionName).SortBy(n => n["Name"]).ToList();

            var list = new List <ScreenshotModel>();

            foreach (var i in docs)
            {
                var categoryID   = "";
                var categoryName = "";

                if (i.Contains("Category") && !i["Category"].IsBsonNull && !string.IsNullOrEmpty(i["Category"].ToString()))
                {
                    var doc = categories.Where(n => n["_id"].ToString() == i["Category"].ToString()).FirstOrDefault();
                    if (doc != null)
                    {
                        categoryID   = doc["_id"].ToString();
                        categoryName = doc["Name"].ToString();
                    }
                }

                var info = new ScreenshotModel
                {
                    ID           = i["ID"].AsObjectId.ToString(),
                    Name         = i["Name"].AsString,
                    CategoryID   = categoryID,
                    CategoryName = categoryName,
                    TotalPinYin  = i["TotalPinYin"].ToString(),
                    FirstPinYin  = i["FirstPinYin"].ToString(),
                    Url          = i["Url"].ToString(),
                    CreateTime   = i["CreateTime"].ToUniversalTime(),
                    UpdateTime   = i["UpdateTime"].ToUniversalTime(),
                    Thumbnail    = i["Thumbnail"].ToString()
                };
                list.Add(info);
            }

            return(Json(new
            {
                Code = 200,
                Msg = "Get Successfully!",
                Data = list
            }));
        }
        private void SetupScreenshotModel()
        {
            var model = new ScreenshotModel();

            // モデルのバインド
            scrshotSaveTxt.DataBindings.Add(Bind(nameof(scrshotSaveTxt.Text), model.SaveFolder));
            scrshotTakeAndOpenChk.DataBindings.Add(Bind(nameof(scrshotTakeAndOpenChk.Checked), model.OpenViewer));
            exploreScrshotBtn.Bind(model.OpenSaveFolder);
            model.StatusMsg.Subscribe(StatusDrain);

            takeScrshotBtn.Click     += (_, __) => model.SaveToSpecified.Execute();
            scrshotDragLbl.MouseDown += (_, e) => model.DragAreaMouseMove.Execute(e);
            FormClosed += (_, __) => model.Dispose();

            // ドラッグ処理をバインド
            model.CompleteSaveToTemp += DragImageFileFromArea;
        }
 private bool MakeScreenshot(Socket s, string monitorNumber)
 {
     try
     {
         ScreenshotModel       screenshotObject = Screenshot.MakeScreenshot(monitorNumber);
         TransferCommandObject pfTransferObject = new TransferCommandObject {
             Command = "ScreenshotResponse", Value = screenshotObject.ConvertToJson()
         };
         SendResponseObjectToSocket(s, ClientServerPipeline.BufferSerialize(pfTransferObject));
         return(true);
     }
     catch (Exception e)
     {
         BConsole.WriteLine("Visuals Error: " + e.Message, ConsoleColor.Red);
         return(false);
     }
 }
        /// <summary>
        /// Called when a new message was received on any client socket.
        /// </summary>
        /// <param name="c"></param>
        /// <param name="model"></param>
        /// <param name="type"></param>
        private void Server_MessageReceived(Client c, TransferCommandObject model, Server.DataByteType type)
        {
            BConsole.WriteLine($"Client {c.GetName()} sent a message", ConsoleColor.DarkGray);

            switch (type)
            {
            case Server.DataByteType.Response:
                if (model.Command == "CMDResponse")
                {
                    c.AddToCMDBuffer(model.Value);
                }
                else if (model.Command == "ScreenshotResponse")
                {
                    ScreenshotModel screenshotObject = JsonConvert.DeserializeObject <ScreenshotModel>(model.Value);
                    c.SetScreenshot(screenshotObject);
                }
                else if (model.Command == "ScreenList")
                {
                    List <ScreenTypeModel> screenList = JsonConvert.DeserializeObject <List <ScreenTypeModel> >(model.Value);
                    if (screenList != null)
                    {
                        c.SetScreenData(screenList);
                    }
                }
                break;

            case Server.DataByteType.Command:
                if (model.Command == "Debug")
                {
                    TransferCommandObject returnObject = new TransferCommandObject {
                        Command = "PlayBeep", Handler = "Audio", Value = "200,300"
                    };
                    Server.SendDataObjectToSocket(Server.DataByteType.Command, Server.GetSocketByClient(c), ClientServerPipeline.BufferSerialize(returnObject));
                }
                break;

            case Server.DataByteType.Data:
                c.SetDataItem(model.Command, model.Value);
                NotifyPropertyChanged("SelectedClient.storedData");
                NotifyPropertyChanged("CurrentClientName");
                break;
            }
        }
        private async Task SaveToFileAsync(StringBuilder path, ScreenshotModel screenshot, Image image)
        {
            path.Append(screenshot.AppName);
            path.Append("_");
            path.Append(screenshot.WindowTitle);
            path.Append("_");
            path.Append(image.GetHashCode());
            path.Append(".jpg");
            string folderPath;

            if (Directory.Exists(settingsService.Settings.DefaultScreenshotSavePath))
            {
                folderPath = Path.Combine(settingsService.Settings.DefaultScreenshotSavePath, CorrectPath(path.ToString()));
            }
            else
            {
                folderPath = CorrectPath(path.ToString());
            }

            folderPath = TrimPath(folderPath);
            await SaveScreenshot(image.Screensht, folderPath);
        }
 public ScreenshotViewModel()
 {
     _screenshotModel = new ScreenshotModel();
     MyBrush          = System.Windows.Media.Brushes.Black;
 }
Exemple #10
0
 /// <summary>
 /// Function that sets the current screenshot base64 string.
 /// </summary>
 /// <param name="base64Image"></param>
 public void SetScreenshot(ScreenshotModel model)
 {
     Screenshot = model;
     NotifyPropertyChanged("Screenshot");
 }