首页
社区
课程
招聘
[原创][原创]句柄战争 如何获取Windows下隐藏的句柄
发表于: 2010-11-5 11:06 8607

[原创][原创]句柄战争 如何获取Windows下隐藏的句柄

2010-11-5 11:06
8607
我们知道在跨进程操作窗体中,可以通过以下的方式操作窗体(源码直接复制可用)

但是在一些程序中,往往隐藏了子窗体,应该如何获取呢?

根据网络上的讨论,窗体句柄是无法隐藏的,可能是将子窗体设置成可见,多次派生

所以无法定位到句柄,大家讨论一下,如何快速获取隐藏的窗体?

//每次讨论都会奉献一段经过测试的实用代码
//以下是在这次讨论的代码

HWND hWnd;
       
DWORD style=0;
       
hWnd=::FindWindow("Static",0); //设置需要搜索的窗体参数

      if( hWnd ==NULL)

     {
          AfxMessageBox(_T("无法进入hWnd句柄"));//MFC环境下,API环境下MessageBox
       
     }
       
      else
       
     {
       
        AfxMessageBox(_T("成功打开句柄"));
     }

//枚举句柄下的子窗体
       
DWORD thread,process;
thread=GetWindowThreadProcessId(hWnd,&process);

if (GetWindowHandleByPID(thread)!=NULL)
{

}

                HWND hwndChild = ::GetWindow(  hWnd, GW_CHILD);  

                while(hwndChild)  
                {  
               
                       
               
       
                        style=::GetWindowLong(hwndChild,GWL_STYLE);
                       
                        if(54000000==style)
                        {
                       
                               
                               
                        //发送鼠标点击       
        ::SendMessage(hwndChild,WM_RBUTTONUP,0,MAKELPARAM(146,150));
                               
               
                        }
                       
               
                        if(0x50010000==style)
                        {
                       
                               
               
                        //发送消息信息
                ::SendMessage(hwndChild,WM_SETTEXT, 0, (LPARAM)_T("123123"));
                               
               
                        }
                        hwndChild = ::GetWindow( hwndChild, GW_HWNDNEXT);  
                       
        }

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
不知道你要表达什么?
遍历进程结构,找到目标句柄表,再读出句柄类型,句柄名字,目标设备信息,引用计数等等好多,全都可以读出来
根据需要过滤要找的?
我不太明白你的意思
2010-11-5 14:37
0
雪    币: 106
活跃值: (276)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
3
能否有参考代码?
2010-11-5 15:11
0
雪    币: 356
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
同样没搞懂楼主要的是什么,究竟是要找到被隐藏的窗口句柄还是找到被隐藏的进程句柄
2010-11-5 17:30
0
雪    币: 356
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
你的那个while循环只能枚举到"static"窗口的所有下一级子窗口,而static的各级父窗口以及static的二级包括二级以下的父窗口都没有枚举到。
不如直接使用EnmuWindows来的直接,比较一下进程ID,很容易就能枚举出所有窗口,无论窗口是不是隐藏。
看标题,我还以为讨论的是如何隐藏窗口句柄的问题呢......小激动一下。网上说的窗口无法隐藏指的是窗口句柄是个全局唯一的系统句柄(其实是窗口对象的一个系统全局引用),这个在一般情况下是无法隐藏的,和窗口本身是否显示完全没有关系。
2010-11-5 17:38
0
雪    币: 106
活跃值: (276)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
6
能否有可用代码参考,直接用VC代码参考直观一些,现在常见的窗体API
如:
EnmuWindows
EnumWindowsProc
FindWindow
FindWindowEx
都已经被Hook,这些函数无法获得想要的句柄如,获取360,卡巴斯基的的句柄
在这样的情况下,如何获得想要窗体的句柄?
2010-11-5 17:52
0
游客
登录 | 注册 方可回帖
返回
//