admin管理员组

文章数量:1532460

目录

简述

模拟下一步按钮点击

模拟单选按钮接受协议,再进行下一步点击


 

简述

想要通过程序自动控制,省略手动点击安装的过程。 通过使用windowsAPI来实现

实现原理:通过安装程序窗口句柄,再获取控件句柄,向控件发送按钮点击消息,从而实现自动操作

 

 

 

模拟下一步按钮点击

#include <Windows.h>

HWND hWnd = FindWindow(NULL, _T("Microsoft Speech SDK 5.1 - InstallShield Wizard"));//获取窗口句柄
if(hWnd != NULL)
{
    HWND hBtn = FindWindowEx(hWnd, NULL, NULL, _T("&Next >"));//获取按钮句柄
    if(hBtn != NULL)
    {
        WORD btnID = (WORD)GetDlgCtrlID(hBtn);
        SendMessage(hWnd, WM_COMMAND, MAKELONG(btnID, BN_CLICKED), (LPARAM)hBtn);//发送按钮点击消息
    }
}

 

 

模拟单选按钮接受协议,再进行下一步点击

注意:两个单选按钮被一个Button类的部件所包裹着,从界面表面是看不出来的,可以通过Microsoft Spy++ 软件进行查看

如上图的颜色线标注,我将相同层次的部件用了同样的颜色进行标注,

 

bool radioFlag = false;//接受单选是否选中

//点击-单选接受按钮
hWnd = FindWindow(NULL, _T("Microsoft Speech SDK 5.1 - InstallShield Wizard"));//重新获取窗口句柄
if(hWnd != NULL)
{
    HWND hCWnd = FindWindowEx(hWnd, NULL, _T("Button"), NULL);//获取两个单选按钮父部件句柄
    if(hCWnd != NULL)
    {
        HWND hRadio = FindWindowEx(hCWnd, NULL, NULL, _T("I &accept the terms in the license agreement"));//获取接受单选按钮句柄
        if(hRadio != NULL)
        {
            WORD btnID = (WORD)GetDlgCtrlID(hRadio);
            SendMessage(hCWnd, WM_COMMAND, MAKELONG(btnID, BN_CLICKED), (LPARAM)hRadio);//发送点击消息给单选按钮
            radioFlag = true;
        }
    }
}

//点击-下一步按钮
if(radioFlag)
{
    HWND hBtn = FindWindowEx(hWnd, NULL, NULL, _T("&Next >"));//获取下一步按钮句柄
    if(hBtn != NULL)
    {
        WORD btnID = (WORD)GetDlgCtrlID(hBtn);
        SendMessage(hWnd, WM_COMMAND, MAKELONG(btnID, BN_CLICKED), (LPARAM)hBtn);//发送点击消息给下一步按钮
    }
}

 

本文标签: 安装包Windows