標籤:研究 struct sys nim static info rsh 顯示
#region 第一種方法
[DllImport("user32.dll")] static extern bool GetCursorInfo(out CURSORINFO pci); private const Int32 CURSOR_SHOWING = 0x00000001; [StructLayout(LayoutKind.Sequential)] struct POINT { public Int32 x; public Int32 y; } [StructLayout(LayoutKind.Sequential)] struct CURSORINFO { public Int32 cbSize; public Int32 flags; public IntPtr hCursor; public POINT ptScreenPos; }
public Image GetScreenImage()
{
Image myimage = new Bitmap(Screen.PrimaryScreen.WorkingArea.Width, Screen.PrimaryScreen.WorkingArea.Height);
Graphics g = Graphics.FromImage(myimage);
g.CopyFromScreen(new Point(0, 0), new Point(0, 0), new Size(Screen.PrimaryScreen.WorkingArea.Width, Screen.PrimaryScreen.WorkingArea.Height));
//先截屏後,然後找到滑鼠的位置,後將滑鼠畫上去
CURSORINFO pci;
pci.cbSize = Marshal.SizeOf(typeof(CURSORINFO));
GetCursorInfo(out pci);
System.Windows.Forms.Cursor cur = new System.Windows.Forms.Cursor(pci.hCursor);
cur.Draw(g, new Rectangle(pci.ptScreenPos.x - 10, pci.ptScreenPos.y - 10, cur.Size.Width, cur.Size.Height));
return myimage;
}
#endregion
#region 使用在顯存中擷取
IntPtr dc1 = CreateDC("DISPLAY", null, null, (IntPtr)null);
//建立顯示器的DC
Graphics g1 = Graphics.FromHdc(dc1);
//由一個指定裝置的控制代碼建立一個新的Graphics對象
Bitmap MyImage = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, g1);
//根據螢幕大小建立一個與之相同大小的Bitmap對象
Graphics g2 = Graphics.FromImage(MyImage);
//獲得螢幕的控制代碼
IntPtr dc3 = g1.GetHdc();
//獲得位元影像的控制代碼
IntPtr dc2 = g2.GetHdc();
//把當前螢幕捕獲到位元影像對象中
BitBlt(dc2, 0, 0, Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, dc3, 0, 0, 13369376);
//CURSORINFO pci;
//pci.cbSize = Marshal.SizeOf(typeof(CURSORINFO));
//GetCursorInfo(out pci);
//System.Windows.Forms.Cursor cur = new System.Windows.Forms.Cursor(pci.hCursor);
//cur.Draw(g2, new Rectangle(pci.ptScreenPos.x - 10, pci.ptScreenPos.y - 10, cur.Size.Width, cur.Size.Height));
//把當前螢幕拷貝到位元影像中
g1.ReleaseHdc(dc3);
//釋放螢幕控制代碼
g2.ReleaseHdc(dc2);
#endregion
不過做成windows服務中擷取到螢幕的,先這樣,等研究出來再說
C# 案頭截屏 添加滑鼠