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" );
}