C#代码像QQ的右下角消息框一样,无论现在用户的焦点在哪个窗口,消息框弹出后都不影响焦点的变化,那么有两种方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#代码像QQ的右下角消息框一样,无论现在用户的焦点在哪个窗口,消息框弹出后都不影响焦点的变化,那么有两种方法相关的知识,希望对你有一定的参考价值。

你QQ的右下角消息框一样,无论现在用户的焦点在哪个窗口,消息框弹出后都不影响焦点的变化,那么有两种方法:

 

要么重写需要弹出的窗体的事件:

protected override CreateParams CreateParams    
{
    get
    {
        const int WS_EX_NOACTIVATE = 0x08000000;
        CreateParams cp = base.CreateParams;
        cp.ExStyle |= WS_EX_NOACTIVATE;
        return cp;
    }
}
// CreateParams 在 System.Windows.Forms.Controls 命名空间下

要么调用系统钩子:

// 引用系统钩子
[DllImport("user32.dll")]
public static extern IntPtr GetActiveWindow();
 
[DllImport("user32.dll")] 
public static extern IntPtr SetActiveWindow(IntPtr hwnd);
  
// 在窗口弹出时做以下处理
IntPtr activeForm = GetActiveWindow(); // 先得到当前的活动窗体 
new form2.Show(false); // 弹出新窗体
SetActiveWindow(activeForm); // 在把焦点还给之前的活动窗体


以上是关于C#代码像QQ的右下角消息框一样,无论现在用户的焦点在哪个窗口,消息框弹出后都不影响焦点的变化,那么有两种方法的主要内容,如果未能解决你的问题,请参考以下文章

WinForm,消息框怎样显示在窗体正中?

c# 怎么做出类似qq右下角的小弹框

怎么让Android程序一直后台运行,像QQ一样不被杀死

手工清除木马的全部过程

jQuery实现网页右下角悬浮层提示

qq好友发过来消息时自动在右下角弹出小窗口怎么设置