vb通过句柄获得窗口名称

API函数解答。。
2024-11-30 04:48:01
推荐回答(2个)
回答(1):

获取窗体句柄通常有如下几个API函数:1、用于父窗口,findwindow FindWindowVB声明Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long说明寻找窗口列表中第一个符合指定条件的顶级窗口(在vb里使用:FindWindow最常见的一个用途是获得ThunderRTMain类的隐藏窗口的句柄;该类是所有运行中vb执行程序的一部分。获得句柄后,可用api函数GetWindowText取得这个窗口的名称;该名也是应用程序的标题)返回值Long,找到窗口的句柄。如未找到相符窗口,则返回零。会设置GetLastError参数表参数类型及说明lpClassNameString,指向包含了窗口类名的空中止(C语言)字串的指针;或设为零,表示接收任何类lpWindowNameString,指向包含了窗口文本(或标签)的空中止(C语言)字串的指针;或设为零,表示接收任何窗口标题注解很少要求同时按类与窗口名搜索。为向自己不准备参数传递一个零,最简便的办法是传递vbNullString常数示例Dim hw&, cnt&
Dim rttitle As String * 256
hw& = FindWindow("ThunderRT5Main", vbNullString) ' ThunderRTMain under VB4
cnt = GetWindowText(hw&, rttitle, 255)
MsgBox Left$(rttitle, cnt), 0, "RTMain title"2、用于子窗口:findwindowexFindWindowExVB声明Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long说明在窗银耐尘口列表中寻找与指定条件相符的第一个子窗口返回值Long,找到的亩喊窗口的句柄。如未找到相符窗口,则返回零。会设置GetLastError参数表参数类锋禅型及说明hWnd1Long,在其中查找子的父窗口。如设为零,表示使用桌面窗口(通常说的顶级窗口都被认为是桌面的子窗口,所以也会对它们进行查找)hWnd2Long,从这个窗口后开始查找。这样便可利用对FindWindowEx的多次调用找到符合条件的所有子窗口。如设为零,表示从第一个子窗口开始搜索lpsz1String,欲搜索的类名。零表示忽略lpsz2String,欲搜索的类名。零表示忽略 3、获取窗体标题:GetwindowText GetWindowTextVB声明Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long说明取得一个窗体的标题(caption)文字,或者一个控件的内容(在vb里使用:使用vb窗体或控件的caption或text属性)返回值Long,复制到lpString的字串长度;不包括空中止字符。会设置GetLastError参数表参数类型及说明hwndLong,欲获取文字的那个窗口的句柄lpStringString,预定义的一个缓冲区,至少有cch+1个字符大小;随同窗口文字载入cchLong,lpString缓冲区的长度注解不能用它从另一个应用程序的编辑控件中获取文字 4、获取窗体的类名:GetclassName GetClassNameVB声明Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long说明为指定的窗口取得类名返回值Long,以字节数表示的类名长度;排除最后的空中止字符。零表示出错。会设置GetLastError参数表参数类型及说明hwndLong,欲获得类名的那个窗口的句柄lpClassNameString,随同类名载入的缓冲区。预先至少必须分配nMaxCount+1个字符nMaxCountLong,由lpClassName提供的缓冲区长度Top 给你举例如下:Private Const MaxControlUnit = 65535

Private Sub Command1_Click()
Dim hwnd As Long
Dim hWnd2 As Long
Dim Caption As String * 255
Dim ClassName As String * 255
Dim Output As String
Dim i As Long
hwnd = FindWindow(vbNullString, "Form1")
For i = 0 To MaxControlUnit
hWnd2 = FindWindowEx(hwnd, hWnd2, vbNullString, vbNullString)
If hWnd2 > 0 Then
GetClassName hWnd2, ClassName, Len(ClassName)
GetWindowText hWnd2, Caption, Len(Caption)
Output = "句柄是:" & hWnd2 & " " & "类名为:" & ClassName
MsgBox Output
Output = "标题是:" & Caption
MsgBox Output
Else
Exit For
End If
Next
End Sub
'只要修改那个form1,改成你要的窗体名,就可以了

回答(2):

vb如何获取程序的窗口标题名称:API函数声明:搭橘Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA"斗册 (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long调用:知销团Private Sub Form_Load()Dim a As Stringa = Space(255)GetWindowText hwnd, a, 255msgbox aEnd Sub