如何在vba中用GetClassName获取窗口的类名?

每一个窗口都属于一个窗口类,相同类型的窗口同属于一个窗口类。

窗口类名是一个非常重要的概念,在使用API时会经常被用到。

使用API函数GetClassName可以获取指定窗口的类名。

它的语法如下

int WINAPI GetClassName(
  _In_  HWND   hWnd,
  _Out_ LPTSTR lpClassName,
  _In_  int    nMaxCount
);

其中参数hWnd [in] 表示要获取类名的窗口句柄,lpClassName [out]表示获取的窗口类名,nMaxCount [in] 表示窗口类名的缓冲区字符长度。

如果运行成功,该函数的返回值是实际的窗口类名的字符长度。如果运行失败,则返回0。

如以下代码是在VBA中获取桌面窗口的类名:

Public Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
Public Declare Function GetDesktopWindow Lib "user32" () As Long
Sub QQ1722187970()
 Dim iHwnd
 iHwnd = GetDesktopWindow()
 '定义一个变量存储类名
 Dim sCN As String
 '先填充空格
 sCN = Space(255)
 Dim iLEN
 '获得实际的类名字符长度
 iLEN = GetClassName(iHwnd, sCN, 256)
 '提取实际的类名
 sCN = Left(sCN, iLEN)
 '输出类名
 Debug.Print sCN, Len(sCN)
End Sub

以下是一些常用的类名

类名 标题
excel 应用程序 XLMAIN
vba 编辑环境 wndclass_desked_gsk
vba 用户窗体 ThunderDFrame
腾讯窗口 TXGuiFoundation
vba代码窗口 VbaWindow
       

发表评论