首页
社区
课程
招聘
[原创]窗口激活工具(VC++ MFC版)
发表于: 2007-2-2 11:33 9167

[原创]窗口激活工具(VC++ MFC版)

2007-2-2 11:33
9167
窗口激活工具(VC++ MFC版)                  By Jacky Chou

    记得以前 非安全 老师 用ASM也写过这样的工具,他的好像还带*号密码查看功能的。没有什么很大的利用价值,写出来只是为了像我这样

的菜鸟提高对编程的兴趣,同时也希望VC初学者能够理解激活功能在VC中是如何实现的。
    思路:1,获取鼠标坐标,根据鼠标位置获取当前窗口句柄。
          2,枚举该窗口中的子窗口,若有非激活的,则将其激活。

    查看MSDN

    我们查找EnumChildWindows函数
    The EnumChildWindows function enumerates the child windows that belong to the specified parent window by passing the

handle to each child window, in turn, to an application-defined callback function. EnumChildWindows continues until the last

child window is enumerated or the callback function returns FALSE.

    从上面可以看到,EnumChildWindows使用了回调函数。

    Syntax
BOOL EnumChildWindows(HWND hWndParent,
    WNDENUMPROC lpEnumFunc,
    LPARAM lParam
);

    我们再查看一下其回调函数的使用。
The EnumChildProc function is an application-defined callback function used with the EnumChildWindows function. It receives

the child window handles. The WNDENUMPROC type defines a pointer to this callback function. EnumChildProc is a placeholder

for the application-defined function name.

Syntax

BOOL CALLBACK EnumChildProc(HWND hwnd,
    LPARAM lParam
);

Parameters
hwnd
[in] Handle to a child window of the parent window specified in EnumChildWindows.    //回调函数的句柄指向了子窗口中的句柄。
lParam
[in] Specifies the application-defined value given in EnumChildWindows.

Return Value
To continue enumeration, the callback function must return TRUE; to stop enumeration, it must return FALSE.

  所以我们只要在回调函数中,将所以没有激活的窗口,全部将其激活即可。

  另外一个需要注意的地方,那就是 我们定义的窗口句柄问题,我们需要将其定义为全局的变量,否则我们只能激活我们自己窗口的非激活的

控件了,不能激活其他窗口的控件了。

    /*程序关键代码*/

   //定义全局变量
   POINT curpoint;
   HWND curhwnd;
   CWnd *curwnd;

    //OnInitDialog()函数下设置一个时钟

   SetWindowPos(&wndTopMost,0,0,0,0,SWP_NOSIZE|SWP_NOMOVE|WS_EX_TOPMOST);  //设置为顶层窗口
   SetTimer(1,100,NULL);                                                   //时钟100 MS

BOOL CALLBACK EnumChildProc(HWND hwnd,          //回调函数的定义
                           LPARAM lParam)
{
                if (!IsWindowEnabled(hwnd))      //若为非激活状态,则将其激活
                {
                        EnableWindow(hwnd,TRUE);
                }
                return TRUE;
}

  void CEnableWindowDlg::OnTimer(UINT nIDEvent)              //时钟函数
{
        // TODO: Add your message handler code here and/or call default
        if (1  == nIDEvent)
        {
                GetCursorPos(&curpoint);                      //获取鼠标坐标
                curwnd = WindowFromPoint(curpoint);           //转成窗口指针
                curhwnd = curwnd->m_hWnd;                     //获取窗口句柄
                SetDlgItemInt(IDC_HANDLE,(int)curhwnd);       //输出窗口句柄
                SetDlgItemInt(IDC_X,curpoint.x);              //鼠标鼠标坐标X
                SetDlgItemInt(IDC_Y,curpoint.y);              //鼠标鼠标坐标Y
                EnumChildWindows(curhwnd,&EnumChildProc,NULL);  //枚举子窗口
            CDialog::OnTimer(nIDEvent);
        }
}

   以上代码比较简单,也比较清晰(个人想法),程序在WinXP Sp2  VC++ 6.0 EnterPrise English Version 下编译通过,测试成功!

   Next 写 VC中如何以消息的形式获取其他exe程序窗口中的*号密码。

   Download-Link:
   http://www.live-share.com/files/149822/EnableWindow.rar.html

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 179
活跃值: (131)
能力值: ( LV12,RANK:290 )
在线值:
发帖
回帖
粉丝
2
支持一下
2007-2-2 12:48
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
我察看Vc6.0打开的一个工程,鼠标放在工作区,并没有激活其他文档窗口亚。
搂住的功能怎么用,对MDI程序美作用?
2007-2-5 10:58
0
雪    币: 216
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
最初由 kuelite 发布
我察看Vc6.0打开的一个工程,鼠标放在工作区,并没有激活其他文档窗口亚。
搂住的功能怎么用,对MDI程序美作用?


功能是就是EnableWindow  代码中很清楚
2007-2-5 13:06
0
游客
登录 | 注册 方可回帖
返回
//