![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Эмулятор нажатия Enter'а [D7, WinXP]
Slonik © (2007-08-03 01:54:00)Доброго времени суток! Нужно в текстовом поле нажать на ентер, но не на клаве, а через программу... Пробывал SendMessage(ControlHandle, BM_CLICK, 0, 0), чет не получается... Напишите, пожалуйста, какие-нить другие варианты.
Заранее спасибо!
(2007-08-03 15:16:00) [1]Удалено модератором
Leonid Troyanovsky (2007-08-03 12:29:00) [2]
> JanMihail © (03.08.07 11:19) [4]
> Извини ошибся. Вот так:
Все равно, это лишь имитация (приблизительная).
Если уж эмулировать, то SendInput to foreground window.
--
Regards, LVT.
JanMihail (2007-08-03 11:19:00) [3]
> [3]
Извини ошибся. Вот так:
PostMessage(<хэндл>, WM_KEYDOWN, VK_RETURN, 1);
PostMessage(<хэндл>, WM_KEYUP, VK_RETURN, 1);
JanMihail (2007-08-03 11:18:00) [4]PostMessage(VK_RETURN, WM_KEYDOWN, 1, 1);
PostMessage(VK_RETURN, WM_KEYUP, 1, 1);
Dib@zol (2007-08-03 09:22:00) [5]Эт оч просто:
Сначала надо унаследовать свою оконную процедуру от процедуры едит-а;
Потом подключиться к ней;
И творить что в голову взбредёт!
Вот пример:
var
EWP : Pointer;
...
function EDP(hWnd: HWND; Msg: LongInt; wParam, lParam: Longint): longInt; stdcall;
begin
if (Msg = WM_KEYUP)and(wParam = VK_RETURN) then begin
MessageBox(hWnd, 'Урряя!! Поймалося!!!', '', 0); // <- Вот оно!!!
end else Result:=CallWindowProc(EWP, hWnd, Msg, wParam, lParam);
end;
...
longInt(EWP):=setWindowLong(Edit1.Handle, GWL_WNDPROC, longInt(@EDP));
Elen (2007-08-03 09:20:00) [6]Попробуй
Edit1.Perform(WM_CHAR,13,0);Только зачем все это? Если ты прописал обработчик OnKeyPress или Down или Up то проще вызывать соответствующую им процедуру, передавая туда клавишу #13.