当前位置:C++技术网 > 资讯 > win32模拟点击窗口上的按钮控件

win32模拟点击窗口上的按钮控件

更新时间:2016-02-03 23:25:06浏览次数:1+次

    按钮在窗口中作为一个控件存在,是窗口的一个子窗口。在文章《图解子窗口控件和父窗口是如何通信的2:父窗口向子窗口控件发送消息》中,我们已经介绍了父窗口向子窗口发送消息的技术背景,对本文的理解很有好处。
    我们在WM_CREATE消息中创建一个按钮,作为窗口的控件。我们给按钮的ID设置为1。创建好按钮控件之后,我们可以在窗口的WM_COMMAND消息中,提取wParam参数的低字部分,因为这个部分是子窗口控件的ID。然后就可以处理这个按钮控件的单击消息了。下面是处理按钮单击消息的代码:

case WM_COMMAND:
    {
        switch(LOWORD(wParam))
        {
        case 1://按钮控件ID
            MessageBox(hwnd,txt,txt,0);//提示一个消息
        }
    }

    那么我们如何来模拟这个按钮的单击呢?当然是发消息咯。按钮单击消息为BM_CLICK。我们在创建子窗口按钮控件时,提前将子窗口按钮控件的句柄存储起来了,这样可以方便在非WM_COMMAND消息里使用窗口句柄给按钮控件发送消息。
    我们用鼠标单击WM_LBUTTONDOWN消息来发送一个鼠标单击消息。我们只要给按钮控件发送消息BM_CLICK即可。不过为了让模拟的效果更加不错,我们就同时设置一下按钮按下的状态,给按钮控件发送BM_SETSTATE消息,在WPARAM参数中传入1表示按下按钮,传入0表示弹起按钮。为了让模拟的更加真实,我们在WM_LBUTTONDOWN中发送按钮按下消息的同时,设置按钮的按下状态。在鼠标弹起消息WM_LBUTTONUP中,我们将按钮按下的状态恢复。
    这样设置了之后,我们在窗口客户区中单击鼠标左键就可以按下按钮,松开鼠标左键就可以弹起按钮。当然我们这里介绍的模拟方法,你可以用其他方式来实现。使用鼠标单击来模拟只是其中一个方式之一。
    关键就是BM_CLICK消息的使用。实际上这些消息,只是一个代表。如果我们要模拟其他各种控件的操作,都是利用这个思路来实现。这个实现,就可以用在外挂的使用,实际上外挂的操作就是通过消息来实现的。当然,这是简单的实现罢了,复杂的我就不在此说了,我也不太清楚。