如何在vba中用FindWindow获得窗口句柄?

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

 

 

       

发表评论