截图时光标不会隐藏

时间:2014-02-08 16:15:14

标签: c# cursor screenshot

简单的问题。我想截取屏幕的一部分而没有鼠标指针。我尝试了这个,但它不起作用。

private void button1_Click(object sender, EventArgs e)
{
   Cursor.Hide();
   gfxScreenshot.CopyFromScreen(//...);
   Cursor.Show();
}

上面的代码是在button_click事件上。我在timer_tick事件中传输了代码,除了从Cursor.Hide(),并使计时器的间隔为1000.单击按钮时计时器启动。

private void button1_Click(object sender, EventArgs e)
{
    Cursor.Hide();
    timer1.Start();
}

private void timer1_Tick(object sender, EventArgs e)
{          
    gfxScreenshot.CopyFromScreen(//...);
    Cursor.Show();
    timer1.Stop();
}

它以这种方式工作,但我必须等待1秒。当我将间隔减小到100时,指针在图像上可见 我只能假设hide方法比CopyFromScreen方法慢... 有没有办法让它在没有1秒延迟的情况下工作?

1 个答案:

答案 0 :(得分:0)

获取光标位置,移至(0,0),截屏,放回光标。代码使用API​​:

using System.Drawing;
using System.Runtime.InteropServices;
using System.Windows.Forms;

namespace Test1
{
    public partial class Form1 : Form
    {
        [DllImport("user32.dll")]
        public static extern bool SetCursorPos(int X, int Y);

        [DllImport("user32.dll")]
        public static extern bool GetCursorPos(out POINT lpPoint);

        [StructLayout(LayoutKind.Sequential)]
        public struct POINT
        {
            public int X;
            public int Y;

            public static implicit operator Point(POINT point)
            {
                return new Point(point.X, point.Y);
            }
        }

        public Form1()
        {
            InitializeComponent();

            POINT lpPoint;
            //Get current location of cursor
            GetCursorPos( out lpPoint );
            //Move to (0,0)
            SetCursorPos( 0, 0 );
            //Take screenshot
            //gfxScreenshot.CopyFromScreen(//...);
            MessageBox.Show("just for create a delay", "Debug", MessageBoxButtons.OK, MessageBoxIcon.Information);
            //Put back cursor
            SetCursorPos( lpPoint.X, lpPoint.Y );
        }
    }
}