C# 抓屏程序

由于工作关系,常常需要将一些软件的内容抓屏保存下来,原来抓的屏不是很多,一直采用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语言最早在1972年被Dennis Ritchie发明,它被设计成能够直接控制硬件,让程序员可以调用操作系统功能、访问硬件设备等,这就是C语言的强大之处,正因为如此,它在操作系统、嵌入式、游戏开发等领域得到了广泛的应用。那么,如何使用C语言呢? 我们可以通过学习C语言的基本语法,包括变量、数据类型、运算符、控制语句、循环等,理解程序的基本结构和组成部分。在编写代码时,需要考虑到程序的逻辑性、实用性和可读性,这有助于提高程序的质量和代码效率。除此之外,还需要了解C标准库中提供的函数和数据结构,例如字符串处理函数、数学函数、文件操作函数等,熟练掌握这些可以使你的代码更加简洁、高效。 在编程前,我们需要利用编辑器或集成开发环境(IDE)来编写和调试代码。常用的C语言IDE有Visual Studio、Dev-C++、Code::Blocks等,这些软件可以提供代码高亮、自动补全和调试等功能,有助于提高编码效率和代码稳定性。 最后,建议多研究C语言的相关文献和教程,尤其是经典著作《The C Programming Language》(《C程序设计语言》),了解C语言的发展历程和重要特性。实践是最好的学习方式,多写一些小程序和项目,这有助于增强你的编程能力和理解C语言的使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值