vb通过句柄获得窗口名称
API函数解答。。
追问:可以发下帮助文件给我吗。。。
API函数解答。。
追问:可以发下帮助文件给我吗。。。
答案:获取窗体句柄通常有如下几个API函数:1、用于父窗口,findwindow
FindWindow |
VB声明 | |
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 | |
参数表 | |
参数 | 类型及说明 |
lpClassName | String,指向包含了窗口类名的空中止(C语言)字串的指针;或设为零,表示接收任何类 |
lpWindowName | String,指向包含了窗口文本(或标签)的空中止(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、用于子窗口:findwindowex
FindWindowEx |
VB声明 | |
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 | |
参数表 | |
参数 | 类型及说明 |
hWnd1 | Long,在其中查找子的父窗口。如设为零,表示使用桌面窗口(通常说的顶级窗口都被认为是桌面的子窗口,所以也会对它们进行查找) |
hWnd2 | Long,从这个窗口后开始查找。这样便可利用对FindWindowEx的多次调用找到符合条件的所有子窗口。如设为零,表示从第一个子窗口开始搜索 |
lpsz1 | String,欲搜索的类名。零表示忽略 |
lpsz2 | String,欲搜索的类名。零表示忽略 |
3、获取窗体标题:GetwindowText
GetWindowText |
VB声明 | |
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 | |
参数表 | |
参数 | 类型及说明 |
hwnd | Long,欲获取文字的那个窗口的句柄 |
lpString | String,预定义的一个缓冲区,至少有cch+1个字符大小;随同窗口文字载入 |
cch | Long,lpString缓冲区的长度 |
注解 | |
不能用它从另一个应用程序的编辑控件中获取文字 |
4、获取窗体的类名:GetclassName
GetClassName |
VB声明 | |
Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long | |
说明 | |
为指定的窗口取得类名 | |
返回值 | |
Long,以字节数表示的类名长度;排除最后的空中止字符。零表示出错。会设置GetLastError | |
参数表 | |
参数 | 类型及说明 |
hwnd | Long,欲获得类名的那个窗口的句柄 |
lpClassName | String,随同类名载入的缓冲区。预先至少必须分配nMaxCount+1个字符 |
nMaxCount | Long,由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,改成你要的窗体名,就可以了
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上一个:VB怎么设计程序监控?
下一个:VB后面的数据库编程怎么学啊