Although the magnifying glass function has been added, it is still not easy to position accurately at the pixel level. When operating with the mouse, the position of one or two pixels needs to be changed. It's still a bit difficult.
/// <summary> /// 处理键盘按下事件 /// 用于实现以下功能: /// 当用户按下Esc键时,退出截图过程; /// Shift + Enter 开始截图的功能; /// 使用键盘的上下左右键调整截图位置的功能; /// Shift + 上下左右键调整截图区域大小的功能; /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Form1_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Escape) { ExitCutImage(true); // 如果不加这一句,热键只能在窗口隐藏后使用一次,之后就不起作用了。 //RegisterHotKey(Handle, 100, 2 | 1, Keys.A); } if (e.Shift && e.KeyCode == Keys.Enter) { if (!this.lbl_CutImage.Visible) { this.isCuting = true; this.beginPoint = MousePosition; this.endPoint = MousePosition; SaveCutImageSize(MousePosition, MousePosition); UpdateCutInfoLabel(UpdateUIMode.ShowInfoBox | UpdateUIMode.ShowCutImage); } } if (e.KeyCode == Keys.Left) { if (this.lbl_CutImage.Visible) { if (e.Shift) { if (this.cutImageRect.Width > 1) { this.cutImageRect.Width -= 1; Cursor.Position = new Point(Cursor.Position.X - 1, Cursor.Position.Y); UpdateCutInfoLabel(UpdateUIMode.None); } } else { if (this.cutImageRect.Left > -1) { this.cutImageRect.X -= 1; UpdateCutInfoLabel(UpdateUIMode.None); } } } else { if (Cursor.Position.X > -1) { Cursor.Position = new Point(Cursor.Position.X - 1, Cursor.Position.Y); } } } if (e.KeyCode == Keys.Right) { if (this.lbl_CutImage.Visible) { if (e.Shift) { if (this.cutImageRect.Right < this.Width + 1) { this.cutImageRect.Width += 1; Cursor.Position = new Point(Cursor.Position.X + 1, Cursor.Position.Y); UpdateCutInfoLabel(UpdateUIMode.None); } } else { if (this.cutImageRect.Right < this.Width + 1) { this.cutImageRect.X += 1; UpdateCutInfoLabel(UpdateUIMode.None); } } } else { if (Cursor.Position.X < this.Width + 1) { Cursor.Position = new Point(Cursor.Position.X + 1, Cursor.Position.Y); } } } if (e.KeyCode == Keys.Up) { if (this.lbl_CutImage.Visible) { if (e.Shift) { if (this.cutImageRect.Height > 1) { this.cutImageRect.Height -= 1; Cursor.Position = new Point(Cursor.Position.X, Cursor.Position.Y - 1); UpdateCutInfoLabel(UpdateUIMode.None); } } else { if (this.cutImageRect.Top > -1) { this.cutImageRect.Y -= 1; UpdateCutInfoLabel(UpdateUIMode.None); } } } else { if (Cursor.Position.Y > -1) { Cursor.Position = new Point(Cursor.Position.X, Cursor.Position.Y - 1); } } } if (e.KeyCode == Keys.Down) { if (this.lbl_CutImage.Visible) { if (e.Shift) { if (this.cutImageRect.Bottom < this.Height + 1) { this.cutImageRect.Height += 1; Cursor.Position = new Point(Cursor.Position.X, Cursor.Position.Y + 1); UpdateCutInfoLabel(UpdateUIMode.None); } } else { if (this.cutImageRect.Bottom < this.Height + 1) { this.cutImageRect.Y += 1; UpdateCutInfoLabel(UpdateUIMode.None); } } } else { if (Cursor.Position.Y < this.Height + 1) { Cursor.Position = new Point(Cursor.Position.X, Cursor.Position.Y + 1); } } } }
/// <summary> /// 处理键盘抬起事件 /// Shift + Enter 开始截图,当松开Shitf键后, /// 停止截图区域大小的设置,不然的话鼠标移动还会改变截取区域的大小; /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Form1_KeyUp(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.ShiftKey) { if (this.isCuting) { this.isCuting = false; this.pictureBox_zoom.Hide(); this.lastMouseMoveTime = 0; UpdateCutInfoLabel(UpdateUIMode.None); } } }
After pressing the screenshot shortcut key (usually: Ctrl + Shift + A), you can move the mouse to the approximate position, and then use the up, down, left, and right keys of the keyboard to move the mouse position accurately. After accurately positioning the screenshot, you can Press the Shift key and then press the Enter key. Do not release the Shift key. At this time, you can press the up, down, left, and right keys to change the size of the screenshot area. Release the Shift key to complete the screenshot area size setting;
At this time, you can press the up, down, and left keys to Use the left and right keys to change the position of the screenshot area. Press the Shift key without releasing it. Then press the up, down, left and right keys to change the size of the screenshot area.
The above is the detailed content of C# Development Example-Customized Screenshot Tool (8) Code Example for Adding Keyboard Operation Screenshot Function. For more information, please follow other related articles on the PHP Chinese website!