主题:VB获取窗口时 找不到
suzhoutaicang18
[专家分:360] 发布于 2009-04-21 07:06:00
Private Sub Command1_Click()
Dim hwnd As Long
hwnd = FindWindow(vbNullString, "QQ三国自动更新程序")
If (hwnd = 0) Then
MsgBox "Window not found!"
Else
Label1.Caption = "成功"
End If
这个"QQ三国自动更新程序" 是可以找到得 我要找的不是这个窗口, 这时候在任务管理器中有这个应用程序的
我要找的是按了启动游戏后的新窗口,他的新窗口名字是 QQ三国1.0Beta4Build81 但这时应用程序里的 游戏名字已经没有了 ,而且我把窗口名字也改成
hwnd = FindWindow(vbNullString, "QQ三国1.0Beta4Build81 ")
腾讯的多数游戏 在应用程序里都找不到 它的名字
怎么办 高手教教我哈
回复列表 (共5个回复)
沙发
广告专业户 [专家分:400] 发布于 2009-04-21 10:44:00
[code=c]
Private Const GW_HWNDNEXT = 2
Private Const GW_CHILD = 5
Private Declare Function GetDesktopWindow Lib "user32" () As Long
Private Declare Function GetWindow Lib "user32" _
(ByVal hwnd As Long, _
ByVal wCmd As Long) As Long
Private Declare Function GetWindowText Lib "user32" _
Alias "GetWindowTextA" _
(ByVal hwnd As Long, _
ByVal lpString As String, _
ByVal cch As Long) As Long
Private Declare Function GetClassName Lib "user32" _
Alias "GetClassNameA" _
(ByVal hwnd As Long, _
ByVal lpClassName As String, _
ByVal nMaxCount As Long) As Long
'函数功能: 搜索QQSG窗口
'hwndAfter: 从指定窗口开始搜索, 默认从第一个窗口开始搜索
Private Function GetQQSGWindow(Optional hwndAfter As Long = 0) As Long
'确定搜索的第一个窗口
Dim hwnd As Long
If hwndAfter = 0 Then
'从桌面窗口的第一个子窗口开始搜索
hwnd = GetDesktopWindow()
hwnd = GetWindow(hwnd, GW_CHILD)
Else
'从指定窗口开始搜索
hwnd = GetWindow(hwndAfter, GW_HWNDNEXT)
End If
'循环搜索
Do While hwnd <> 0
'获取类名与标题
Dim n As Long
Dim sBuffer As String * 128
Dim sText As String, sClass As String
n = GetWindowText(hwnd, sBuffer, 128)
sText = Left(sBuffer, n)
n = GetClassName(hwnd, sBuffer, 128)
sClass = Left(sBuffer, n)
'与QQSG比较
Const QQSG_TEXT As String = "QQ三国1.0Beta4Build81" & vbNullChar & "3"
Const QQSG_CLASS As String = "QQSGWinClass"
If sText = QQSG_TEXT And sClass = QQSG_CLASS Then
GetQQSGWindow = hwnd
Exit Function
End If
'搜索下一个窗口
hwnd = GetWindow(hwnd, GW_HWNDNEXT)
Loop
'没找到任何窗口
GetQQSGWindow = 0
End Function
Private Sub Command1_Click()
'调用示例
Dim hwnd As Long
hwnd = GetQQSGWindow()
Do While hwnd <> 0
MsgBox "找到QQSG: " & hwnd
hwnd = GetQQSGWindow(hwnd)
Loop
End Sub
[/code]
分析:
GetForegroundWindow FindWindow FindWindowEx WindowFromPoint都已经被腾讯的tessafe.sys驱动Hook掉了,因此用上述函数是找不到QQ游戏的窗口的.但腾讯忘了Hook掉GetWindow,因此还可以用此方法枚举出QQ游戏窗口
游戏窗口标题,腾讯耍了点小技巧,在末尾加上了vbNullChar & "3", 而vbNullChar在Windows里是表示字符串结尾的,因为显示到此截断.
另外,楼主拿到它窗口也没用,你发按键消息过去它直接忽略,或者弹出个"非法模块"的东西.要想实现后台挂还得干掉tessafe.sys,当然楼主只想实现前台的WINIO按键就令当别论了
楼主别发了帖就跑了,帮你写了那么多东西,累死了.怎么也得感谢一声,哈哈.[em9]
3 楼
suzhoutaicang18 [专家分:360] 发布于 2009-04-21 18:17:00
对了 这位大哥 你的意思是 我只能前台?
前台 是不是指 模拟鼠标 和 键盘
比如自动吃血吃蓝 ?
那后台 又指的是什么呢 ?
我只想 让他 自动 打怪和 加血加蓝 这可以实现吧,获得窗口这样有用吗 ?
4 楼
广告专业户 [专家分:400] 发布于 2009-04-21 22:02:00
后台是窗口可以最小化放到后台,依然可以自动打怪
5 楼
suzhoutaicang18 [专家分:360] 发布于 2009-05-06 12:26:00
怎样实现 自动打怪啊 兄弟 啊 既然不能用那么多函数来获取 那怎么 获得窗口的句柄内
帮帮我吧 大哥
我来回复