C# 抓屏程序

原创 2006年05月31日 12:51:00

由于工作关系,常常需要将一些软件的内容抓屏保存下来,原来抓的屏不是很多,一直采用Ctrl+C,Ctrl+V,另存的方法。最近几次,由于工作量比较大,差点累得手抽筋。于是找了个抓屏软件,但是其功能太强大了,哈哈。还是自己弄一个比较好。

1[静心编程]blog中提到:

           // 模拟按键,将当前窗口图像截取到剪贴板:
            SendKeys.SendWait("%{PRTSC}"); //
模拟 Alt+PrtSc,如果要截取整个屏幕,把 Alt (%) 去掉

//获取剪贴板里的图像:
            Bitmap myCapture = (Bitmap)Clipboard.GetDataObject().GetData(DataFormats.Bitmap);
            //
要显示图像可以这么做:
            //  this.pictureBox1.Image = myCapture;
            //
要保存图像可以这么做:
            myCapture.Save(mysettingForm.savepath + savename + ".jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
   2
。那么怎么让软件在后台捕获键盘呢。

        [DllImport("user32.dll", SetLastError = true)]
        public static extern bool RegisterHotKey(IntPtr hWnd,// handle to window
        int id, // hot key identifier
        KeyModifiers fsModifiers, // key-modifier options
        Keys vk // virtual-key code
        );

        [DllImport("user32.dll", SetLastError = true)]
        public static extern bool UnregisterHotKey(IntPtr hWnd,// handle to window
        int id // hot key identifier
        );

        [Flags()]
        public enum KeyModifiers
        {
            None = 0,
            Alt = 1,
            Control = 2,
            Shift = 4,
            Windows = 8
        }

        protected override void WndProc(ref Message m)//循环监视Windows消息

{}

是我的选择。

3。最后加上,保存路径和保存名字等一些无关紧要的东西。

源码如下:

//////////////////Form1.cs/////////////////////////////////

      [DllImport("user32.dll", SetLastError = true)]
        public static extern bool RegisterHotKey(IntPtr hWnd,// handle to window
        int id, // hot key identifier
        KeyModifiers fsModifiers, // key-modifier options
        Keys vk // virtual-key code
        );

        [DllImport("user32.dll", SetLastError = true)]
        public static extern bool UnregisterHotKey(IntPtr hWnd,// handle to window
        int id // hot key identifier
        );

        [Flags()]
        public enum KeyModifiers
        {
            None = 0,
            Alt = 1,
            Control = 2,
            Shift = 4,
            Windows = 8
        }

        private Setting mysettingForm = new Setting ();

        private int number = 0;//保存一系列同名图像时的编号
        private  string oldname = "Helios";

        private void printprocess()
        {
            //
模拟按键,将当前窗口图像截取到剪贴板:
            SendKeys.SendWait("%{PRTSC}"); //
模拟 Alt+PrtSc,如果要截取整个屏幕,把 Alt (%) 去掉
            // SendKeys.SendWait("{PRTSC}"); //
模拟 Alt+PrtSc,如果要截取整个屏幕,把 Alt (%) 去掉

            // 获取剪贴板里的图像:
            Bitmap myCapture = (Bitmap)Clipboard.GetDataObject().GetData(DataFormats.Bitmap);
            //
要显示图像可以这么做:
            //  this.pictureBox1.Image = myCapture;
            //
要保存图像可以这么做:
            if (oldname != mysettingForm.savename)//
判断存档名字是否变化
                number = 0;

            string savename = mysettingForm.savename + (++number).ToString().PadLeft(5, '0');
            myCapture.Save(mysettingForm.savepath + savename + ".jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
           
            oldname = mysettingForm.savename;   //
保留当前存档名字
      
            Clipboard.Clear();

        }

       
        private void Form1_Load(object sender, EventArgs e)
        {
            RegisterHotKey(Handle, 100, 0,Keys.F2 );//mysettingForm.shortcutKey
            this.Visible = false;
        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            UnregisterHotKey(Handle, 100);//
卸载快捷键
        }

        protected override void WndProc(ref Message m)//循环监视Windows消息
        {
            const int WM_HOTKEY = 0x0312;//
按快捷键
            switch (m.Msg)
            {
                case WM_HOTKEY:

                    printprocess();//调用主处理程序
                    break;
            }
            base.WndProc(ref m);
        }

        private void 退出ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }

        private void 关于ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            MessageBox.Show("
抓屏软件V0.2  By Helios ", "抓屏软件V0.2", MessageBoxButtons.OK);
        }

        private void 设置ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.mysettingForm.Visible = true;
            mysettingForm.Show(); 
        }

