首页
社区
课程
招聘
[求助]怎样获取无标题的窗体,或者通过handle 获取窗体的hwnd
发表于: 2009-3-21 15:51 8141

[求助]怎样获取无标题的窗体,或者通过handle 获取窗体的hwnd

2009-3-21 15:51
8141
怎样获取无标题的窗体的hwnd,或者怎样通过handle 获取窗体的hwnd?

[课程]FART 脱壳王!加量不加价!FART作者讲授!

收藏
免费 0
支持
分享
最新回复 (16)
雪    币: 26
活跃值: (28)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
分析一下子窗口有没有什么特征
2009-3-21 16:29
0
雪    币: 207
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
一个封装好的程序,运行起来在最前端,上面只有两个功能按钮,软件在任务栏上面没有标题,获取不了窗口句柄,我想通过窗口句柄控制显示和隐藏,不知道也没有什么好办法
2009-3-21 17:04
0
雪    币: 26
活跃值: (28)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
用Spy++先看看有没啥特征啊
2009-3-21 17:23
0
雪    币: 412
活跃值: (30)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
5
方法1:用一些查PE资源的软件分析上面的两个功能按钮,然后枚举桌面窗体,分析每一个窗体是否有这两个功能按钮;

方法2:枚举桌面窗体,用GetWindowThreadProcessId得到PID,然后用Snapshot根据PID得到进程名,比较进程名即可。
2009-3-21 17:31
0
雪    币: 207
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
软件功能我是知道的,我只是想控制这个无标题窗体的显示和隐藏,我已经通过枚举得到程序的handle,但是不知道怎样通过handle得到无标题窗体的hwnd,或者直接有什么办法控制无标题窗体的隐藏和显示
2009-3-21 21:45
0
雪    币: 412
活跃值: (30)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
7
第2条说的很清楚了,GetWindowThreadProcessId得到PID,Snapshot得到PID,PID 相等说明是你要找的hwnd.
2009-3-22 02:18
0
雪    币: 207
活跃值: (11)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
8
是不是采用无标题 躲避反什么系统 然后不会用热键隐藏自己了-  -
2009-3-22 02:50
0
雪    币: 281
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
~~ 不可以通过类名么?
2009-3-22 08:48
0
雪    币: 207
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
ImHolly  你好,能否给个简单的例子,许多方法我基本都尝试过了
2009-3-22 11:04
0
雪    币: 412
活跃值: (30)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
11
BOOL CALLBACK EnumWindowsProc(
  HWND hwnd,      
  LPARAM lParam  
)
{
        LPDWORD lpdwProcessId;
                       
                GetWindowThreadProcessId(hWnd,lpdwProcessId);

        CToolhelp thProcesses(TH32CS_SNAPPROCESS);
        PROCESSENTRY32 pe={sizeof(pe)};
        BOOL fOK=thProcesses.ProcessFirst(&pe);               
                for(;fOK;fOK=thProcesses.ProcessNext(&pe))
                    {
                 if(pe.th32ProcessID==lpdwProcessId)
                {
                   ::ShowWindow((HWND)hProcess,SW_HIDE);
                    CloseHandle(hProcess);

                }
        }       
    return true;
}

EnumWindows(EnumWindowsProc,0);

CToolhelp是Jeffery写的那个Snapshot的类,这个没有就自己写吧.
2009-3-22 14:56
0
雪    币: 207
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
我用的方法与你的类似,编译过了,链接报错,谢谢楼上的,用你的方法试试
2009-3-22 16:18
0
雪    币: 750
活跃值: (228)
能力值: ( LV9,RANK:780 )
在线值:
发帖
回帖
粉丝
13
遍历系统所有窗口,在回调函数里取得每个窗口相关程序的handle,与你取得的程序handle比较,相同就找到了窗口,隐藏或显示此窗口即可!
2009-3-25 00:05
0
雪    币: 207
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
13楼的,遍历系统所有窗口,在回调函数里取得每个窗口相关程序的handle,与你取得的程序handle比较,相同就找到了窗口,隐藏或显示此窗口即可!,

只有handle怎么能控制窗体的显示隐藏,有没有hwnd,你有什么方法
2009-3-25 11:29
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
感觉2楼说的很清楚
2009-3-25 11:54
0
雪    币: 253
活跃值: (89)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
楼上的各位抛砖引玉,内容值得收藏!
2009-3-25 11:55
0
雪    币: 412
活跃值: (30)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
17
BOOL CALLBACK EnumWindowsProc(
  HWND hwnd,      
  LPARAM lParam  
)
{
  DWORD dwProcessId;
  CToolhelp thProcesses(TH32CS_SNAPPROCESS);
  PROCESSENTRY32 pe={sizeof(pe)};

  CString str="IEXPLORE.EXE";        //这里可以填上你要隐藏的程序名
  
  
  BOOL fOK=thProcesses.ProcessFirst(&pe);

  ::GetWindowThreadProcessId(hwnd,&dwProcessId);
  
  for(;fOK;fOK=thProcesses.ProcessNext(&pe))
  {
    
    if(pe.szExeFile==str && pe.th32ProcessID==dwProcessId)
    {
      ::ShowWindow(hwnd,SW_HIDE);
      break;
    }
  }

  return TRUE;
}

void CHidewndDlg::OnButton1() 
{
  // TODO: Add your control notification handler code here
  ::EnumWindows(EnumWindowsProc,0);
}

上次给的代码是当时随手写的 ,这次代码测试过了,能用.
2009-3-25 18:05
0
游客
登录 | 注册 方可回帖
返回
//