[C#.NET][VB.NET] 利用Win32 API 函數 ShowWindowAsync / ShowWindow 改變視窗大小

[C#.NET][VB.NET] 利用Win32 API 函數 ShowWindowAsync / ShowWindow 改變視窗大小

1.需要匯入 System.Runtime.InteropServices 命名空間

2.宣告 ShowWindowAsync 函數

        [DllImport("user32.dll")]

        private static extern bool ShowWindowAsync(

            IntPtr hWnd,

            int nCmdShow

        );

3.宣告 ShowWindow函數

        [DllImport("user32.dll")]

        public static extern int ShowWindow(

            int hwnd,

            int nCmdShow

        );

4.宣告API常數定義

        //API 常數定義

        private const int SW_HIDE = 0;

        private const int SW_NORMAL = 1;

        private const int SW_MAXIMIZE = 3;

        private const int SW_SHOWNOACTIVATE = 4;

        private const int SW_SHOW = 5;

        private const int SW_MINIMIZE = 6;

        private const int SW_RESTORE = 9;

        private const int SW_SHOWDEFAULT = 10;

5.上述函數功能相同,都是用來設定視窗大小,不同的是宣告的型態不一樣需轉型。

ShowWindowAsync(this.Handle, SW_MINIMIZE);

ShowWindow((int)this.Handle, SW_MINIMIZE);

 

6.若是把int 改成IntPtr ,使用ShowWindow就不用轉型,所以在宣告時就可以考慮資料型態,必免轉型所耗的資源。

        [DllImport("user32.dll")]

        public static extern int ShowWindow(

            int hwnd,

            int nCmdShow

        );

 

C#完整範例

using System;

using System.Windows.Forms;

 

using System.Runtime.InteropServices;

 

namespace CS_WindowsResize

{

    public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();

        }

        //API 常數定義

        private const int SW_HIDE = 0;

        private const int SW_NORMAL = 1;

        private const int SW_MAXIMIZE = 3;

        private const int SW_SHOWNOACTIVATE = 4;

        private const int SW_SHOW = 5;

        private const int SW_MINIMIZE = 6;

        private const int SW_RESTORE = 9;

        private const int SW_SHOWDEFAULT = 10;

 

        [DllImport("user32.dll")]

        private static extern bool ShowWindowAsync(

            IntPtr hWnd,

            int nCmdShow

        );

 

        [DllImport("user32.dll")]

        public static extern int ShowWindow(

            int hwnd,

            int nCmdShow

        );

        private void button1_Click(object sender, EventArgs e)

        {

            //最小化

            ShowWindowAsync(this.Handle, SW_MINIMIZE);

        }

        private void button2_Click(object sender, EventArgs e)

        {

            //最大化

            ShowWindowAsync(this.Handle, SW_MAXIMIZE);

        }

 

        private void button3_Click(object sender, EventArgs e)

        {

            //還原

            ShowWindowAsync(this.Handle, SW_RESTORE);

        }

 

        private void button4_Click(object sender, EventArgs e)

        {

            //最小化

            ShowWindow((int)this.Handle, SW_MINIMIZE);

        }

 

        private void button5_Click(object sender, EventArgs e)

        {

            //最大化

            ShowWindow((int)this.Handle, SW_MAXIMIZE);

        }

 

        private void button6_Click(object sender, EventArgs e)

        {

            //還原

            ShowWindow((int)this.Handle, SW_RESTORE);

        }

    }

}

VB完整範例

Imports System.Runtime.InteropServices

Public Class Form1

    'API 常數定義

    Private Const SW_HIDE As Integer = 0

    Private Const SW_NORMAL As Integer = 1

    Private Const SW_MAXIMIZE As Integer = 3

    Private Const SW_SHOWNOACTIVATE As Integer = 4

    Private Const SW_SHOW As Integer = 5

    Private Const SW_MINIMIZE As Integer = 6

    Private Const SW_RESTORE As Integer = 9

    Private Const SW_SHOWDEFAULT As Integer = 10

    <DllImport("user32.dll")> Private Shared Function ShowWindowAsync(ByVal hWnd As IntPtr, ByVal nCmdShow As Integer) As Boolean

    End Function

    <DllImport("user32.dll")> Public Shared Function ShowWindow(ByVal hwnd As Integer, ByVal nCmdShow As Integer) As Integer

    End Function

 

    Private Sub button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button1.Click

        '最小化

        ShowWindowAsync(Me.Handle, SW_MINIMIZE)

    End Sub

 

    Private Sub button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button2.Click

        '最大化

        ShowWindowAsync(Me.Handle, SW_MAXIMIZE)

    End Sub

 

    Private Sub button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button3.Click

        '還原

        ShowWindowAsync(Me.Handle, SW_RESTORE)

    End Sub

 

    Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click

        '最小化

        ShowWindow(CInt(Me.Handle), SW_MINIMIZE)

    End Sub

 

    Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click

        '最大化

        ShowWindow(CInt(Me.Handle), SW_MAXIMIZE)

    End Sub

 

    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click

        '還原

        ShowWindow(CInt(Me.Handle), SW_RESTORE)

    End Sub

End Class

 

7.範例下載:WindowsResize.rar

若有謬誤,煩請告知,新手發帖請多包涵


Microsoft MVP Award 2010~2017 C# 第四季
Microsoft MVP Award 2018~2022 .NET

Image result for microsoft+mvp+logo