当前位置:编程学习 > VB >>

获取无标题子窗口句柄

知道父窗口的类名和窗口标题,我可以得到父窗口的句柄,但是打开的一个子窗口,用SPY测得无标题,类名和父窗口的句柄一样的,我要怎么获取这个子窗口的句柄呢,不要说方法了,我网上查了大多都是那样说,但是我不会写,具体写点代码出来更好了 --------------------编程问答-------------------- Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
--------------------编程问答-------------------- 子窗口是无标题 --------------------编程问答-------------------- 无标题也可以查找啊 

引用 2 楼 xieminglei123 的回复:
子窗口是无标题
--------------------编程问答-------------------- wnd = FindWindowEx(父窗体的句柄, 0, 子窗体的类名, vbNullString)
--------------------编程问答-------------------- 子窗体的类名用SPY 测到和父窗口一样,而且里面大多数打开的子窗口的类名都是和父窗口的一样 --------------------编程问答-------------------- 这个我就爱莫能助了,我以前就是这么得到QQ密码的
不知道你要对付的程序,所以无从下手

引用 5 楼 xieminglei123 的回复:
子窗体的类名用SPY 测到和父窗口一样,而且里面大多数打开的子窗口的类名都是和父窗口的一样
--------------------编程问答-------------------- 我要做的就是QQ游戏里面,四国军棋里面的窗口 --------------------编程问答--------------------
引用 6 楼 getemail 的回复:
这个我就爱莫能助了,我以前就是这么得到QQ密码的

我以前丢的QQ是不是你搞去的呢? --------------------编程问答--------------------
引用 7 楼 xieminglei123 的回复:
我要做的就是QQ游戏里面,四国军棋里面的窗口


棋友...

军旗界面是类似新版本qq那样的界面, 纯自绘, 不是directui, 只是应用了 dui的一些概念

他没有子控件的概念, 上面所有的控件都是对象, 那个显示信息的窗口除外

要想操作那个窗口, 得用破解的方式,分析程序了

--------------------编程问答-------------------- 我知道主窗口是自绘,但是比如点击上面那设置按钮弹出来的设置子窗口就不是自绘,我要获取的就这样的子窗口 --------------------编程问答-------------------- 棋友 --------------------编程问答--------------------
引用 10 楼 xieminglei123 的回复:
我知道主窗口是自绘,但是比如点击上面那设置按钮弹出来的设置子窗口就不是自绘,我要获取的就这样的子窗口


如果仅仅是操作那个设置窗口里面的内容, 简单多了

先获取主窗口句柄, 然后 getwindowthreadid ,获取进程id或者线程id,哪个都行
然后再根据设置窗口的类名,获取到句柄,这可以由枚举完成, 得到句柄后同样通过getwindowthreadid获取相应的id, 然后对比,如果相同,说明是同一个进程的两个窗口, 然后在枚举设置窗口的下级控件,找到要操作的控件,发相应的消息就能操作了 --------------------编程问答--------------------
引用 12 楼 pctgl 的回复:
引用 10 楼 xieminglei123 的回复:

我知道主窗口是自绘,但是比如点击上面那设置按钮弹出来的设置子窗口就不是自绘,我要获取的就这样的子窗口


如果仅仅是操作那个设置窗口里面的内容, 简单多了

先获取主窗口句柄, 然后 getwindowthreadid ,获取进程id或者线程id,哪个都行
然后再根据设置窗口的类名,获取到句柄,这可以由枚举完成, 得到句柄后同……


搭个车请教一下PctGL,如果照你说的,军棋用什么方法取得内置值比较理想。 --------------------编程问答--------------------
引用 13 楼 skylinecn 的回复:


破方法... 除此之外... 别无他法... --------------------编程问答-------------------- 可以获得的,用SPY++获得窗口ID,然后用GetDlgItem这个API获取句柄

GetDlgItem(父窗口句柄, 窗口ID) --------------------编程问答-------------------- 棋友...
!!! --------------------编程问答--------------------

'==============================================================================
' Constant defining ( 常数定义 )
'==============================================================================
Private Const GW_CHILD = 5
Private Const GW_HWNDNEXT = 2

'==============================================================================
' API function declare ( API函数声明 )
'==============================================================================
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" ( _
                        ByVal lpClassName As String, _
                        ByVal lpWindowName As String) As Long
Private Declare Function GetWindow Lib "user32" ( _
                        ByVal hwnd As Long, _
                        ByVal wCmd As Long) As Long

'==============================================================================
' 基本事件处理过程
'==============================================================================
'----------------- “开始”按钮点击事件 -----------------
Private Sub Command1_Click()
    Dim ParentWnd As Long   '父窗口句柄
    Dim ClientWnd As Long   '子窗口句柄
    
    List1.Clear             '清楚列表框内容
    '以下是取得你指定窗口句柄过程,注意修改类名和窗口名
    ParentWnd = FindWindow("你说的类名", "你说的窗口名")
    If ParentWnd = 0 Then
        MsgBox "没有找到父窗口。", 16, "错误"
        Exit Sub
    End If
    '取得第一个子窗口的句柄
    ClientWnd = GetWindow(ParentWnd, GW_CHILD)
    If ClientWnd = 0 Then
        MsgBox "在指定窗口中没有发现子窗口的存在。", 16, "错误"
        Exit Sub
    End If
    '开始循环查找所有相同层次的子窗口
    Do
        DoEvents
        List1.AddItem "子窗口:" & ClientWnd
        ClientWnd = GetWindow(ClientWnd, GW_HWNDNEXT)
    Loop While ClientWnd <> 0
    MsgBox "完成处理。", 64, "提示"
End Sub
补充:VB ,  API
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,