Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Автоматический ввод текста в edit box


Автор: StillPhelix 8.1.2016, 18:03
Есть некоторое приложение, в котором нажимая на кнопку получаем модальное окно с просьбой в одно текстовое поле ввести имя пользователя, а в другое - пароль. Задача: написать программу, которая бы вводила пароль и имя пользователя, а потом сама нажимала кнопку. Программе (исходник которой ниже) удалось только нажать кнопку. А вот заполнить текстовые поля - нет. Где ошибки в моём исходнике и как их исправить?
Код

#include <string.h>
#include <stdio.h>
#include <windows.h>
#include <winuser.h>

// КОНФИГУРАЦИЯ
#define MAX_STR    100
#define MY_NAME    "StillPhelix"
#define NAMEWIN    "Password"


// ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ (некрасивно, но просто, хотя и безвкусно)
HWND regnum        = 0;
HWND me_hwnd    = 0;
HWND hackreg    = 0;
HWND username    = 0;
HWND input_but    = 0;
int N = 0;


// ПЕРЕЧИСЛЕНИЕ ОКОН ВЕРХНЕГО УРОВНЯ
// ===========================================================================
// ищем окно с заголовком NAMEWIN и заносим его хэндл в гл. переменную me_hwnd
BOOL CALLBACK EnumWindowsProc(HWND hwnd,LPARAM lParam)
{
    char buf[MAX_STR];

    // читаем заголовок
    GetWindowText(hwnd, buf, MAX_STR - 1);

    // это NAMEWIN?
    if (strstr(buf, NAMEWIN) == buf)
    {
        // получаем его hwnd и прекращаем просмотр окон
        me_hwnd = hwnd;
        return 0;
    }

    // просмотр окон продолжается
    return 1;
}

// ПЕРЕЧИСЛЕНИЕ ДОЧЕРНИХ ОКОН crackme
// ===========================================================================
// получаем хэндлы всех интересующих нас окон
// (порядок окон определяем либо экпериментально, либо тестовым прогоном
// с отладочным выводом информации по каждому из окон)
BOOL CALLBACK EnumChildWindowsProc(HWND hwnd,LPARAM lParam)
{
    

    switch(++N)
    {
    case 1:    // конопка ввода
        input_but = hwnd;
        return 0;

    case 4:    // окно для ввода пароля
        regnum = hwnd;
        break;

    case 5:    // окно с именем пользователя
        username = hwnd;
        break;

    case 6:    // text со строкой "Password"
        hackreg = hwnd;
        break;
    }
    if(lParam == 0) EnumChildWindows(hwnd, EnumChildWindowsProc, 1);
    return 1;
}


int main()
{
    WORD TwoChar;
    unsigned char ch;
    char regnum_buf[100] = "]UMQAAI]MY";
    char username_buf[100] = "";
    int lenText;

    // TITLE
    printf("autocrack for crackme.58DD2D69h.CPP by StillPhelix\n");

    // перечисляем окна верхнего уровня в поиске нашего
    EnumWindows(&EnumWindowsProc, 0);
    if (me_hwnd == 0)
    {
        printf("-ERR: %s not running!\x7\n", NAMEWIN);
        return -1;
    }

    // получаем хэнделы интересующих нас дочерних окон
    EnumChildWindows(me_hwnd, &EnumChildWindowsProc, 0);

    // получаем имя пользователя и, если оно недостаточно длинное,
    // вводим имя по умолчанию
    lenText = GetWindowTextLength(username);
        // получит введенное имя
        GetWindowText(username, username_buf, lenText+1);
        if (strlen(username_buf)>=0xA);
        else
        {
            // имя слишком коротко, вводим в окно имя по умолчанию
            SendMessage(username, WM_SETFOCUS,    1,    0);
            SendMessage(username, WM_SETTEXT,    0,    (LPARAM)MY_NAME);
            SendMessage(username, WM_KILLFOCUS,    1,    0);
        }

    // вводим сгенерированный номер в окно ломаемого приложения
    SendMessage(regnum,        WM_SETTEXT,        0,    (LPARAM) regnum_buf);

    // нажимаем на кнопку "Ввод"
    SendMessage(input_but,    WM_SETFOCUS,    1,    0);
    SendMessage(input_but,    BM_SETSTATE,    1,    0);
    PostMessage(input_but,    WM_KILLFOCUS,    0,    0);

    return 0;
}

Автор: StillPhelix 8.1.2016, 19:58
Код

case 1:    // конопка ввода
        input_but = hwnd;
        return 0;//заменить на break;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)