使用ShowWindow函数,便可轻松控制窗口的显隐,最小化,最大化。
创新互联公司专注于永定企业网站建设,响应式网站设计,商城网站定制开发。永定网站建设公司,为永定等地区提供建站服务。全流程按需定制设计,专业设计,全程项目跟踪,创新互联公司专业和态度为您提供的服务
概述
函数功能:该函数设置指定窗口的显示状态。
函数原型:BOOL ShowWindow(HWND hWnd, int nCmdShow);
*/第一个参数为句柄,第二个参数选下面的值
#define SW_HIDE 0
#define SW_SHOWNORMAL 1
#define SW_NORMAL 1
#define SW_SHOWMINIMIZED 2
#define SW_SHOWMAXIMIZED 3
#define SW_MAXIMIZE 3
#define SW_SHOWNOACTIVATE 4
#define SW_SHOW 5
#define SW_MINIMIZE 6
#define SW_SHOWMINNOACTIVE 7
#define SW_SHOWNA 8
#define SW_RESTORE 9
#define SW_SHOWDEFAULT 10
#define SW_FORCEMINIMIZE 11
#define SW_MAX 11
参数含义
hWnd:指窗口句柄。
nCmdShow:指定窗口如何显示。如果发送应用程序的程序提供了STARTUPINFO结构,则应用程序第一次调用ShowWindow时该参数被忽略。否则,在第一次调用ShowWindow函数时,该值应为在函数WinMain中nCmdShow参数。在随后的调用中,该参数可以为下列值之一:
SW_FORCEMINIMIZE:在WindowNT5.0中最小化窗口,即使拥有窗口的线程被挂起也会最小化。在从其他线程最小化窗口时才使用这个参数。
SW_HIDE:隐藏窗口并激活其他窗口。
SW_MAXIMIZE:最大化指定的窗口。
SW_MINIMIZE:最小化指定的窗口并且激活在Z序中的下一个顶层窗口。
SW_RESTORE:激活并显示窗口。如果窗口最小化或最大化,则系统将窗口恢复到原来的尺寸和位置。在恢复最小化窗口时,应用程序应该指定这个标志。
SW_SHOW:在窗口原来的位置以原来的尺寸激活和显示窗口。
SW_SHOWDEFAULT:依据在STARTUPINFO结构中指定的SW_FLAG标志设定显示状态,STARTUPINFO 结构是由启动应用程序的程序传递给CreateProcess函数的。
SW_SHOWMAXIMIZED:激活窗口并将其最大化。
SW_SHOWMINIMIZED:激活窗口并将其最小化。
SW_SHOWMINNOACTIVATE:窗口最小化,激活窗口仍然维持激活状态。
SW_SHOWNA:以窗口原来的状态显示窗口。激活窗口仍然维持激活状态。
SW_SHOWNOACTIVATE:以窗口最近一次的大小和状态显示窗口。激活窗口仍然维持激活状态。
SW_SHOWNORMAL:激活并显示一个窗口。如果窗口被最小化或最大化,系统将其恢复到原来的尺寸和大小。应用程序在第一次显示窗口的时候应该指定此标志。
不过顺便说一句,SendKeys会偶尔造成指令丢失,不可避免。不管你激活窗口还是最大化窗口或者锁定都没办法完全避免。
VB声明
Declare Function ShowWindow Lib "user32" Alias
"ShowWindow" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
说明
控制窗口的可见性(在vb里使用:针对vb窗体及控件,请使用对应的vb属性)
返回值
Long,如窗口之前是可见的,则返回TRUE(非零),否则返回FALSE(零)
参数表
参数
类型及说明
hwnd
Long,窗口句柄,要向这个窗口应用由nCmdShow指定的命令
nCmdShow
Long,为窗口指定可视性方面的一个命令。请用下述任何一个常数
SW_HIDE
隐藏窗口,活动状态给令一个窗口
SW_MINIMIZE
最小化窗口,活动状态给令一个窗口
SW_RESTORE
用原来的大小和位置显示一个窗口,同时令其进入活动状态
SW_SHOW
用当前的大小和位置显示一个窗口,同时令其进入活动状态
SW_SHOWMAXIMIZED
最大化窗口,并将其激活
SW_SHOWMINIMIZED
最小化窗口,并将其激活
SW_SHOWMINNOACTIVE
最小化一个窗口,同时不改变活动窗口
SW_SHOWNA
用当前的大小和位置显示一个窗口,不改变活动窗口
SW_SHOWNOACTIVATE
用最近的大小和位置显示一个窗口,同时不改变活动窗口
SW_SHOWNORMAL
与SW_RESTORE相同
Dim F1 As New Datasystem.Form2 '实例化窗体
For Each na As Form In Application.OpenForms '打开窗体的集合
If na.ProductName = F1.ProductName AndAlso na.Name = F1.Name 0 Then '判断程序集的产品名称和窗体名称是否已存在打开的窗体中
If na.WindowState = FormWindowState.Minimized Then '判断窗体是否最小化
na.WindowState = FormWindowState.Normal '还原窗体
End If
na.Activate() '激活窗体
Return '返回
End If
Next
F1.Show() '如果没有打开的窗体中未找到,重新打开窗体
Declare Function OpenIcon Lib "user32" Alias
"OpenIcon" (ByVal hwnd As Long) As Long
说明
恢复一个最小化的程序,并将其激活
返回值
Long,非零表示成功,零表示失败。会设置GetLastError
参数表
参数
类型及说明
hwnd
Long,欲恢复的窗口
注解
针对vb窗体,应使用vb的WindowState属性
看起来是鼠标按住不放情况下导致焦点还保持在新建线程的窗口,然后又循环导致焦点切来切去引起闪烁。
试下在循环中的执行代码前加上 mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0) '释放鼠标左键