目次
開発環境
プロジェクトを作成" >プロジェクトを作成
ホームページ バックエンド開発 C#.Net チュートリアル C#開発例 - カスタマイズスクリーンショットツール (2) プロジェクト作成、ホットキー登録、スクリーンショットメインウィンドウ表示

C#開発例 - カスタマイズスクリーンショットツール (2) プロジェクト作成、ホットキー登録、スクリーンショットメインウィンドウ表示

Mar 14, 2017 pm 01:19 PM

開発環境

オペレーティングシステム: Windows Server 2008 R2

統合開発環境(IDE): Microsoft Visual Studio 2010

開発言語:c#

プロジェクトを作成

ファイル》新規》プロジェクト


.NET Framework はバージョン 2.0 またはバージョン 4.0 を選択できます。

プロジェクト タイプの選択: Windows フォーム アプリケーション

プロジェクト名を入力して確認します


以下に示すように、プロジェクトが正常に作成されました。


メインフォームのプロパティを変更します

フォームの「

For

mBorderStyle」プロパティを「none」に変更して、枠なしフォームを実装します


ウィンドウを変更した後デザイナーでの表示は次のとおりです:


他の

属性を変更するには、以下の図に従ってください。 太字の属性値は変更された値です


属性の説明:

ShowIcon=False、いいえ フォームのアイコンを表示します。

ShowInTaskbar=False、フォームが Windows タスクバーに表示されないようにします。

SizeGripStyle=Hide、フォームの右下隅をドラッグして変更する機能を無効にします。サイズ;

WindowsState=Minimized、ウィンドウの起動後、最小化します。

これらのプロパティを設定した後、コンパイルして実行すると、プログラムは実行されます

状態

を実装するには、ホットキー関数

WindowsAPIを使用して登録する必要があります

ホットキー: RegisterHot

Key

この関数は、システム全体の

ホットキーを定義します。 関数プロトタイプ: 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」変数に保存し、次にマスク レイヤーを追加してフォームの背景画像として設定し、ウィンドウ サイズを次のように設定します。メイン画面のサイズは、デスクトップに半透明のマスクレイヤーを追加するような感じのウィンドウを表示します。

コードは次のとおりです:

        /// <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 サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

C# を使用した Active Directory C# を使用した Active Directory Sep 03, 2024 pm 03:33 PM

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

C# シリアル化 C# シリアル化 Sep 03, 2024 pm 03:30 PM

C# シリアル化のガイド。ここでは、C# シリアル化オブジェクトの導入、手順、作業、例についてそれぞれ説明します。

C# の乱数ジェネレーター C# の乱数ジェネレーター Sep 03, 2024 pm 03:34 PM

C# の乱数ジェネレーターのガイド。ここでは、乱数ジェネレーターの仕組み、擬似乱数の概念、安全な数値について説明します。

C# データ グリッド ビュー C# データ グリッド ビュー Sep 03, 2024 pm 03:32 PM

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

マルチスレッドと非同期C#の違い マルチスレッドと非同期C#の違い Apr 03, 2025 pm 02:57 PM

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

C# の階乗 C# の階乗 Sep 03, 2024 pm 03:34 PM

C# の Factorial のガイド。ここでは、C# での階乗の概要について、さまざまな例とコード実装とともに説明します。

C# のパターン C# のパターン Sep 03, 2024 pm 03:33 PM

C# のパターンのガイド。ここでは、C# のパターンの概要と上位 3 種類について、その例とコード実装とともに説明します。

C# の素数 C# の素数 Sep 03, 2024 pm 03:35 PM

C# の素数ガイド。ここでは、C# における素数の導入と例を、コードの実装とともに説明します。

See all articles