HOME> 世界杯北京> 隐藏、显示窗口

隐藏、显示窗口

2025-07-23 10:22:18     世界杯北京    

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。

使用系统的API函数ShowWindow可以隐藏和显示其它程序的窗口。 vb.net中的声明如下:

Declare Function ShowWindow Lib "user32" Alias "ShowWindow" (ByVal hwnd As IntPtr, ByVal nCmdShow As Integer) As Integer

参数hwnd是窗口的句柄;

参数nCmdShow是指定窗口如何显示,用来隐藏和显示的常数:

SW_HIDE= 0

SW_SHOW= 5 隐藏窗口代码:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

Dim result As Integer

For Each pro As Process In Process.GetProcesses

Try

If pro.ProcessName = "notepad" Then

Dim mainWin As IntPtr = pro.MainWindowHandle

result = ShowWindow(mainWin, SW_HIDE)

End If

Catch ex As Exception

End Try

Next

End Sub

显示窗口代码:

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click

Dim result As Integer

For Each pro As Process In Process.GetProcesses

Try

If pro.ProcessName = "notepad" Then

Dim mainWin As IntPtr = pro.MainWindowHandle

result = ShowWindow(mainWin, SW_SHOW)

End If

Catch ex As Exception

End Try

Next

End Sub

如果用了以上代码,会发现,隐藏窗口没问题,但是却不能显示窗口。

添加监视,可以发现显示窗口代码中,mainWin为0,这是因为窗口隐藏后不会有窗口句柄。

只需要在隐藏时把窗口的句柄保存下来就可以隐藏后又显示出来。

修改后的代码如下:

Declare Function ShowWindow Lib "user32" Alias "ShowWindow" (ByVal hwnd As IntPtr, ByVal nCmdShow As Integer) As Integer

Public Const SW_HIDE As Integer = 0

Public Const SW_SHOW As Integer = 5

Dim hwnd As IntPtr = IntPtr.Zero

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

Dim result As Integer

For Each pro As Process In Process.GetProcesses

Try

If pro.ProcessName = "notepad" Then

hwnd = pro.MainWindowHandle

result = ShowWindow(hwnd, SW_HIDE)

Exit For

End If

Catch ex As Exception

End Try

Next

End Sub

Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click

Dim result As Integer

Try

result = ShowWindow(hwnd, SW_SHOW)

Catch ex As Exception

End Try

End Sub

在网上找到的很多代码,只会告诉使用ShowWindow可以隐藏显示窗口,但是并没有告诉需要保存原窗口的句柄。

由于.net平台下C#和vb.NET很相似,本文也可以为C#爱好者提供参考。

学习更多vb.net知识,请参看 vb.net 教程 目录