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;
        }
    }
}
复制代码

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

平时多记记,到用时才能看看,记录你的进步,分享你的成果
posted @ 2017-12-08 11:21  Net-Spider  阅读(523)  评论(0编辑  收藏  举报