/////////////////////////////////////settingform.cs/////////////////////////////////////////////////////////////////////

       public string savepath = @"C:/";
        public string savename = "Helios";


        private void OK_Click(object sender, EventArgs e)
        {
            savepath = textBox1.Text;
            savename = textBoxsaveName.Text;
            this.Visible  = false;
        }

        private void view_Click(object sender, EventArgs e)
        {
            DialogResult Result = folderBrowserDialog1.ShowDialog();
            if (Result == DialogResult.OK)
                textBox1.Text = folderBrowserDialog1.SelectedPath;
        }


        private void Default_Click(object sender, EventArgs e)
        {
            savepath = @"C:/";
            savename = "Helios";
            textBoxsaveName.Text = savename;
            textBox1.Text = savepath;
            //this.Visible = false;
        }

        private void Apply_Click(object sender, EventArgs e)
        {
            savepath = textBox1.Text;
            savename = textBoxsaveName.Text;
        }

        private void textBoxsaveName_TextChanged(object sender, EventArgs e)
        {
            this.Apply.Enabled = true;
        }

        private void Setting_Load(object sender, EventArgs e)
        {
            this.Apply.Enabled = false;
        }

 

相关文章推荐

一段用C#写的抓屏小程序

  • 2008年12月29日 11:35
  • 108KB
  • 下载

c# Winform/WPF 开发分屏显示应用程序

分屏显示即可把一台主机内运行的多个程序分别显示在不同的两个(或多个)屏幕上。目前市面上主流的显卡都支持分屏显示(显示双屏幕),如果需要显示2个以上的屏幕,则应使用“拖机卡”类的硬件。 设置分屏显示的...
  • soft2buy
  • soft2buy
  • 2011年12月18日 23:34
  • 12824

C#winform程序窗口全屏是否遮盖任务栏问题

转 http://blog.csdn.net/hbqhdlc/article/details/4499526   在作winform程序时遇到窗口如果全屏时,遮盖任务栏的问题,从网上搜到如...

wince程序实现横屏显示、设备当前电量(C#)

之前,我就在考虑 怎么实现,在网上找到了好多C写的 但是C#还少啊。但是还是谢谢网上帮助的兄弟姐妹,谢谢你们! 先看下效果图: 1.程序第一个图 2. 点击【横屏显示】效果 3. 还原...
  • li0531
  • li0531
  • 2012年08月29日 13:49
  • 1718

c# Winform 开发分屏显示应用程序

c# Winform 开发分屏显示应用程序

C#截屏程序实现(随笔日记)

主窗体代码,其实就是一个winform窗体,去掉border,全屏展示屏幕的截屏,在winform上划取矩形然后按坐标截图 生成图片,呵呵 工作之余的小玩具using System;using Sys...

C#任意位置截屏小程序

  • 2015年11月07日 12:03
  • 38KB
  • 下载

C# 屏幕截屏广播程序 WCF双工通信

  • 2013年08月19日 18:38
  • 406KB
  • 下载

C# winform 安装程序打包(自定义操作)

(一),安装程序 以前用vs制作过安装程序,现在把步骤写出来,有帮助的大家一定要顶哦 第一步:建立工程 1.打开vs,新建项目->其他项目类型->安装和部署(這個子项下面有安装项目和We...

表白程序 全屏玫瑰花 C#

  • 2017年06月08日 10:54
  • 4.52MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C# 抓屏程序
举报原因:
原因补充:

(最多只允许输入30个字)