1. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление
  2. Чат codeby в telegram перезагрузка. Обсуждаем вопросы информационной безопасности и методы защиты информации, программирование. Задавайте свои вопросы и комментируйте чужие. Подробнее ...

Ms Visual Studio Mfc

Тема в разделе "С и С++", создана пользователем solova, 29 янв 2011.

Статус темы:
Закрыта.
  1. solova

    solova Гость

    Репутация:
    0
    Решил научится манипулировать(управлять) другую программу своей.
    Например нажимать кнопки, вписывать текст, считывать и т.п.
    По этой теме я полный ноль, только сегодня решил(решился) изучить это.
    Хочу создать маленькую программу MFC которая:
    1)В уже открытом "Калькуляторе" вписывает какую либо цифру.
    2)Нажимает на какую либо кнопку.
    В своей MFC программе создал кнопку которая должна это сделать.
    написал обработчик, есть ошибки, не могу понять как исправить(но уверен они очень глупые).
    Код:
    void Cokno1Dlg::OnBnClickedButton1()
    {
    HWND ht;
    ht = (HWND)FindWindow(NULL,"Калькулятор");		//Находим окно
    ht = (HWND)GetWindow(GW_CHILD);				//заглядываем внутрь
    ht = (HWND)GetWindow(GW_HWNDNEXT);			//Окно ввода
    //SendMessage(ht, WM_SETTEXT, 0, LPARAM("777"));	// вводим "777"
    ht = (HWND)GetWindow(GW_HWNDNEXT);			//"MC"Button
    ht = (HWND)GetWindow(GW_HWNDNEXT);			//"MR"Button
    ht = (HWND)GetWindow(GW_HWNDNEXT);			//"MS"Button
    ht = (HWND)GetWindow(GW_HWNDNEXT);			//"M+"Button
    ht = (HWND)GetWindow(GW_HWNDNEXT);			//"7"
    ht = (HWND)GetWindow(GW_HWNDNEXT);			//"4"
    SendMessageA(ht,WM_LBUTTONDOWN,0,0);			//Нажимаем "4"
    SendMessageA(ht,WM_LBUTTONUP,0,0);			//Отпускаем "4"
    
    }
    В результате в "Калькуляторе" должно быть написано "7774"
    Какие у меня ошибки?
    Где можно найти описание функции SendMessage() и всех её параметров На русском.
     
  2. solova

    solova Гость

    Репутация:
    0
    что за глюк? не могу понять,
    когда пишу " SendMessage( " в сплывающем окне(строчке) мне показывают что первый параметр "UNIT message",
    и в ошибках пишет cannot convert HWND to UNIT.

    ну в этом разобрался -для MFC надо :: ставить перед (API) функцией чтобы хендл вписывать.
    <div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">вот как это выглядит</div></div><div class="sp-body"><div class="sp-content">
    Код:
    void COkno1Dlg::OnBnClickedButton1()
    {
    HWND ht;
    ht = ::FindWindow(NULL,L"Калькулятор");		//nahodim okno
    ht = ::GetWindow(ht,GW_CHILD);				//adres stroki vvoda
    ::SendMessage(ht, WM_SETTEXT, 0,(LPARAM)"777");	// vvodim "777"
    ht = ::GetWindow(ht,GW_HWNDNEXT);			//"MC"Button
    ht = ::GetWindow(ht,GW_HWNDNEXT);			//"MR"Button
    ht = ::GetWindow(ht,GW_HWNDNEXT);			//"MS"Button
    ht = ::GetWindow(ht,GW_HWNDNEXT);			//"M+"Button
    ht = ::GetWindow(ht,GW_HWNDNEXT);			//"7"
    ht = ::GetWindow(ht,GW_HWNDNEXT);			//"4"
    //ht = ::GetWindow(ht,GW_HWNDNEXT);			//"1"
    ::SendMessage(ht,WM_LBUTTONDOWN,0,0);		//нажимаем ^ кнопку
    ::SendMessage(ht,WM_LBUTTONUP,0,0);			//отпускаем кнопку
    }
    только ::SendMessage(ht, WM_SETTEXT, 0,(LPARAM)"777"); не работает
    как это исправить? или что я делаю не так?

    ::SendMessage(ht, WM_SETTEXT, 0,(LPARAM)(LPSTR)"7"); выводит семёрку, короче можно только один символ если поставить больше то квадратики выводит в калькулятор, ну а вопрос - как записать больше символов?

    ::SendMessage(ht, WM_SETTEXT, 0,(LPARAM)L"777"); заработало так (вписывает не только цифры но и буквы)
    Но проблема - Калькулятор не распознаёт мои 777 как цифру введённую мной, и при нажатии на кнопку(что на "Калькуляторе" или что в моей программе) он удаляет 777 и ставит нажатую цифру.
    Как это исправить?
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей