我想制作一个SS应用程序。但我对这个问题有疑问。我希望用户能够选择一个特殊区域来截取屏幕截图。我还希望桌面在用户选择区域时处于活动状态。例如,用户想要拍摄视频特定帧的SS。用户必须能够在播放视频时执行此操作。我已经尝试使用直接在桌面上绘图。但它闪烁得那么厉害。我该如何解决这个问题,还是有另一种方法可以做到?
我的代码:
[DllImport("User32.dll")]
static extern IntPtr GetDC(IntPtr hwnd);
[DllImport("user32.dll")]
static extern bool InvalidateRect(IntPtr hWnd, IntPtr lpRect, bool bErase);
public Form1()
{
InitializeComponent();
this.Load += Form1_Load;
}
void Form1_Load(object sender, EventArgs e)
{
Start();
}
IntPtr handle;
Graphics grp;
void Start()
{
handle = GetDC(IntPtr.Zero);
grp = Graphics.FromHdc(handle);
grp.SmoothingMode = SmoothingMode.HighQuality;
timer2.Start();
}
private void timer2_Tick(object sender, EventArgs e)
{
grp.DrawLine(Pens.Red, 0, Cursor.Position.Y, Screen.PrimaryScreen.Bounds.Width, Cursor.Position.Y);
InvalidateRect(IntPtr.Zero, IntPtr.Zero, false);
}
答案 0 :(得分:5)
创建具有半透明(或完全透明)背景的表单,该表单始终在顶部,无边框且与桌面大小相同。在该表单上执行任何屏幕截图矩形选择图形(例如,选定的矩形+指南+放大镜,完全不透明)。当用户进行选择时,隐藏表单并截取屏幕截图。