当前位置:编程学习 > VB >>

vb通过句柄获得窗口名称

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
参数表
参数类型及说明
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、用于子窗口: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
参数表
参数类型及说明
hWnd1Long,在其中查找子的父窗口。如设为零,表示使用桌面窗口(通常说的顶级窗口都被认为是桌面的子窗口,所以也会对它们进行查找)
hWnd2Long,从这个窗口后开始查找。这样便可利用对FindWindowEx的多次调用找到符合条件的所有子窗口。如设为零,表示从第一个子窗口开始搜索
lpsz1String,欲搜索的类名。零表示忽略
lpsz2String,欲搜索的类名。零表示忽略

 

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
参数表
参数类型及说明
hwndLong,欲获取文字的那个窗口的句柄
lpStringString,预定义的一个缓冲区,至少有cch+1个字符大小;随同窗口文字载入
cchLong,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
参数表
参数类型及说明
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,改成你要的窗体名,就可以了

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后面的数据库编程怎么学啊

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,