Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Автоматический ввод текста в edit box, Не заполняутся поля edit box 
V
    Опции темы
StillPhelix
Дата 8.1.2016, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 6.1.2016

Репутация: нет
Всего: нет



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

#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;
}

PM MAIL   Вверх
StillPhelix
Дата 8.1.2016, 19:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 6.1.2016

Репутация: нет
Всего: нет



Код

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

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.1011 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.