ホームページ >バックエンド開発 >C#.Net チュートリアル >画面画像をキャプチャするために PrintScreen および Alt+PrintScreen をシミュレートする C# のサンプル コード共有 (写真)
C# PrintScreen と Alt+PrintScreen をシミュレートして画面の画像をキャプチャします
Function 関数: この関数はキーストローク イベントを合成します。システムは、この合成されたキーストローク イベントを使用して 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 中国語 Web サイトの他の関連記事を参照してください。