Страница 1 из 2
Проблемы с АПИ! Прочитайте, поймете! =)
Добавлено: 24 дек 2004, 14:48
Devider
Господа!
Столкнулся с такой проблемой: в программке есть поле для ввода некой величины, которую нужно изменить из программы, которую я сейчас пишу. Вот, что у меня получилось:
CWnd* cWnd = FindWindow(NULL,"Form1");
if (!cWnd)
{
AfxMessageBox("!found");
return;
}
POINT p;
p.x = 5;
p.y = 5;
CWnd* cChildWnd = cWnd->ChildWindowFromPoint(p);
//Попадаю, вроде =) Мож как получше можно?
if (!cChildWnd)
{
AfxMessageBox("!found");
return;
}
// Это сотрет значение того поля
cChildWnd->SendMessage(WM_CLEAR,0,0);
А нужно его не стереть, а ввести новое. Подскажите, кто в курсе, пожалуйста!=)
Добавлено: 24 дек 2004, 14:55
Romeo
cClild->SendMessage(WM_SETTEXT, "My text", 0);
Добавлено: 24 дек 2004, 15:10
Devider
[quote="Romeo"]cClild->SendMessage(WM_SETTEXT, "My text", 0)]
cChildWnd->SendMessage(WM_SETTEXT,"Test",0);
Вот что получил...
error C2664: 'CWnd::SendMessageA' : cannot convert parameter 2 from 'const char [5]' to 'WPARAM'
Добавлено: 24 дек 2004, 15:27
Devider
cChildWnd->SendMessage(WM_SETTEXT,0,(WPARAM)"Test"); Во как! Блин, сам бы мог догадаться... Спасибо!
Добавлено: 24 дек 2004, 16:50
Devider
И под конец совсем дурацкий вопрос: а как сгенерить нажатие Ентера?
Добавлено: 24 дек 2004, 16:56
Tima
ответ напрашивается сам собой через SendMessage & WM_KEYDOWN
Добавлено: 24 дек 2004, 17:10
Devider
м... э... А как ты себе полностью это представляешь?
SendMessage(WM_KEYDOWN, а потом что?
Вот такая штука не работает, хотя вроде 'х' должен получиться...
cWnd->BringWindowToTop();
cChildWnd->SetFocus();
cChildWnd->SendMessage(WM_KEYDOWN,88,0);
Добавлено: 24 дек 2004, 18:13
Eugie
Для ввода символа в Editbox надо посылать WM_CHAR. А для симуляции нажатия клавиши Enter попробуй сСhildWnd->SendMessage(WM_KEYDOWN, VK_RETURN, 0L)
Есть еще вариант с SendInput, но это симуляция ввода на низком уровне (в системную очередь, а не в конкретное окно)
Добавлено: 24 дек 2004, 18:26
Tima
Да, правильно Eugie - если хош использовать SendMessage, то тиши так:
cChildWnd->SendMessage(WM_CHAR, (WPARAM)'x', 0);
cChildWnd->SendMessage(WM_CHAR, VK_RETURN, 0);
cChildWnd->SendMessage(WM_CHAR, (WPARAM)'x', 0);
Это выведет 2 x через строку.
Вообще то коряво как то использовать все эти SendMessage, ChildWindowFromPoint - но какой вопрос такой ответ
Добавлено: 27 дек 2004, 19:31
Devider
И тут же еще вопрос! =)
Что надо послать, чтобы нажать батон? WM_LBUTTONDOWN не катит... А если кто подскажет хороший источник со Знаниями, я отстану от уважаемого общества! =)