zoukankan      html  css  js  c++  java
  • C#winform窗体如何通过windowApi的FindWindow函数获取窗体句柄

    在同一个程序里,传统方式是通过this来设置当前窗体的最大化、最小化等操作,

    那么怎样通过窗体句柄来设置窗体的最大化、最小化呢?

    1、界面布局

    通过this设置窗体最大化: name:btnWindowThis

    通过handle设置窗体最大化:name:btnWindowHandle

    2、设置窗体最大化

    1)this方式

    直接设置当前窗体的状态为最大化就可以了,

           /// <summary>
            /// 通过this设置方法
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void btnWindowThis_Click(object sender, EventArgs e)
            {
                //通过this.WindowState设置窗体最大化
                this.WindowState = FormWindowState.Maximized;
            } 

    2)handle方式

    首先获取当前窗体的句柄,通过句柄控制窗体最大化

            /// <summary>
            /// 通过句柄设置方法
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void btnWindowHander_Click(object sender, EventArgs e)
            {
                // 获取查找窗体句柄(通过窗体标题名)
                IntPtr mainHandle = FindWindow(null, "演示窗体");
                if (mainHandle != IntPtr.Zero)
                {
                    //通过句柄设置当前窗体最大化(0:隐藏窗体,1:默认窗体,2:最小化窗体,3:最大化窗体,....)
                    bool result = ShowWindowAsync(mainHandle, 3);
                }
            }

    Ps: 获取窗体句柄,也可以用C++的Spy++工具查看(获取到的句柄是16进制,而FindWindow()是获取10进制)

    3、完整源码

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Runtime.InteropServices;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace WindowsForms
    {
        public partial class Form2 : Form
        {
            public Form2()
            {
                InitializeComponent();
            }
    
            /// <summary>
            /// 获取窗体的句柄函数
            /// </summary>
            /// <param name="lpClassName">窗口类名</param>
            /// <param name="lpWindowName">窗口标题名</param>
            /// <returns>返回句柄</returns>
            [DllImport("user32.dll", EntryPoint = "FindWindow", SetLastError = true)]
            public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
    
            /// <summary>
            /// 通过句柄,窗体显示函数
            /// </summary>
            /// <param name="hWnd">窗体句柄</param>
            /// <param name="cmdShow">显示方式</param>
            /// <returns>返工成功与否</returns>
            [DllImport("user32.dll", EntryPoint = "ShowWindowAsync", SetLastError = true)]
            public static extern bool ShowWindowAsync(IntPtr hWnd, int cmdShow);
    
           
            /// <summary>
            /// 通过句柄设置方法
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void btnWindowHander_Click(object sender, EventArgs e)
            {
                // 获取查找窗体句柄(通过窗体标题名)
                IntPtr mainHandle = FindWindow(null, "演示窗体");
                if (mainHandle != IntPtr.Zero)
                {
                    //通过句柄设置当前窗体最大化(0:隐藏窗体,1:默认窗体,2:最小化窗体,3:最大化窗体,....)
                    bool result = ShowWindowAsync(mainHandle, 3);
                }
            }
        
            /// <summary>
            /// 通过this设置方法
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void btnWindowThis_Click(object sender, EventArgs e)
            {
                //通过this.WindowState设置窗体最大化
                this.WindowState = FormWindowState.Maximized;
            }
        }
    }

    下一篇,介绍一个程序窗体如何通过句柄控制另一个程序窗体

  • 相关阅读:
    【欧拉函数】BZOJ2190-[SDOI2012]longge的数学问题
    【AC自动机+DP】USACO2012 JAN GOLD_Video Game Combos
    【斜率优化】BZOJ1010 [HNOI2008]玩具装箱toy
    【二维单调队列】BZOJ1047-[HAOI2007]理想的正方形
    【单调队列优化DP】BZOJ1855-[Scoi2010]股票交易
    [Usaco2008 Open]Word Power 名字的能量
    bzoj 1623: [Usaco2008 Open]Cow Cars 奶牛飞车
    bzoj 3479: [Usaco2014 Mar]Watering the Fields
    1163: [Baltic2008]Mafia
    [HAOI2007]反素数ant
  • 原文地址:https://www.cnblogs.com/xielong/p/6690433.html
Copyright © 2011-2022 走看看