欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#實現(xiàn)標題閃爍效果的示例代碼

 更新時間:2024年04月02日 09:56:17   作者:wenchm  
在Windows系統(tǒng)中,當程序在后臺運行時,如果某個窗體的提示信息需要用戶瀏覽,該窗體就會不停地閃爍,這樣就會吸引用戶的注意,下面我們就來看看如何使用C#實現(xiàn)這一效果吧

在Windows系統(tǒng)中,當程序在后臺運行時,如果某個窗體的提示信息需要用戶瀏覽,該窗體就會不停地閃爍,這樣就會吸引用戶的注意。同樣,如果在自己的程序中使某個窗體不停地閃爍也會吸引用戶的注意。

1.API函數(shù)FlashWindow

API函數(shù)FlashWindow用于閃爍窗口。該函數(shù)通過在窗口上顯示和隱藏光標來實現(xiàn)閃爍效果。        

(1)添加命名空間

在C#中,可以調(diào)用Windows API中的FlashWindow函數(shù)。首先添加以下命名空間以使用DllImport特性:

using System.Runtime.InteropServices;

(2)聲明DllImport方法

接下來,聲明FlashWindow函數(shù)的DllImport方法:

[DllImport("user32.dll", SetLastError = true)]
public static extern bool FlashWindow(IntPtr hWnd, bool bInvert);

聲明DllImport時,VS會提示警告信息:SYS1054,并建議修改為LibraryImport。不要理睬,因為修改后更嚴重。作者認為不是微軟的普遍性建議錯了,而是最新的LibraryImport不適合C++的原生方法FlashWindow(C++跟不上發(fā)展了)。對于FlashWindow只能使用古老的DllImport P/Invoke 源生成器 。

(3)FlashWindow函數(shù)

現(xiàn)在,您可以使用以下示例代碼在C#中使用FlashWindow函數(shù):

// 讓窗體閃爍起來
using System.Runtime.InteropServices;
namespace _168_2
{
    class Program
    {
        [DllImport("user32.dll", SetLastError = true)]
        public static extern bool FlashWindow(IntPtr hWnd, bool bInvert);
 
        [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
        public static extern IntPtr FindWindow(string? lpClassName, string lpWindowName);
 
        static void Main(string[] args)
        {
            ArgumentNullException.ThrowIfNull(args);
            // 獲取當前窗口的句柄
            IntPtr hWnd = FindWindow(null, "新建文本文檔 - 記事本");
 
            if (hWnd != IntPtr.Zero)
            {
                while (true)
                {
                    // 閃爍窗口
                    FlashWindow(hWnd, true);
                    Console.WriteLine("窗口閃爍成功!");
                    // 等待2秒鐘
                    Thread.Sleep(2000);
                }
            }
            else
            {
                Console.WriteLine("未找到指定的窗口。");
            }
            Console.ReadKey();
        }
    }
}

本實例運行之前,打開一個記事本文件,空白的,其標題欄顯示:"新建文本文檔 - 記事本"。然后運行本程序,如果找到了這個記事本文件,控制臺顯示“窗口閃爍成功”并記事本文件的的標題欄同步閃爍。否則,結(jié)果相反。

2.P/Invoke

P/Invoke(Platform Invoke)是一種由.NET框架提供的技術(shù),用于調(diào)用本機代碼(即非托管代碼)。它允許托管應用程序(即由.NET運行時管理的代碼)訪問本機API函數(shù),例如Windows API函數(shù)。

當托管應用程序使用P/Invoke調(diào)用本機函數(shù)時,.NET運行時會將托管代碼與本機代碼之間進行轉(zhuǎn)換,確保兩種類型的代碼可以相互交互。這涉及處理諸如內(nèi)存分配,數(shù)據(jù)類型和異常處理等底層細節(jié)。

為了使用P/Invoke,需要使用DllImport屬性將本機函數(shù)導入托管代碼中。DllImport屬性指示該函數(shù)的名稱,它所在的庫以及傳遞給該函數(shù)的參數(shù)的類型。一旦導入了本機函數(shù),就可以像調(diào)用托管函數(shù)一樣調(diào)用它。但是,需要確保本機函數(shù)的簽名與在DllImport屬性中指定的簽名匹配,包括參數(shù)的數(shù)量和類型以及返回類型。

3.再來一個示例

本實例設(shè)計了一個閃爍的窗體標題欄,運行本實例,單擊“開始閃爍”按鈕,窗體標題欄就會不停地閃爍;單擊“停止閃爍”按鈕,窗體標題欄就會停止閃爍。

// 閃爍的標題欄
using System.Windows.Forms;
 
namespace _168
{
    public partial class Form1 : Form
    {
        private PictureBox? pictureBox1;
        private Button? button1;
        private Button? button2;
        private System.Windows.Forms.Timer? timer1;
 
        public Form1()
        {
            InitializeComponent();
            StartPosition = FormStartPosition.CenterScreen;
            Load += Form1_Load;
        }
 
