C# - 捕获鼠标光标图像 [英] C# - Capturing the Mouse cursor image
本文介绍了C# - 捕获鼠标光标图像的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
背景
- 我正在编写屏幕捕获应用程序
- 我的代码基于此项目: http://www.codeproject.com/KB/cs/ DesktopCaptureWithMouse.aspx?display = Print
- 请注意,代码也会捕获鼠标光标(这对我来说很合适)
MY PROBLEM
- 当鼠标光标为正常指针或手形图标 - 鼠标在屏幕截图上正确呈现
- 但是,当鼠标光标更改为插入点(I-beam光标)时 - 例如输入NOTEPAD - 不工作 - 结果是我得到一个微弱的光标图像 - 像一个非常半透明的(灰色)版本的它,而不是空白&
li>如果图像是这些I-beam类型图像之一,我如何捕获鼠标光标图像 - 注意:如果您点击原始文章有人提出建议 - 它不起作用
SOURCE
。
static Bitmap CaptureCursor(ref int x,ref int y)
{
Bitmap bmp;
IntPtr hicon;
Win32Stuff.CURSORINFO ci = new Win32Stuff.CURSORINFO();
Win32Stuff.ICONINFO icInfo;
ci.cbSize = Marshal.SizeOf(ci);
if(Win32Stuff.GetCursorInfo(out ci))
{
if(ci.flags == Win32Stuff.CURSOR_SHOWING)
{
hicon = Win32Stuff.CopyIcon .hCursor);
if(Win32Stuff.GetIconInfo(hicon,out icInfo))
{
x = ci.ptScreenPos.x - ((int)icInfo.xHotspot);
y = ci.ptScreenPos.y - ((int)icInfo.yHotspot);
图标ic = Icon.FromHandle(hicon);
bmp = ic.ToBitmap();
return bmp;
}
}
}
return null;
}
解决方案
ICONINFO结构包含两个成员hbmMask和hbmColor,它们包含掩码和颜色位图, (对于 ICONINFO 的MSDN页面)官方文档)。
当为默认游标调用GetIconInfo()时,ICONINFO结构包含有效的掩码和颜色位图,如下所示(注意:已添加以清楚地显示图像边界):
默认光标掩码位图