Ms Visual Studio Mfc

  • Автор темы solova
  • Дата начала
Статус
Закрыто для дальнейших ответов.
S

solova

Гость
#1
Решил научится манипулировать(управлять) другую программу своей.
Например нажимать кнопки, вписывать текст, считывать и т.п.
По этой теме я полный ноль, только сегодня решил(решился) изучить это.
Хочу создать маленькую программу MFC которая:
1)В уже открытом "Калькуляторе" вписывает какую либо цифру.
2)Нажимает на какую либо кнопку.
В своей MFC программе создал кнопку которая должна это сделать.
написал обработчик, есть ошибки, не могу понять как исправить(но уверен они очень глупые).
C++:
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() и всех её параметров На русском.
 
S

solova

Гость
#2
что за глюк? не могу понять,
когда пишу " 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">
C++:
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 и ставит нажатую цифру.
Как это исправить?
 
Статус
Закрыто для дальнейших ответов.