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;
            }
        }
    }

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

  • 相关阅读:
    HDU 1863 畅通工程(Kruskal)
    HDU 1879 继续畅通工程(Kruskra)
    HDU 1102 Constructing Roads(Kruskal)
    POJ 3150 Cellular Automaton(矩阵快速幂)
    POJ 3070 Fibonacci(矩阵快速幂)
    ZOJ 1648 Circuit Board(计算几何)
    ZOJ 3498 Javabeans
    ZOJ 3490 String Successor(模拟)
    Java实现 LeetCode 749 隔离病毒(DFS嵌套)
    Java实现 LeetCode 749 隔离病毒(DFS嵌套)
  • 原文地址:https://www.cnblogs.com/xielong/p/6690433.html
Copyright © 2011-2022 走看看