C# PrintScreen 및 Alt+PrintScreen을 시뮬레이션하여 화면 사진 캡처
함수: 이 함수는 키 입력 이벤트를 합성합니다. 시스템은 이 합성된 키 입력 이벤트를 사용하여 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// 与键盘动作关联的辅加信息 ); /// <summary> /// 模拟Print Screen键盘消息,截取全屏图片。 /// </summary> 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(); } /// <summary> /// 模拟Alt Print Screen键盘消息,截取当前窗口图片。 /// </summary> 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) { } /// <summary> /// 从剪贴板获取图片 /// </summary> /// <returns></returns> 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(); } } }
PrintScreen에는 작업 문제가 없지만 AltPrintScreen을 사용하는 경우 처음에는 항상 올바른 사진을 얻을 수 없는데 왜 그런지 모르겠습니다! 전문가가 지나가셔서 조언을 해주시면 정말 감사하겠습니다!
위 내용은 화면 그림(그림)을 캡처하기 위해 PrintScreen 및 Alt+PrintScreen을 시뮬레이션하기 위한 C# 샘플 코드 공유의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!