最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#實現(xiàn)WinForm全屏置頂?shù)氖纠a

 更新時間:2024年12月02日 09:38:39   作者:初九之潛龍勿用  
我們在運行一些?Windows?應(yīng)用程序的時候,需要將其運行在窗體置頂?shù)哪J?并且進入全屏狀態(tài),本文將介紹如何使用?C#?來實現(xiàn)?WinForm?的全屏置頂?shù)幕竟δ?感興趣的可以了解下

應(yīng)用需求

我們在運行一些 Windows 應(yīng)用程序的時候,需要將其運行在窗體置頂?shù)哪J剑ㄊ蛊渌鼞?yīng)用窗體無法遮擋在置頂應(yīng)用窗體之上),并且進入全屏狀態(tài)。本文將介紹如何使用 C# 來實現(xiàn) WinForm 的全屏置頂?shù)幕竟δ堋?/p>

基本功能主要實現(xiàn)以下幾點:

(1)改變WinForm的一些外觀屬性,包括無邊框、最大化和置頂屬性。

(2)屏蔽一些鍵盤操作,以阻止關(guān)閉應(yīng)用程序或切換到其它的應(yīng)用程序?;究梢云帘巫笥襑IN菜單鍵、關(guān)閉窗口組合鍵(Alt+F4)、切換窗口組合鍵(Alt+Tab)、開始菜單鍵(Ctrl+Esc)。

設(shè)計

設(shè)計 CraneofficeWinLock 類,該類可以實現(xiàn)一些方法,自動設(shè)置 WinForm 的一些屬性、屏蔽一些鍵盤操作,其主要設(shè)計如下表:

序號名稱成員類型類型說明
1form屬性System.Windows.Forms指定要自動設(shè)置屬性的窗體
2OnKeyPress方法void處理屏蔽鍵盤操作的方法
3Start方法void主入口方法,啟動程序,需要傳遞OnKeyPress方法句柄
4Stop方法void停止所有屏蔽操作

范例運行環(huán)境

操作系統(tǒng): Windows 11、Windows 10 、Windows 2019 Server 

.net版本: .netFramework4.7.2 或以上

開發(fā)工具:VS2019  C#

運行設(shè)備:Microsoft Surface Pro

實現(xiàn)代碼

核心代碼

