zoukankan      html  css  js  c++  java
  • c#实现Form窗体始终在桌面最前端显示

    方法一:

    //调用API
    
    [System.Runtime.InteropServices.DllImport("user32", CharSet = System.Runtime.InteropServices.CharSet.Auto, ExactSpelling = true)]
    
    public static extern IntPtr GetFocus(); //获得本窗体的句柄
    
    [System.Runtime.InteropServices.DllImport("user32", EntryPoint = "SetForegroundWindow")]
    
    public static extern bool SetFocus(IntPtr hWnd);//设置此窗体为活动窗体
    
    
    // 定义变量,句柄类型
    
    public IntPtr han;
    
    private void Form1_Load(object sender, EventArgs e){
    
    //在窗体加载的时候给变量赋值,即将当前窗体的句柄赋给变量
    
    han = this.Handle;
    
    }
    private void timer1_Tick(object sender, EventArgs e){
    
    // 加载一个定时器控件,验证当前WINDOWS句柄是否和本窗体的句柄一样,如果不一样,则激活本窗体
    
    if (han != GetFocus()){
    
    SetFocus(han);
    
    }
    
    this.WindowState = FormWindowState.Normal;
    
    }

    c#本来就有Focus()方法,我没用DllImport,试过下面几个方法都不行

    control.Activate();
    control.TopMost = true;
    control.Focus();

    方法二:

    [System.Runtime.InteropServices.DllImport("user32")]
    private static extern IntPtr GetActiveWindow();//获取当前窗体的活动状态
    
    // 判断当前窗口是否处于活动状态的方法
    
    private bool ThisIsActive(){ return (GetActiveWindow() == this.Handle);}
    
    private void timer1_Tick(object sender, EventArgs e){
    
    if (!ThisIsActive()){
    
    this.Activate();
    
    }
    
    this.WindowState = FormWindowState.Normal;
    
    }

    方法三:

    [DllImport("user32")]    
    private    static    extern    IntPtr    FindWindow(string    lpClassName,string    lpWindowName);    
         
    [DllImport("user32")]    
    private    static    extern    IntPtr    SetParent(IntPtr    hWndChild,    IntPtr    hWndNewParent);    
         
    //在窗体On_Load事件中添加(Santos的代码):    
    IntPtr    hDeskTop=FindWindow("Progman",    "Program    Manager");    
    SetParent(this.Handle,hDeskTop);

    方法四:

    [System.Runtime.InteropServices.DllImport("user32.dll")]
    static extern bool SetForegroundWindow(IntPtr hWnd);

    拓展:

    private void Form1_Load(object sender, EventArgs e)
    {
        this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
    
        this.ShowInTaskbar = false;
        this.TopMost = true;
        this.timer1.Interval = 1;
        this.timer1.Enabled = true;
        this.WindowState = FormWindowState.Maximized;
    }
    
    private void timer1_Tick(object sender, EventArgs e)
    {
        SetForegroundWindow(this.Handle);
    }
  • 相关阅读:
    shell脚本100例、练习使用
    shell基础编程
    mysql基础理论知识
    Docker 基础
    python基础之类(面向对象编程)
    python基础之函数
    python基础之认知及编码
    python基础之数据类型
    python基础之注意事项
    1.linux使用基础
  • 原文地址:https://www.cnblogs.com/code1992/p/13556509.html
Copyright © 2011-2022 走看看