C#模拟PrintScreen和Alt+PrintScreen截取屏幕图片的示例代码分享(图)

c# 模拟printscreen 和 alt+printscreen截取屏幕图片

keybd_event API

函数功能:该函数合成一次击键事件。系统可使用这种合成的击键事件来产生WM_KEYUP或WM_KEYDOWN消息,键盘驱动程序的中断处理程序调用keybd_event函数。在Windows NT中该函数己被使用SendInput来替代它。

函数原型;VOID keybd_event(BYTE bVk,BYTE bScan,DWORD dwFlags,DWORD dwExtralnfo);

参数:

bVk:定义一个虚拟键码。键码值必须在1~254之间。
  bScan:定义该键的硬件扫描码。
  dwFlags:定义函数操作的各个方面的一个标志位集。应用程序可使用如下一些预定义常数的组合设置标志位。
  KEYEVENTF_EXTENDEDKEY:若指定该值,则扫描码前一个值为OXEO(224)的前缀字节。 
  KEYEVENTF_KEYUP:若指定该值,该键将被释放;若未指定该值,该键将被按下。
  dwExtralnfo:定义与击键相关的附加的32位值。
  返回值:该函数无返回值。

完整代码:

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using System.Runtime.InteropServices;namespace PrintScreen{    public partial class Form1 : Form    {        [DllImport("user32.dll")]        static extern void keybd_event        (            byte bVk,// 虚拟键值              byte bScan,// 硬件扫描码              uint dwFlags,// 动作标识              IntPtr dwExtraInfo// 与键盘动作关联的辅加信息          );        ///         /// 模拟Print Screen键盘消息,截取全屏图片。        ///         public void PrintScreen()        {            keybd_event((byte)0x2c, 0, 0x0, IntPtr.Zero);//down            Application.DoEvents();             keybd_event((byte)0x2c, 0, 0x2, IntPtr.Zero);//up            Application.DoEvents();         }        ///         /// 模拟Alt Print Screen键盘消息,截取当前窗口图片。        ///         public void AltPrintScreen()        {            keybd_event((byte)Keys.Menu, 0, 0x0, IntPtr.Zero);            keybd_event((byte)0x2c, 0, 0x0, IntPtr.Zero);//down            Application.DoEvents();            Application.DoEvents();            keybd_event((byte)0x2c, 0, 0x2, IntPtr.Zero);//up            keybd_event((byte)Keys.Menu, 0, 0x2, IntPtr.Zero);            Application.DoEvents();            Application.DoEvents();        }         public Form1()        {            InitializeComponent();        }        private void Form1_Load(object sender, EventArgs e)        {        }        ///         /// 从剪贴板获取图片        ///         ///         private Bitmap GetScreenImage()        {            IDataObject newobject = null;            Bitmap NewBitmap = null;            try            {                Application.DoEvents();                newobject = Clipboard.GetDataObject();                if (Clipboard.ContainsImage())                {                    NewBitmap = (Bitmap)(Clipboard.GetImage().Clone());                }                return NewBitmap;            }            catch(Exception ex)            {                Console.WriteLine(ex.Message);                return null;            }        }        private void button1_Click(object sender, EventArgs e)        {            button1.Enabled = false;            pictureBox1.Image = null;            PrintScreen();            pictureBox1.Image = GetScreenImage();            button1.Enabled = true;            Application.DoEvents();        }        private void button2_Click(object sender, EventArgs e)        {            button2.Enabled = false;            pictureBox1.Image = null;            AltPrintScreen();            pictureBox1.Image = GetScreenImage();            button2.Enabled = true;            Application.DoEvents();        }    }}

登录后复制

运行效果:

C#模拟PrintScreen和Alt+PrintScreen截取屏幕图片的示例代码分享(图)

遗留问题:

PrintScreen没有任务问题,但使用AltPrintScreen时第一次总是不能得到正确的图片,不知道是为什么!希望高手路过指点一二,小弟不胜感激!

以上就是C#模拟PrintScreen和Alt+PrintScreen截取屏幕图片的示例代码分享(图)的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2549615.html

(0)
上一篇 2025年3月6日 05:45:28
下一篇 2025年3月5日 00:31:20

AD推荐 黄金广告位招租... 更多推荐

发表回复

登录后才能评论