VB如何同时隐藏两个一样的窗口
我打开两个“计算器”窗口,都处于可见状态,现在我要用VB6实现点击COMMAND1以后,两个“计算器”窗口,同时被隐藏,程序退出时,两个窗口同时恢复可见。...
我打开两个“计算器”窗口,都处于可见状态,现在我要用VB6实现点击COMMAND1以后,两个“计算器”窗口,同时被隐藏,程序退出时,两个窗口同时恢复可见。
展开
1个回答
展开全部
一个模块代码
Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Any, ByVal lParam As Long) As Long
Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hWnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Declare Function ShowWindow Lib "user32" (ByVal hWnd As Long, ByVal nCmdShow As Long) As Long
Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
Public Const SW_HIDE = 0
Public Const SW_SHOWNORMAL = 1
Public Const SW_NORMAL = 1
Public Const SW_SHOWMINIMIZED = 2
Public Const SW_SHOWMAXIMIZED = 3
Public Const SW_MAXIMIZE = 3
Public Const SW_SHOWNOACTIVATE = 4
Public Const SW_SHOW = 5
Public Const SW_MINIMIZE = 6
Public Const SW_SHOWMINNOACTIVE = 7
Public Const SW_SHOWNA = 8
Public Const SW_RESTORE = 9
Public Const SW_SHOWDEFAULT = 10
Public Const SW_FORCEMINIMIZE = 11
Public Const SW_MAX = 11
Public Const WM_CLOSE = &H10
Public Function EnumProc(ByVal app_hwnd As Long, ByVal lParam As Long) As Boolean '遍查主窗口
Dim buf As String * 1024
Dim length As Long
length = GetWindowText(app_hwnd, buf, Len(buf))
Title = Left$(buf, length)
If Title = "计算器" Then
ShowWindow Val(app_hwnd), SW_HIDE
End If
EnumProc = 1
End Function
Public Function EnumProcSHOW(ByVal app_hwnd As Long, ByVal lParam As Long) As Boolean '遍查主窗口
Dim buf As String * 1024
Dim length As Long
length = GetWindowText(app_hwnd, buf, Len(buf))
Title = Left$(buf, length)
If Title = "计算器" Then
ShowWindow Val(app_hwnd), SW_SHOW
End If
EnumProc = 1
End Function
click事件调用隐藏窗体
EnumWindows AddressOf EnumProc, 0 '枚举窗口列表中的所有父窗口(顶级和被所有窗口)
完毕
unload调用 显示窗体 这里一定是要窗体unload事件 某些时候直接end程序不会执行unload事件
EnumWindows AddressOf EnumProcSHOW, 0 '枚举窗口列表中的所有父窗口(顶级和被所有窗口)
由于条件有限没有测试 但是用法都在这里 你应该还需要修改下
Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Any, ByVal lParam As Long) As Long
Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hWnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Declare Function ShowWindow Lib "user32" (ByVal hWnd As Long, ByVal nCmdShow As Long) As Long
Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
Public Const SW_HIDE = 0
Public Const SW_SHOWNORMAL = 1
Public Const SW_NORMAL = 1
Public Const SW_SHOWMINIMIZED = 2
Public Const SW_SHOWMAXIMIZED = 3
Public Const SW_MAXIMIZE = 3
Public Const SW_SHOWNOACTIVATE = 4
Public Const SW_SHOW = 5
Public Const SW_MINIMIZE = 6
Public Const SW_SHOWMINNOACTIVE = 7
Public Const SW_SHOWNA = 8
Public Const SW_RESTORE = 9
Public Const SW_SHOWDEFAULT = 10
Public Const SW_FORCEMINIMIZE = 11
Public Const SW_MAX = 11
Public Const WM_CLOSE = &H10
Public Function EnumProc(ByVal app_hwnd As Long, ByVal lParam As Long) As Boolean '遍查主窗口
Dim buf As String * 1024
Dim length As Long
length = GetWindowText(app_hwnd, buf, Len(buf))
Title = Left$(buf, length)
If Title = "计算器" Then
ShowWindow Val(app_hwnd), SW_HIDE
End If
EnumProc = 1
End Function
Public Function EnumProcSHOW(ByVal app_hwnd As Long, ByVal lParam As Long) As Boolean '遍查主窗口
Dim buf As String * 1024
Dim length As Long
length = GetWindowText(app_hwnd, buf, Len(buf))
Title = Left$(buf, length)
If Title = "计算器" Then
ShowWindow Val(app_hwnd), SW_SHOW
End If
EnumProc = 1
End Function
click事件调用隐藏窗体
EnumWindows AddressOf EnumProc, 0 '枚举窗口列表中的所有父窗口(顶级和被所有窗口)
完毕
unload调用 显示窗体 这里一定是要窗体unload事件 某些时候直接end程序不会执行unload事件
EnumWindows AddressOf EnumProcSHOW, 0 '枚举窗口列表中的所有父窗口(顶级和被所有窗口)
由于条件有限没有测试 但是用法都在这里 你应该还需要修改下
更多追问追答
追问
不行哦。按照你的代码,点击COMMAND1以后,一点反应都没有。两个计算器窗口都还在。并且关闭窗体时,还出现一个错误。
追答
模块代码
Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Any, ByVal lParam As Long) As Long
Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
Public Const SW_HIDE = 0
Public Const SW_SHOWNORMAL = 1
Public Const SW_NORMAL = 1
Public Const SW_SHOWMINIMIZED = 2
Public Const SW_SHOWMAXIMIZED = 3
Public Const SW_MAXIMIZE = 3
Public Const SW_SHOWNOACTIVATE = 4
Public Const SW_SHOW = 5
Public Const SW_MINIMIZE = 6
Public Const SW_SHOWMINNOACTIVE = 7
Public Const SW_SHOWNA = 8
Public Const SW_RESTORE = 9
Public Const SW_SHOWDEFAULT = 10
Public Const SW_FORCEMINIMIZE = 11
Public Const SW_MAX = 11
Public Const WM_CLOSE = &H10
Public Function EnumProc(ByVal app_hwnd As Long, ByVal lParam As Long) As Boolean '遍查主窗口
Dim buf As String * 1024
Dim length As Long
length = GetWindowText(app_hwnd, buf, Len(buf))
Title = Left$(buf, length)
Form1.List1.AddItem app_hwnd & " Name is :" & Title
EnumProc = 1
End Function
窗体里面有个list1 一个按钮用来hide
按钮事件
If List1.Text "" Then
ShowWindow Val(List1.Text), SW_HIDE
List1.RemoveItem List1.ListIndex
End If
这是一个能够隐藏任何窗口的代码 你改改看吧
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询