谢谢先!

解决方案 »

  1.   

    这个到没想过,不过QQ窗口的句柄可以取得的
    然后根据句柄可以取得窗口里所有的子窗口句柄(包括显示聊天信息的控件句柄)。
    根据子窗口句柄可以得到子窗口的类名和窗口标题,
    根据类名和窗口标题去识别哪一个窗口句柄是显示聊天信息的控件。
    然后根据这个子窗口的句柄取得子窗口的客户区域在屏幕的位置和大小
    然后将窗口抓图,然后分析图片,认出“接受”在屏幕上的位置(这样要用到AI)
    然后触发鼠标事件点击那个区域。
      

  2.   

    谢谢楼上大侠指点!
    但是这个“然后将窗口抓图,然后分析图片,认出“接受”在屏幕上的位置(这样要用到AI) ”这个不好办啊
    现在是句柄知道了,就是那个窗口不是IE窗口,一次不知怎么才能得到那个“接受”的链接,或者说不知怎么才能“点击”那个“接受”继续请教!
      

  3.   

    得到句柄就发送消息试试。既然得到句柄了,即可得到rect,若消息无效,则用模拟鼠标的办法。
    但怎么看都是在写病毒,呵呵
      

  4.   

    可以得到“接收”这个控件的句柄及类名的,根据其caption取得它的句柄,类名为Static,然后发消息
      

  5.   

    可以得到“接收”这个控件的句柄及类名的,根据其caption取得它的句柄,类名为Static,然后发消息
    ===我使用spy++得到的是“接受”、“取消”所在的那个大框框的句柄,ClassName是“AfxWnd42”,caption是""(空),这个子窗口下面还有个ClassName是MCIWndClass,caption是""(空)的子窗口
    但是那个“接受”、“取消”就没有办法使用代码点击,请问怎么办?
    btw:上面2个哥们说什么病毒,莫名其妙,你怎么就判断是病毒呢?这个只是我们一个系统想使用qq做中介管理不同地点的分支机构电脑进行下载或者管理。你没有说对,不好意思了不过还是谢谢帮我顶贴。
      

  6.   

    我反对,病毒最大的特征就是自我复制,具备传染性,还要很了解PE格式,还要对Windows和网络很了解。
    对VB也要很了解,不然是搞不出“vb病毒”的。他在VB版发帖问这种问题,就说明了他想用VB来做这个事。
    而VB的运行是基于运行库的,虽然也可以在多数系统上,不用安装就可以执行无控件的VB程序,但真想做
    成“病毒”还真的不容易。还有,这个需求还是基于能上网QQ(对方已经登陆的),目的只是使用QQ的远
    程控制功能。这样的需求大不了算个后门程序,怎么也算不上“病毒”。
    还有,已经实现了这个远程控制的程序很多,比如radmin、PCAnywhere、冰河等软件都可以进行远程主
    机的控制,使用QQ反而麻烦。还要让对方启动QQ,输入账号密码登陆后才能去申请控制。还要自己编个程
    序再对方主机先运行好了等着这个请求,还要等对方打开QQ聊天窗口才能去操作,搞不好还有用到AI技术
    (人工智能技术)来做处理。看着就累,呵呵。不过QQ的远程控制是P2P的,到是比那些给服务器用的优
    秀点,呵呵
      

  7.   

    至于楼主,你可以看看这里了解一下大概的思路和方法:如何在图片中提取数字
    http://topic.csdn.net/u/20070602/14/b1746629-d4c8-4e55-875e-71fa46d0e288.html
    因为你要识别出来的应该只是几个中文字,应该更加简单
      

  8.   

    QQ具体如何实现不太清楚.不过做类似的东西,应该不是使用IE,而是RichEdit.RichEdit,支持OLE复合内容的显示,从而不排除这个接受/取消只是一个OLE的子对象,而该子对象可以在被点击之后执行既定的操作,包括调用子过程.这个要实现起来不简单,所以无法给出太多的建议.至于解决方案,短时间内,更是无法谈起.
      

  9.   

    QQ聊天窗口中有两到三个类名为“RichEdit20A”的窗口
    一个是显示当前聊天信息的,一个是输入回复信息的,还有一个是显示聊天纪录的
    主要识别就是下面的东西,应该不难,就专门作这几个字的识别码就可以了
    请选择接受 还是 取消
    注意:下划线部分是识别的关键
      

  10.   

    喝茶就不用了,还不如多加点分呢,呵呵   Dim QQWindowhWnd As Long, QQChildhWnd As Long, ClassName As String
       Dim RichEdit20AIndex As Long, QQRect As RECT
       QQWindowhWnd = FindWindow("#32770", "与 " & Text1.Text & " 交谈中")
       If QQWindowhWnd <> 0 Then
          '找到了目标窗口
          QQChildhWnd = GetWindow(QQWindowhWnd, GW_CHILD)
          If QQChildhWnd <> 0 Then
             Do
                DoEvents
                ClassName = String(255, " ")
                GetClassName QQChildhWnd, ClassName, 255
                ClassName = RTrim(ClassName)
                ClassName = Left(ClassName, Len(ClassName) - 1)
                If ClassName = "RichEdit20A" Then
                   '找到的第一个类名为RichEdit20A就是
                   GetClientRect QQChildhWnd, QQRect
                   Dim DesktophWnd As Long, DesktophDC As Long, SysColor As Long
                   Dim GdiDC As Long, GdiBitmap As Long, DefaultOject As Long, QQDC As Long
                   Dim BitmapWidth As Long, BitmapHeight As Long
                   DesktophWnd = GetDesktopWindow
                   DesktophDC = GetWindowDC(DesktophWnd)
                   SysColor = GetDeviceCaps(DesktophDC, 12)
                   GdiDC = CreateCompatibleDC(0)
                   If GdiDC = 0 Then
                      MsgBox "创建GDI设备失败!", 64, "错误"
                      Exit Sub
                   End If
                   BitmapWidth = QQRect.Right - QQRect.Left
                   BitmapHeight = QQRect.Bottom - QQRect.Top
                   GdiBitmap = CreateBitmap(BitmapWidth, BitmapHeight, 1, SysColor, ByVal 0&)
                   If GdiBitmap = 0 Then
                      DeleteDC GdiDC
                      MsgBox "创建GDI位图失败!", 64, "错误"
                      Exit Sub
                   End If
                   DefaultOject = SelectObject(GdiDC, GdiBitmap)
                   QQDC = GetWindowDC(QQChildhWnd)
                   BitBlt GdiDC, 0, 0, BitmapWidth, BitmapHeight, QQDC, QQRect.Left, QQRect.Top, vbSrcCopy
                   '开始进行识别操作,已经得到了图片就是安造我上面所说的方法识别就可以了
                   ...
                                  
                   '为用完的GDI做清理
                   SelectObject GdiDC, DefaultOject
                   DeleteObject GdiBitmap
                   DeleteDC GdiDC
                   Exit Do
                End If
                QQChildhWnd = GetWindow(QQChildhWnd, GW_HWNDNEXT)
             Loop While QQChildhWnd <> 0      End If
       End If
      

  11.   

    谢谢大侠!
    在夜深人静时,对这个搞得我头昏的问题进行解答,真的感动!
    我会加分,200分吧
    至于喝茶钱,最好将账号发给我:137 278 59 861
    不想说了却不给。
    现在这个东东还有2个地方不明白:
    1:我使用SPY++看到那个qq收到远程协助时,显示“接受”“取消”的窗口类名是AfxWnd42,标题为空,却不是"RichEdit20A","RichEdit20A"是下面发信息的窗口,不是接受窗口,接受窗口才显示“接受”“取消”
    请问是怎么回事呢?2:现在代码我看了后面好像只是取得窗口图片,但是还没有说触发鼠标怎么点击那个“接受”或者“取消”呢?
    能不能百忙中帮完善一下?谢谢先!再一次感谢!
      

  12.   

    不知道你的类名是怎么得的,我的确是自己做的抓窗口信息程序取得的
    而且我的QQ是2008版,更新到了最新版本。我看到的窗口类名就是 "#32770"
    而且通过
    QQWindowhWnd = FindWindow("#32770", "与 " & Text1.Text & " 交谈中")
    Text1.Text 是对方名称,如:“与 Supermanking 交谈中”我能成功的取得QQ聊天窗口的句柄并也能取得显示“接受”出现的窗口句柄,
    也成功的抓到了图片,只是没有作识别操作而已。要作识别就要建一个特征代码库,起码要做这几个字的特征代码,
    再循环搜索前,最好好要对图像进行处理,如灰度处理,提高对比度处理等。
    然后再轮循对比特征特征库。如果都能对比上,那就是那个区域了,模拟鼠标去点就对了。技术除了问和学,还要靠自己研究和理解的。主要是你这种识别没什么价值,其实你这个需求的AI对技术是没什么要求的,全是基本语句。
    就是工作量多,唯一的要求就是逻辑思维需要清晰,这点上我都和你讲得很清楚了,
    所以还是你自己做识别吧。
      

  13.   

    希望软件都能开放API:这个是大势所趋嘛
      

  14.   

    一般别人在QQ上发远程协助的时候,你的电脑上的QQ会把接受,取消窗口弹出来,你可以只要模拟一个键盘上的空格的按键事件就可以了。关于QQ远程协助具体的一些细节的话你可以看一下www.louyue.com/qqxiezhu.htm