代碼如下:

   public class CraneofficeWinLock
    {
        private const int WH_KEYBOARD_LL = 13; //鍵盤
        public Form form = null;
        private delegate int HookHandle(int nCode, int wParam, IntPtr lParam);
        public delegate void ProcessKeyHandle(HookStruct param, out bool handle);
        private static int _hHookValue = 0;
        private HookHandle _KeyBoardHookProcedure;
        [StructLayout(LayoutKind.Sequential)]
        public class HookStruct
        {
            public int vkCode;
            public int scanCode;
            public int flags;
            public int time;
            public int dwExtraInfo;
        }
        [DllImport("user32.dll")]
        private static extern int SetWindowsHookEx(int idHook, HookHandle lpfn, IntPtr hInstance, int threadId);
        [DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
        private static extern bool UnhookWindowsHookEx(int idHook);
        [DllImport("user32.dll")]
        private static extern int CallNextHookEx(int idHook, int nCode, int wParam, IntPtr lParam);
        [DllImport("kernel32.dll")]
        private static extern int GetCurrentThreadId();
        [DllImport("kernel32.dll")]
        private static extern IntPtr GetModuleHandle(string name);
 
        private IntPtr _hookWindowPtr = IntPtr.Zero;
        public CraneofficeWinLock() { }
        private static ProcessKeyHandle _clientMethod = null;
        public void Start(ProcessKeyHandle clientMethod)
        {
            if (form != null)
            {
                form.WindowState = FormWindowState.Maximized;
                form.FormBorderStyle = FormBorderStyle.None;
                form.TopMost = true;
            }
            _clientMethod = clientMethod;
            if (_hHookValue == 0)
            {
                _KeyBoardHookProcedure = new HookHandle(OnHookProc);
 
                _hookWindowPtr = GetModuleHandle(Process.GetCurrentProcess().MainModule.ModuleName);
 
                _hHookValue = SetWindowsHookEx(
                WH_KEYBOARD_LL,
                _KeyBoardHookProcedure,
                _hookWindowPtr,
                0);
 
                //如果設(shè)置鉤子失敗.
                if (_hHookValue == 0) Stop();
            }
        }
        public void Stop()
        {
            if (_hHookValue != 0)
            {
                bool ret = UnhookWindowsHookEx(_hHookValue);
                if (ret) _hHookValue = 0;
            }
        }
        private static int OnHookProc(int nCode, int wParam, IntPtr lParam)
        {
            if (nCode >= 0)
            {
                HookStruct hookStruct = (HookStruct)Marshal.PtrToStructure(lParam, typeof(HookStruct));
 
                if (_clientMethod != null)
                {
                    bool handle = false;
                    _clientMethod(hookStruct, out handle);
                    if (handle) return 1; //1:表示鍵盤,return 退出
                }
            }
            return CallNextHookEx(_hHookValue, nCode, wParam, lParam);
        }
        public void OnKeyPress(CraneofficeWinLock.HookStruct hookStruct, out bool handle)
        {
 
            handle = false;
            if (hookStruct.vkCode == 91) // 左win(開始菜單鍵)
            {
                handle = true;
            }
            if (hookStruct.vkCode == 92)// 右win
            {
                handle = true;
            }
 
            if (hookStruct.vkCode == (int)Keys.Escape && (int)Control.ModifierKeys == (int)Keys.Control)
            {
                handle = true;
            }
            if (hookStruct.vkCode == (int)Keys.F4 && (int)Control.ModifierKeys == (int)Keys.Alt)
            {
                handle = true;
            }
            if (hookStruct.vkCode == (int)Keys.Tab && (int)Control.ModifierKeys == (int)Keys.Alt)
            {
                handle = true;
            }
            if (hookStruct.vkCode == (int)Keys.F1)
            {
                handle = true;
            }
 
            Keys key = (Keys)hookStruct.vkCode;
 
        }
 
    }

調(diào)用示例

示例代碼如下:

private CodnHBuilder.CraneofficeWinLock _winlock = null;
 
private void Form1_Load(object sender, EventArgs e)
{
     _winlock = new CodnHBuilder.CraneofficeWinLock();
     _winlock.form = this;
     _winlock.Start(_winlock.OnKeyPress);
}

小結(jié)

我們可以在退出代碼中停止屏蔽的操作,如下代碼:

if (_winlock != null) _winlock.Stop();
Application.Exit();

另外,為防止一些其它未考慮的情況,比較懶,寫了一個計時器(時長1000毫秒)代碼,實時激活窗體的狀態(tài),以保持窗體永遠(yuǎn)在最上層,如下代碼:

private void timer1_Tick(object sender, EventArgs e)
{
     this.Activate();
}

到此這篇關(guān)于C#實現(xiàn)WinForm全屏置頂?shù)氖纠a的文章就介紹到這了,更多相關(guān)C# WinForm全屏置頂內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用C#實現(xiàn)在Excel中高效生成和操作表格

    使用C#實現(xiàn)在Excel中高效生成和操作表格

    在日常工作中,Excel不僅僅是一個電子表格工具,它還提供了強大的表格功能,幫助我們高效地管理、分析和展示數(shù)據(jù),隨著數(shù)據(jù)量的增加,手動操作這些表格變得越來越繁瑣,通過編程,我們可以自動化這些操作,利用C#在Excel中創(chuàng)建、管理和優(yōu)化表格功能,需要的朋友可以參考下
    2025-11-11
  • 區(qū)分c# 前臺和后臺線程

    區(qū)分c# 前臺和后臺線程

    這篇文章主要介紹了c# 前臺線程和后臺線程的區(qū)別與聯(lián)系,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • 在WPF中動態(tài)加載XAML中的控件實例代碼

    在WPF中動態(tài)加載XAML中的控件實例代碼

    這篇文章主要介紹了在WPF中動態(tài)加載XAML中的控件,實例分析了WPF中針對XAML中控件的動態(tài)調(diào)用技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2016-07-07
  • C#中GraphicsPath的AddString方法用法實例

    C#中GraphicsPath的AddString方法用法實例

    這篇文章主要介紹了C#中GraphicsPath的AddString方法用法,實例分析了AddString方法添加字符串的相關(guān)使用技巧,需要的朋友可以參考下
    2015-06-06
  • c#中LINQ的基本用法(二)

    c#中LINQ的基本用法(二)

    這篇文章介紹了c#中LINQ的基本用法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下的相關(guān)資料
    2022-04-04
  • C#使用AutoMapper實現(xiàn)類映射詳解

    C#使用AutoMapper實現(xiàn)類映射詳解

    AutoMapper是一個用于.NET中簡化類之間的映射的擴展庫,這篇文章主要介紹了C#如何使用AutoMapper實現(xiàn)類映射,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-01-01
  • C#使用log4net結(jié)合sqlite數(shù)據(jù)庫實現(xiàn)記錄日志

    C#使用log4net結(jié)合sqlite數(shù)據(jù)庫實現(xiàn)記錄日志

    因為結(jié)構(gòu)化的數(shù)據(jù)庫存儲的日志信息,可以寫專門的軟件讀取歷史日志信息,通過各種條件篩選,可操作性極大增強,有這方面需求的開發(fā)人員可以考慮,本文給大家介紹了C#使用log4net結(jié)合sqlite數(shù)據(jù)庫記錄日志,需要的朋友可以參考下
    2024-10-10
  • C#中面向?qū)ο缶幊虣C制之繼承學(xué)習(xí)筆記

    C#中面向?qū)ο缶幊虣C制之繼承學(xué)習(xí)筆記

    這篇文章主要介紹了C#中面向?qū)ο缶幊虣C制之繼承學(xué)習(xí)筆記,本文給出一個簡單子實例講解C#中的繼承,并講解了一些C#繼承的知識技巧,需要的朋友可以參考下
    2015-01-01
  • C#圖片壓縮的實現(xiàn)方法

    C#圖片壓縮的實現(xiàn)方法

    一般在web應(yīng)用中,對客戶端提交上來的圖片肯定需要進行壓縮的。尤其是比較大的圖片,如果不經(jīng)過壓縮會導(dǎo)致頁面變的很大,打開速度比較慢,當(dāng)然了如果是需要高質(zhì)量的圖片也得需要生產(chǎn)縮略圖。
    2013-02-02
  • List<>中Find的用法小結(jié)

    List<>中Find的用法小結(jié)

    本篇文章主要是對List<>中Find的用法進行了總結(jié)介紹,需要的朋友可以過來參考下,希望對大家有所幫助
    2014-01-01

最新評論

浠水县| 紫金县| 云林县| 南充市| 沙坪坝区| 大田县| 理塘县| 红安县| 万山特区| 宣威市| 湖口县| 克拉玛依市| 常山县| 吉木萨尔县| 南召县| 大余县| 垫江县| 凤山市| 庆元县| 通河县| 梁平县| 福泉市| 平武县| 芜湖市| 屯昌县| 晋州市| 分宜县| 司法| 电白县| 泾川县| 安国市| 胶南市| 旬阳县| 武清区| 江北区| 天镇县| 海盐县| 南城县| 日喀则市| 漠河县| 河源市|