C# 案頭截屏 添加滑鼠

來源:互聯網
上載者:User

標籤:研究   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# 案頭截屏 添加滑鼠

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.