首页  编辑  

得到当前屏幕鼠标的图案

Tags: /C#/图形图像/   Date Created:

using System . Runtime . InteropServices;

[ StructLayout ( LayoutKind . Sequential)]

struct CURSORINFO

{

    public int cbSize;

    public int flags;

    public IntPtr hCursor;

    public Point ptScreenPos;

}

[ DllImport ( "user32.dll" )]

static extern bool GetCursorInfo( out CURSORINFO pci);

private const int CURSOR_SHOWING = 0x00000001 ;

private void button1_Click( object sender , EventArgs e)

{

    CURSORINFO vCurosrInfo;

   vCurosrInfo . cbSize = Marshal . SizeOf( typeof ( CURSORINFO ));

   GetCursorInfo( out vCurosrInfo);

    if ((vCurosrInfo . flags & CURSOR_SHOWING) != CURSOR_SHOWING) return ;

    Cursor vCursor = new Cursor (vCurosrInfo . hCursor);

    Graphics vGraphics = Graphics . FromHwnd(Handle);

    Rectangle vRectangle = new Rectangle ( 0 , 0 , 32 , 32 );

   vGraphics . FillRectangle( new SolidBrush (BackColor), vRectangle);

   vCursor . Draw(vGraphics, vRectangle);

}

//

private void button1_Click( object sender , EventArgs e)

{

    Bitmap vBitmap = new Bitmap ( Screen . PrimaryScreen . Bounds . Width,

        Screen . PrimaryScreen . Bounds . Height);

    Graphics vGraphics = Graphics . FromImage(vBitmap);

   vGraphics . CopyFromScreen( 0 , 0 , 0 , 0 , Screen . PrimaryScreen . Bounds . Size);

    CURSORINFO vCurosrInfo;

   vCurosrInfo . cbSize = Marshal . SizeOf( typeof ( CURSORINFO ));

   GetCursorInfo( out vCurosrInfo);

    if ((vCurosrInfo . flags & CURSOR_SHOWING) != CURSOR_SHOWING) return ;

    Cursor vCursor = new Cursor (vCurosrInfo . hCursor);

   

    Rectangle vRectangle = new Rectangle (

        Cursor . Position . X - vCursor . HotSpot . X,

        Cursor . Position . Y - vCursor . HotSpot . Y,

       vCursor . Size . Width, vCursor . Size . Height);

   vCursor . Draw(vGraphics, vRectangle);

   vBitmap . Save( @"c:\temp\temp.bmp" );

}