文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

怎么用C#做Screen Capture程序

2023-06-17 23:44

关注

这篇文章主要讲解了“怎么用C#做Screen Capture程序”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用C#做Screen Capture程序”吧!

在掌握了一些C#源代码后,可以得到用C#做Screen Capture程序的源代码(Capture.cs),具体如下:

  1. using System ;  

  2. using System.Drawing ;  

  3. using System.Collections ;  

  4. using System.ComponentModel ;  

  5. using System.Windows.Forms ;  

  6. using System.Data ;  

  7. using System.Drawing.Imaging ;  

  8. using System.IO ;  

  9. //导入在程序中使用到的名称空间  

  10. public class Capture : Form  

  11. {  

  12. private System.ComponentModel.Container components = null ;  

  13. private Icon mNetTrayIcon = new Icon ( "Tray.ico" ) ;  

  14. private Bitmap MyImage = null ;  

  15. private NotifyIcon TrayIcon ;  

  16. private ContextMenu notifyiconMnu ;  

  17. public Capture ( )  

  18. {  

  19. //初始化窗体中使用到的组件  

  20. InitializeComponent ( ) ;  

  21. }  

  22. protected override void OnActivated ( EventArgs e )  

  23. {  

  24. this.Hide ( ) ;  

  25. }  

  26. [ System.Runtime.InteropServices.DllImportAttribute ( "gdi32.dll" ) ]  

  27. private static extern bool BitBlt (  

  28. IntPtr hdcDest , //目标设备的句柄  

  29. int nXDest , // 目标对象的左上角的X坐标  

  30. int nYDest , // 目标对象的左上角的X坐标  

  31. int nWidth , // 目标对象的矩形的宽度  

  32. int nHeight , // 目标对象的矩形的长度  

  33. IntPtr hdcSrc , // 源设备的句柄  

  34. int nXSrc , // 源对象的左上角的X坐标  

  35. int nYSrc , // 源对象的左上角的X坐标  

  36. System.Int32 dwRop // 光栅的操作值  

  37. ) ;  

  38. [ System.Runtime.InteropServices.DllImportAttribute ( "gdi32.dll" ) ]  

  39. private static extern IntPtr CreateDC (  

  40. string lpszDriver , // 驱动名称  

  41. string lpszDevice , // 设备名称  

  42. string lpszOutput , // 无用,可以设定位"NULL"  

  43. IntPtr lpInitData // 任意的打印机数据  

  44. ) ;  

  45. public void capture ( object sender , System.EventArgs e )  

  46. {  

  47. this.Visible = false ;  

  48. IntPtr dc1 = CreateDC ( "DISPLAY" , null , null , ( IntPtr ) null ) ;  

  49. //创建显示器的DC  

  50. Graphics g1 = Graphics.FromHdc ( dc1 ) ;  

  51. //由一个指定设备的句柄创建一个新的Graphics对象  

  52. MyImage = new Bitmap ( Screen.PrimaryScreen.Bounds.Width , 
    Screen.PrimaryScreen.Bounds.Height , g1 ) ;  

  53. //根据屏幕大小创建一个与之相同大小的Bitmap对象  

  54. Graphics g2 = Graphics.FromImage ( MyImage ) ;  

  55. //获得屏幕的句柄  

  56. IntPtr dc3 = g1.GetHdc ( ) ;  

  57. //获得位图的句柄  

  58. IntPtr dc2 = g2.GetHdc ( ) ;  

  59. //把当前屏幕捕获到位图对象中  

  60. BitBlt ( dc2 , 0 , 0 , Screen.PrimaryScreen.Bounds.Width , 
    Screen.PrimaryScreen.Bounds.Height , dc3 , 0 , 0 , 13369376 ) ;  

  61. //把当前屏幕拷贝到位图中  

  62. g1.ReleaseHdc ( dc3 ) ;  

  63. //释放屏幕句柄  

  64. g2.ReleaseHdc ( dc2 ) ;  

  65. //释放位图句柄  

  66. MyImage.Save ( "c:\\MyJpeg.jpg" , ImageFormat.Jpeg ) ;  

  67. MessageBox.Show ( "已经把当前屏幕保存到C:\\MyJpeg.jpg文件中!" ) ;  

  68. this.Visible = true ;  

  69. }  

  70. public void ExitSelect ( object sender , System.EventArgs e )  

  71. {  

  72. //隐藏托盘程序中的图标  

  73. TrayIcon.Visible = false ;  

  74. //关闭系统  

  75. this.Close ( ) ;  

  76. }  

  77. //清除程序中使用过的资源  

  78. public override void Dispose ( )  

  79. {  

  80. base.Dispose ( ) ;  

  81. if ( components != null )  

  82. components.Dispose ( ) ;  

  83. }  

  84. private void InitializeComponent ( )  

  85. {  

  86. //设定托盘程序的各个属性  

  87. TrayIcon = new NotifyIcon ( ) ;  

  88. TrayIcon.Icon = mNetTrayIcon ;  

  89. TrayIcon.Text = "用C#做Screen Capture程序" ;  

  90. TrayIcon.Visible = true ;  

  91. //定义一个MenuItem数组,并把此数组同时赋值给ContextMenu对象  

  92. MenuItem [ ] mnuItms = new MenuItem [ 3 ] ;  

  93. mnuItms [ 0 ] = new MenuItem ( ) ;  

  94. mnuItms [ 0 ] .Text = "捕获当前屏幕!" ;  

  95. mnuItms [ 0 ] .Click += new System.EventHandler ( this.capture ) ;  

  96. mnuItms [ 1 ] = new MenuItem ( "-" ) ;  

  97. mnuItms [ 2 ] = new MenuItem ( ) ;  

  98. mnuItms [ 2 ] .Text = "退出系统" ;  

  99. mnuItms [ 2 ] .Click += new System.EventHandler ( this.ExitSelect ) ;  

  100. mnuItms [ 2 ] .DefaultItem = true ;  

  101. notifyiconMnu = new ContextMenu ( mnuItms ) ;  

  102. TrayIcon.ContextMenu = notifyiconMnu ;  

  103. //为托盘程序加入设定好的ContextMenu对象  

  104. this.SuspendLayout ( ) ;  

  105. this.AutoScaleBaseSize = new System.Drawing.Size ( 5 , 13 ) ;  

  106. this.ClientSize = new System.Drawing.Size ( 320 , 56 ) ;  

  107. this.ControlBox = false ;  

  108. this.MaximizeBox = false ;  

  109. this.MinimizeBox = false ;  

  110. this.WindowState = System.Windows.Forms.FormWindowState.Minimized ;  

  111. this.Name = "capture" ;  

  112. this.ShowInTaskbar = false ;  

  113. this.Text = "用C#做Screen Capture程序!" ;  

  114. this.ResumeLayout ( false ) ;  

  115. }  

  116. static void Main ( )  

  117. {  

  118. Application.Run ( new Capture ( ) ) ;  

  119. }  

  120. }  

感谢各位的阅读,以上就是“怎么用C#做Screen Capture程序”的内容了,经过本文的学习后,相信大家对怎么用C#做Screen Capture程序这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