Private Sub Form_Load()
Dim myhwnd As Long
myhwnd = GetWindow(Me.hwnd, GW_OWNER)
ShowWindow myhwnd, SW_HIDE
End Sub
与
Private Sub Form_Load()
Dim myhwnd As Long
'myhwnd = GetWindow(Me.hwnd, GW_OWNER)
ShowWindow Me.hwnd, SW_HIDE
End Sub
与
Private Sub Form_Load()
Dim myhwnd As Long
myhwnd = FindWindow(vbNullString, "工程1")
ShowWindow myhwnd, SW_HIDE
End Sub
有什么区别了,其中第一个与第三个运行结果一样
FindWindow是查找对应的窗口句柄,它可以查找别的程序中的窗口等
看看下面这些资料:
GetWindow 函数功能:该函数返回与指定窗口有特定关系(如Z序或所有者)的窗口句柄。
函数原型:HWND GetWindow(HWND hWnd,UNIT nCmd);
参数:
hWnd:窗口句柄。要获得的窗口句柄是依据nCmd参数值相对于这个窗口的句柄。
nCmd:说明指定窗口与要获得句柄的窗口之间的关系。该参数值可以是下列之一:
GW_CHILD:如果指定窗口是父窗口,则获得的是在Z序顶端的子窗口的句柄,否则为NULL。函数仅检查指定父窗口的子窗口,不检查继承窗口。
GW_ENABLEDPOUP:(WindowsNT 5.0)返回的句柄标识了属于指定窗口的处于使能状态弹出式窗口(检索使用第一个由GW_HWNDNEXT 查找到的满足前述条件的窗口);如果无使能窗口,则获得的句柄与指定窗口相同。
GW_HWNDFIRST:返回的句柄标识了在Z序最高端的相同类型的窗口。如果指定窗口是最高端窗口,则该句柄标识了在Z序最高端的最高端窗口;如果指定窗口是顶层窗口,则该句柄标识了在z序最高端的顶层窗口:如果指定窗口是子窗口,则句柄标识了在Z序最高端的同属窗口。
GW_HWNDLAST:返回的句柄标识了在z序最低端的相同类型的窗口。如果指定窗口是最高端窗口,则该柄标识了在z序最低端的最高端窗口:如果指定窗口是顶层窗口,则该句柄标识了在z序最低端的顶层窗口;如果指定窗口是子窗口,则句柄标识了在Z序最低端的同属窗口。
GW_HWNDNEXT:返回的句柄标识了在Z序中指定窗口下的相同类型的窗口。如果指定窗口是最高端窗口,则该句柄标识了在指定窗口下的最高端窗口:如果指定窗口是顶层窗口,则该句柄标识了在指定窗口下的顶层窗口;如果指定窗口是子窗口,则句柄标识了在指定窗口下的同属窗口。
GW HWNDPREV:返回的句柄标识了在Z序中指定窗口上的相同类型的窗口。如果指定窗口是最高端窗口,则该句柄标识了在指定窗口上的最高端窗口;如果指定窗口是顶层窗口,则该句柄标识了在指定窗口上的顶层窗口;如果指定窗口是子窗口,则句柄标识了在指定窗口上的同属窗口。
GW_OWNER:返回的句柄标识了指定窗口的所有者窗口(如果存在)。
返回值:如果函数成功,返回值为窗口句柄;如果与指定窗口有特定关系的窗口不存在,则返回值为NULL。
若想获得更多错误信息,请调用GetLastError函数。
备注:在循环体中调用函数EnumChildWindow比调用GetWindow函数可靠。调用GetWindow函数实现该任务的应用程序可能会陷入死循环或退回一个已被销毁的窗口句柄。
findwindow FindWindow,Win32 API函数。
FindWindow函数返回与指定字符创相匹配的窗口类名或窗口名的最顶层窗口的窗口句柄。这个函数不会查找子窗口。
函数原型:
HWND FindWindow
(
LPCTSTR lpClassName,
LPCTSTR lpWindowName
);
参数表:
lpClassName
指向一个以null结尾的、用来指定类名的字符串或一个可以确定类名字符串的原子。如果这个参数是一个原子,那么它必须是一个在调用此函数前已经通过GlobalAddAtom函数创建好的全局原子。这个原子(一个16bit的值),必须被放置在lpClassName的低位字节中,lpClassName的高位字节置零。
lpWindowName
指向一个以null结尾的、用来指定窗口名(即窗口标题)的字符串。如果此参数为NULL,则匹配所有窗口名。
返回值:
如果函数执行成功,则返回值是拥有指定窗口类名或窗口名的窗口的句柄。
如果函数执行失败,则返回值为 NULL 。可以通过调用GetLastError函数获得更加详细的错误信息。
快捷信息:
导入库:user32.lib
头文件:winuser.h
***.Net 中运用
命名空间 using System.Runtime.InteropServices;
导入库 [DllImport("user32.dll")]
函数原型 public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
参数说明 lpClassName String,指向包含了窗口类名的空中止(C语言)字串的指针;或设为零,表示接收任何类
lpWindowName String,指向包含了窗口文本(或标签)的空中止(C语言)字串的指针;或设为零,表示接收 任何窗口标题
返回值 :句柄
Private Sub Form_Load()
Dim myhwnd As Long
myhwnd = GetWindow(Me.hwnd, GW_OWNER)
ShowWindow myhwnd, SW_HIDE
End Sub
与
Private Sub Form_Load()
Dim myhwnd As Long
'myhwnd = GetWindow(Me.hwnd, GW_OWNER)
ShowWindow Me.hwnd, SW_HIDE
End Sub
区别在myhwnd不一定就是自己的句柄,有可能只是符合你查找条件的一个窗口句柄,而Me.hwnd一定是自己的句柄
Dim myhwnd As Long
myhwnd = GetWindow(Me.hwnd, GW_OWNER)
ShowWindow myhwnd, SW_HIDE
MsgBox ("zxvbsdfbv")
End SubPrivate Sub Form_Load()
'Dim myhwnd As Long
'myhwnd = GetWindow(Me.hwnd, GW_OWNER)
ShowWindow Me.hwnd, SW_HIDE
MsgBox ("xfgbsdfg")
End Sub
Private Sub Form_Load()
Dim myhwnd As Long
myhwnd = FindWindow(vbNullString, "工程1")
ShowWindow myhwnd, SW_HIDE
MsgBox ("xfvbxcvbxcvb!")
End Sub
Private Sub Command1_Click()
Dim myhwnd As Long
myhwnd = GetWindow(Me.hwnd, GW_OWNER)
ShowWindow myhwnd, SW_HIDE
End Sub
这个在在任务管理器应用程序栏不见,但窗体可见
Private Sub Command1_Click()
ShowWindow me.hwnd, SW_HIDE
End Sub
这个在任务管理器应用程序栏可见,但窗体不见好像越来越乱了
看看这些句柄值就知道了。没什么奇怪的,GetWindow不可靠,有时候行,有时候不行!
刚才我试6楼的时候,效果全都一样!