读书人

FindWindowEX没法正确获取子窗口的句杯

发布时间: 2013-01-07 10:02:25 作者: rapoo

FindWindowEX无法正确获取子窗口的句杯
以下是vb .net 的代码:


Public Class Form1
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Integer
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

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim lngHwnd As Long
Dim lngCHwnd As Long

lngHwnd = FindWindow(vbNullString, "Browser")
lngCHwnd = FindWindowEx(lngHwnd, 0, "Internet Explorer_Server", vbNullString)

Debug.WriteLine(lngHwnd & "---" & lngCHwnd)
End Sub
End Class


运行结果是:
657122---8976488743927416536

前面657122是Browser.exe 的句柄, 这个是正确的, 但是用 FindWindowEX 查找子窗口的句柄得到的是一串很多的数字8976488743927416536, 为什么会这样?

[解决办法]

lngHwnd = FindWindow(vbNullString, "Browser")
lngCHwnd = FindWindowEx(lngHwnd, 0,vbNullString,"Internet Explorer_Server")


有点疑问:
1、我不知道你的Browser到底是不是父窗体的类名还是Caption,反正这个位置该设置Caption属性才对

[解决办法]
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Integer
Private 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

不知道,红色部分的声明,在。net里面怎么规定的,看着不一样,是不是,long被升级成64位了?

读书人网 >VB

热点推荐