C#開発例 - カスタマイズスクリーンショットツール (2) プロジェクト作成、ホットキー登録、スクリーンショットメインウィンドウ表示
開発環境
オペレーティングシステム: Windows Server 2008 R2
統合開発環境(IDE): Microsoft Visual Studio 2010
開発言語:c#
プロジェクトを作成
ファイル》新規》プロジェクト
.NET Framework はバージョン 2.0 またはバージョン 4.0 を選択できます。
プロジェクト タイプの選択: Windows フォーム アプリケーション
プロジェクト名を入力して確認します
以下に示すように、プロジェクトが正常に作成されました。
メインフォームのプロパティを変更します
フォームの「
FormBorderStyle」プロパティを「none」に変更して、枠なしフォームを実装します
ウィンドウを変更した後デザイナーでの表示は次のとおりです:
他の
属性の説明:
ShowIcon=False、いいえ フォームのアイコンを表示します。
ShowInTaskbar=False、フォームが Windows タスクバーに表示されないようにします。 SizeGripStyle=Hide、フォームの右下隅をドラッグして変更する機能を無効にします。サイズ; WindowsState=Minimized、ウィンドウの起動後、最小化します。 これらのプロパティを設定した後、コンパイルして実行すると、プログラムは実行されます状態
を実装するには、ホットキー関数WindowsAPIを使用して登録する必要があります
ホットキー: RegisterHotこの関数は、システム全体の
ホットキーを定義します。 関数プロトタイプ: BOOL RegisterHotKey(HWND hWnd, int id, UINT fsModifiers, UINT vk); ホットキー登録のキャンセル: UnregisterHotKeyこの関数は、呼び出しスレッドによって以前に登録されたホットキーを解放します。
ホットキー ID を取得:
GlobalAddAtom
デスクトップ アプリケーションのみ。 グローバル アトム テーブルに string
を追加し、この文字列の一意の識別子 (アトム ATOM) を返します。 APIとローカル変数定義:
/// <summary> /// 向全局原子表添加一个字符串,并返回这个字符串的唯一标识符(原子ATOM)。 /// </summary> /// <param name="lpString">自己设定的一个字符串</param> /// <returns></returns> [System.Runtime.InteropServices.DllImport("Kernel32.dll")] public static extern Int32 GlobalAddAtom(string lpString); /// <summary> /// 注册热键 /// </summary> /// <param name="hWnd"></param> /// <param name="id"></param> /// <param name="fsModifiers"></param> /// <param name="vk"></param> /// <returns></returns> [System.Runtime.InteropServices.DllImport("user32.dll")] public static extern bool RegisterHotKey(IntPtr hWnd, int id, uint fsModifiers, Keys vk); /// <summary> /// 取消热键注册 /// </summary> /// <param name="hWnd"></param> /// <param name="id"></param> /// <returns></returns> [System.Runtime.InteropServices.DllImport("user32.dll")] public static extern bool UnregisterHotKey(IntPtr hWnd, int id); /// <summary> /// 热键ID /// </summary> public int hotKeyId = 100; /// <summary> /// 热键模式:0=Ctrl + Alt + A, 1=Ctrl + Shift + A /// </summary> public int HotKeyMode = 1; /// <summary> /// 控制键的类型 /// </summary> public enum KeyModifiers : uint { None = 0, Alt = 1, Control = 2, Shift = 4, Windows = 8 } /// <summary> /// 用于保存截取的整个屏幕的图片 /// </summary> protected Bitmap screenImage;
private void Form1_Load(object sender, EventArgs e)
{
//隐藏窗口
this.Hide();
//注册快捷键
//注:HotKeyId的合法取之范围是0x0000到0xBFFF之间,GlobalAddAtom函数得到的值在0xC000到0xFFFF之间,所以减掉0xC000来满足调用要求。
this.hotKeyId = GlobalAddAtom("Screenshot") - 0xC000;
if (this.hotKeyId == 0)
{
//如果获取失败,设定一个默认值;
this.hotKeyId = 0xBFFE;
}
if (this.HotKeyMode == 0)
{
RegisterHotKey(Handle, hotKeyId, (uint)KeyModifiers.Control | (uint)KeyModifiers.Alt, Keys.A);
}
else
{
RegisterHotKey(Handle, hotKeyId, (uint)KeyModifiers.Control | (uint)KeyModifiers.Shift, Keys.A);
}
}
ログイン後にコピーホットキー応答関数: /// <summary>
/// 处理快捷键事件
/// </summary>
/// <param name="m"></param>
protected override void WndProc(ref Message m)
{
//if (m.Msg == 0x0014)
//{
// return; // 禁掉清除背景消息
//}
const int WM_HOTKEY = 0x0312;
switch (m.Msg)
{
case WM_HOTKEY:
ShowForm();
break;
default:
break;
}
base.WndProc(ref m);
}
ログイン後にコピー
スクリーンショットウィンドウ実装の原則スクリーンショットウィンドウは、実際には境界線、メニュー、ツールバーのないウィンドウです。画面上部のウィンドウ。 ホットキーが押されると、プログラムは最初に画面全体の画像を取得して「screenImage」変数に保存し、次にマスク レイヤーを追加してフォームの背景画像として設定し、ウィンドウ サイズを次のように設定します。メイン画面のサイズは、デスクトップに半透明のマスクレイヤーを追加するような感じのウィンドウを表示します。 コードは次のとおりです: private void Form1_Load(object sender, EventArgs e) { //隐藏窗口 this.Hide(); //注册快捷键 //注:HotKeyId的合法取之范围是0x0000到0xBFFF之间,GlobalAddAtom函数得到的值在0xC000到0xFFFF之间,所以减掉0xC000来满足调用要求。 this.hotKeyId = GlobalAddAtom("Screenshot") - 0xC000; if (this.hotKeyId == 0) { //如果获取失败,设定一个默认值; this.hotKeyId = 0xBFFE; } if (this.HotKeyMode == 0) { RegisterHotKey(Handle, hotKeyId, (uint)KeyModifiers.Control | (uint)KeyModifiers.Alt, Keys.A); } else { RegisterHotKey(Handle, hotKeyId, (uint)KeyModifiers.Control | (uint)KeyModifiers.Shift, Keys.A); } }
/// <summary> /// 处理快捷键事件 /// </summary> /// <param name="m"></param> protected override void WndProc(ref Message m) { //if (m.Msg == 0x0014) //{ // return; // 禁掉清除背景消息 //} const int WM_HOTKEY = 0x0312; switch (m.Msg) { case WM_HOTKEY: ShowForm(); break; default: break; } base.WndProc(ref m); }
/// <summary> /// 如果窗口为可见状态,则隐藏窗口; /// 否则则显示窗口 /// </summary> protected void ShowForm() { if (this.Visible) { this.Hide(); } else { Bitmap bkImage = new Bitmap(Screen.AllScreens[0].Bounds.Width, Screen.AllScreens[0].Bounds.Height); Graphics g = Graphics.FromImage(bkImage); g.CopyFromScreen(new Point(0, 0), new Point(0, 0), Screen.AllScreens[0].Bounds.Size, CopyPixelOperation.SourceCopy); screenImage = (Bitmap)bkImage.Clone(); g.FillRectangle(new SolidBrush(Color.FromArgb(64, Color.Gray)), Screen.PrimaryScreen.Bounds); this.BackgroundImage = bkImage; this.ShowInTaskbar = false; this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; this.Width = Screen.PrimaryScreen.Bounds.Width; this.Height = Screen.PrimaryScreen.Bounds.Height; this.Location = Screen.PrimaryScreen.Bounds.Location; this.WindowState = FormWindowState.Maximized; this.Show(); } }
/// <summary> /// 当窗口正在关闭时进行验证 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Form1_FormClosing(object sender, FormClosingEventArgs e) { if (e.CloseReason == CloseReason.ApplicationExitCall) { e.Cancel = false; UnregisterHotKey(this.Handle, hotKeyId); } else { this.Hide(); e.Cancel = true; } }
注: このコードをテストするときは、スクリーンショット ウィンドウを閉じるか非表示にするボタンをフォームに追加するのが最善です。スクリーンショット ウィンドウは全画面表示であり、ESC キーに反応することができず、終了することしかできません。タスクマネージャープロセス終了を介して。 デバッグする場合、必要な変数情報を表示するにはフォームにラベル コントロール を追加するのが最善です。これは、スクリーンショット ウィンドウがトップレベルの全画面ウィンドウであり、ブレークポイントが設定されている場合に VS を操作する方法がないためです。打つ。
以上がC#開発例 - カスタマイズスクリーンショットツール (2) プロジェクト作成、ホットキー登録、スクリーンショットメインウィンドウ表示の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











C# を使用した Active Directory のガイド。ここでは、Active Directory の概要と、C# での動作方法について、構文と例とともに説明します。

C# データ グリッド ビューのガイド。ここでは、SQL データベースまたは Excel ファイルからデータ グリッド ビューをロードおよびエクスポートする方法の例について説明します。

マルチスレッドと非同期の違いは、マルチスレッドが複数のスレッドを同時に実行し、現在のスレッドをブロックせずに非同期に操作を実行することです。マルチスレッドは計算集約型タスクに使用されますが、非同期はユーザーインタラクションに使用されます。マルチスレッドの利点は、コンピューティングのパフォーマンスを改善することですが、非同期の利点はUIスレッドをブロックしないことです。マルチスレッドまたは非同期を選択することは、タスクの性質に依存します。計算集約型タスクマルチスレッド、外部リソースと相互作用し、UIの応答性を非同期に使用する必要があるタスクを使用します。
