api函数FindWindow可以根据指定的类名和窗口标题名称获得顶层窗口的句柄。
这个函数并不会查找子窗口,而且它也不区分大小写。
FindWindow函数的C++语法如下:
HWND WINAPI FindWindow( _In_opt_ LPCTSTR lpClassName, _In_opt_ LPCTSTR lpWindowName );
FindWindow函数的VB声明如下:
Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
其中参数lpClassName为指定的类名,如果为空,则查找窗口的标题满足lpWindowName参数的窗口。
如果参数lpClassName和lpWindowName都为空的话,FindWindow函数返回的是其中一个顶层窗口的句柄。
比如excel应用程序的类名为”XLMAIN”,则可以使用如下的代码获取当前excel应用程序的句柄:
Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Sub QQ1722187970()
Dim hwnd As Long
'用内置的属性获得excel应用程序句柄
hwnd = Excel.Application.hwnd
'用 FindWindow获得excel应用程序句柄
i = FindWindow("XLMAIN", vbNullString)
'对比两个句柄值
Debug.Print hwnd, i
End Sub


发表评论