        //重寫API函數(shù),用來實現(xiàn)窗體標題欄閃爍功能
        [System.Runtime.InteropServices.DllImport("user32.dll")]
        public static extern bool FlashWindow(IntPtr handle, bool bInvert);
 
        private void Timer1_Tick(object? sender, EventArgs e)
        {
            FlashWindow(Handle, true);//啟用窗體閃爍函數(shù)
        }
 
        private void Button1_Click(object? sender, EventArgs e)
        {
            timer1!.Enabled = true;//啟動計時器
        }
 
        private void Button2_Click(object? sender, EventArgs e)
        {
            timer1!.Enabled = false;//關(guān)閉計時器
        }
 
        private void Form1_Load(object? sender, EventArgs e)
        {
            // 
            // button1
            // 
            button1 = new Button
            {
                Location = new Point(45, 50),
                Name = "button1",
                Size = new Size(75, 23),
                TabIndex = 1,
                Text = "開始閃爍",
                UseVisualStyleBackColor = true
            };
            button1.Click += new EventHandler(Button1_Click);
            // 
            // button2
            // 
            button2 = new Button
            {
                Location = new Point(150, 50),
                Name = "button2",
                Size = new Size(75, 23),
                TabIndex = 2,
                Text = "停止閃爍",
                UseVisualStyleBackColor = true
            };
            button2.Click += new EventHandler(Button2_Click);
 
            // 
            // pictureBox1
            // 
            pictureBox1 = new PictureBox
            {
                Dock = DockStyle.Fill,
                Location = new Point(0, 0),
                Name = "pictureBox1",
                Size = new Size(325, 127),
                TabIndex = 0,
                TabStop = false
            };
            pictureBox1.Controls.Add(button2);
            pictureBox1.Controls.Add(button1);
            
            // 
            // timer1
            // 
            timer1 = new System.Windows.Forms.Timer(components);
            timer1.Tick += new EventHandler(Timer1_Tick);
            // 
            // Form1
            // 
            AutoScaleDimensions = new SizeF(7F, 17F);
            AutoScaleMode = AutoScaleMode.Font;
            ClientSize = new Size(266, 155);
            
            Controls.Add(pictureBox1);
            Name = "Frm_Main";
            Name = "Form1";
            Text = "閃爍的標題欄";
            ResumeLayout(false);
        }
    }
}

以上就是C#實現(xiàn)標題閃爍效果的示例代碼的詳細內(nèi)容,更多關(guān)于C#標題閃爍的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • c#數(shù)據(jù)綁定之linq使用示例

    c#數(shù)據(jù)綁定之linq使用示例

    本實例以MS AdventureWorks2008Entities數(shù)據(jù)庫為基礎(chǔ),演示了LINQ TO ENTITY、LINQ TO ENTITYSQL和LINQ TO ENTITYCLIENT。
    2014-04-04
  • C#幾種截取字符串的方法小結(jié)

    C#幾種截取字符串的方法小結(jié)

    C#幾種截取字符串的方法小結(jié),需要的朋友可以參考一下
    2013-04-04
  • C#中PuppeteerSharp庫的應用詳解

    C#中PuppeteerSharp庫的應用詳解

    PuppeteerSharp是一個針對Google Chrome瀏覽器的高級API庫,這篇文章主要為大家詳細介紹了PuppeteerSharp庫在C#中的具體應用,需要的小伙伴可以了解下
    2024-01-01
  • C#中緩存的基本使用方法

    C#中緩存的基本使用方法

    項目開發(fā)過程中緩存的應用到處可見,下面這篇文章主要給大家介紹了關(guān)于C#中緩存的基本使用方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-09-09
  • c#(Socket)異步套接字代碼示例

    c#(Socket)異步套接字代碼示例

    c#(Socket)異步套接字代碼示例...
    2007-03-03
  • C# winform編程中響應回車鍵的實現(xiàn)代碼

    C# winform編程中響應回車鍵的實現(xiàn)代碼

    這篇文章主要介紹了C# winform編程中響應回車鍵的實現(xiàn)代碼,既在窗口上響應回車鍵事件的方法,需要的朋友可以參考下
    2014-08-08
  • C#實現(xiàn)封面圖片生成器的示例代碼

    C#實現(xiàn)封面圖片生成器的示例代碼

    這篇文章主要為大家詳細介紹了如何利用C#實現(xiàn)簡單的封面圖片生成器,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • C#中的where泛型約束介紹

    C#中的where泛型約束介紹

    這個關(guān)于泛型約束的東西我看了幾天了。一直沒打看懂,我的領(lǐng)悟能力有點差,剛才突然明白了一點
    2013-04-04
  • 淺談C#中Md5和Sha1兩種加密方式

    淺談C#中Md5和Sha1兩種加密方式

    這篇文章主要介紹了淺談C#中Md5和Sha1兩種加密方式的相關(guān)資料,需要的朋友可以參考下
    2015-07-07
  • Unity3D實現(xiàn)列表分頁效果

    Unity3D實現(xiàn)列表分頁效果

    這篇文章主要為大家詳細介紹了Unity3D實現(xiàn)列表分頁效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04

最新評論