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#抓屏

要想完成这个功能,首先要了解一下在C#中如何调用API(应用程序接口)函数。虽然在.Net框架中已经提供了许多类库,这些类库的功能也十分强大,但对于一些Windows底层编程来说,还是要通过调用这些A...
  • 21aspnet
  • 21aspnet
  • 2007年03月24日 13:44
  • 3219

java抓屏程序

package com.tomtop.test; import java.awt.Dimension; import java.awt.Rectangle; import java.awt.Ro...
  • css470895871
  • css470895871
  • 2014年06月18日 11:09
  • 555

VC/MFC 使用GDI实现抓屏

抓屏的实现            最近研究了抓屏的功能,抓屏过后把图片保持成JPG图像格式,百度、Google了好一阵终于有点明白了,特此在这里写下来和大家一起分享。       微软规...
  • sanshao1314
  • sanshao1314
  • 2013年03月21日 23:01
  • 1165

windows抓屏(截屏)实现方法

在windows系统中,抓取当前桌面的屏幕有很多方法,比较常用的是GDI和mirror两种方式,除此以外,利用ddraw和dxgi(windows7以上系统支持)方式也可以抓取屏幕。由于mirror的...
  • shenyi0106
  • shenyi0106
  • 2017年02月21日 10:10
  • 4340

C#抓屏

要想完成这个功能,首先要了解一下在C#中如何调用API(应用程序接口)函数。虽然在.Net框架中已经提供了许多类库,这些类库的功能也十分强大,但对于一些Windows底层编程来说,还是要通过调用这些A...
  • linleiqin
  • linleiqin
  • 2010年11月01日 20:55
  • 204

SDK 抓屏程序

    学习编程也有一段时间了,一开始想过抓屏是怎么做的。经过一段时间积累,确实有所长进呵。    首先抓屏我认为分两个部份:首先取得某个窗口的句柄进而取得该窗口DC内容;其次由该窗口设备DC内容生成...
  • vlirqin
  • vlirqin
  • 2008年11月29日 16:33
  • 600

抓屏程序

import java.awt.Dimension; import java.awt.Rectangle; import java.awt.Robot; import java.awt.Toolkit...
  • albg_boy
  • albg_boy
  • 2017年11月13日 09:59
  • 128

用c#抓屏

using System;using System.Windows.Forms;using System.Drawing;using System.Drawing.Imaging;using Syst...
  • yjyb
  • yjyb
  • 2007年09月21日 23:10
  • 1336

C#抓屏

要想完成这个功能,首先要了解一下在C#中如何调用API(应用程序接口)函数。虽然在.Net框架中已经提供了许多类库,这些类库的功能也十分强大,但对于一些Windows底层编程来说,还是要通过调用这些A...
  • liyingju
  • liyingju
  • 2007年05月30日 13:30
  • 744

WINDOWS抓屏的各种方法

原文地址:http://www.cnblogs.com/fence/archive/2010/01/18/1651100.html 转载请注明原地址,这样自己也便于记录,别人读的也方便。---jia...
  • jia_zhengshen
  • jia_zhengshen
  • 2013年07月19日 17:50
  • 2640
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C# 抓屏程序
举报原因:
原因补充:

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