回 帖 发 新 帖 刷新版面

主题:VB获取窗口时 找不到


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个回复)

沙发

[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 楼


对了 这位大哥 你的意思是 我只能前台?
前台 是不是指 模拟鼠标  和 键盘 
比如自动吃血吃蓝   ?
那后台 又指的是什么呢      ?



我只想 让他 自动  打怪和 加血加蓝  这可以实现吧,获得窗口这样有用吗 ?

4 楼

后台是窗口可以最小化放到后台,依然可以自动打怪

5 楼

怎样实现 自动打怪啊 兄弟 啊  既然不能用那么多函数来获取  那怎么 获得窗口的句柄内

帮帮我吧 大哥

我来回复

您尚未登录,请登录后再回复。点此登录或注册