Вниз
Скачать: CL | DM;

ввод в чужом окне без keybd_Event   Найти похожие ветки 

← →
__Ed__ ©   (2003-08-02 14:08) [0]

Уважаемае мастера! Как корректно эмулировать в чужом окне
(есть хэндл) ввод символов, не используя keybd_Event?
Я пробовал SendMessage(Handle, WM_KEYDOWN, ...) и WM_KEYUP но
реакции не было. Может что то не то с параметрами намудрил,
а может этот метод не работает?

Заранее спасибо за развёрнутый ответ! :)


← →
Delphi5.01 ©   (2003-08-02 21:55) [1]

poprobui WM_SETETXT
no u mnea taje problema, v nekotorix oknax ne pishet, a s nekotorix ne mogu poluchit soderjimoe!


← →
Spawn ©   (2003-08-03 10:53) [2]

ScanCode:=MapVirtualKey(Key,0);
lParam := ScanCode shl 16 or 1;
SendMessage(Wnd,WM_KEYDOWN,Key,lParam);


← →
esVer   (2003-08-03 17:06) [3]

keybd_Event однозначно надежнее.


← →
Diamond Cat ©   (2003-08-07 01:30) [4]

sendinput


← →
Сергеич   (2003-08-07 11:40) [5]

Работал над этой пробл.
Спокойно можно посылать любые клавиши с помощью
PostMessage и\или Sendmessage, кроме vk_control, vk_shift.
Т.е. из сочетания Ctrl Home уйдет только Номе.
Текст программы могу послать.
Отлажена 90% с помощью keybd_event.
Пиши abc@aeroflot.ru


← →
oni   (2003-08-07 19:07) [6]

//Try this:

procedure TForm1.PostKey(hWindow: HWnd; key: Word; const shift: TShiftState; specialkey: Boolean);
var
lParam: LongInt;
begin
if IsWindow(hWindow) then
begin
lParam := MakeLong(0, MapVirtualKey(key, 0));
if specialkey then
lParam := lParam or $1000000;
if ssShift in shift then
PostMessage(hWindow, WM_KEYDOWN, VK_SHIFT, MakeLong(0, MapVirtualKey(VK_SHIFT, 0)));
if ssAlt in shift then
begin
PostMessage(hWindow, WM_SYSKEYDOWN, VK_CONTROL, MakeLong(0, MapVirtualKey(VK_CONTROL, 0)));
lParam := lParam or $20000000;
end;
if ssCtrl in shift then
PostMessage(hWindow, WM_KEYDOWN, VK_CONTROL, MakeLong(0, MapVirtualKey(VK_CONTROL, 0)));
if ssLeft in shift then
PostMessage(hWindow, WM_KEYDOWN, VK_LBUTTON, MakeLong(0, MapVirtualKey(VK_LBUTTON, 0)));
if ssRight in shift then
PostMessage(hWindow, WM_KEYDOWN, VK_RBUTTON, MakeLong(0, MapVirtualKey(VK_RBUTTON, 0)));
if ssMiddle in shift then
PostMessage(hWindow, WM_KEYDOWN, VK_MBUTTON, MakeLong(0, MapVirtualKey(VK_MBUTTON, 0)));
(* post the key messages *)
if ssAlt in Shift then
begin
PostMessage(hWindow, WM_SYSKEYDOWN, key, lParam);
PostMessage(hWindow, WM_SYSKEYUP, key, lParam or $C0000000);
end
else
begin
PostMessage(hWindow, WM_KEYDOWN, key, lParam);
PostMessage(hWindow, WM_KEYUP, key, lParam or $C0000000);
end;
Application.ProcessMessages;
if ssMiddle in shift then
PostMessage(hWindow, WM_KEYUP, VK_MBUTTON, MakeLong(0, MapVirtualKey(VK_MBUTTON, 0)));
if ssRight in shift then
PostMessage(hWindow, WM_KEYUP, VK_RBUTTON, MakeLong(0, MapVirtualKey(VK_RBUTTON, 0)));
if ssLeft in shift then
PostMessage(hWindow, WM_KEYUP, VK_LBUTTON, MakeLong(0, MapVirtualKey(VK_LBUTTON, 0)));
if ssCtrl in shift then
PostMessage(hWindow, WM_KEYUP, VK_CONTROL, MakeLong(0, MapVirtualKey(VK_CONTROL, 0)));
if ssAlt in shift then
( hWindow, WM_SYSKEYUP, VK_CONTROL, MakeLong(0, MapVirtualKey(VK_CONTROL, 0) //Try this:

procedure TForm1.PostKey(hWindow: HWnd; key: Word; const shift: TShiftState; specialkey: Boolean);
var
lParam: LongInt;
begin
if IsWindow(hWindow) then
begin
lParam := MakeLong(0, MapVirtualKey(key, 0));
if specialkey then
lParam := lParam or $1000000;
if ssShift in shift then
PostMessage(hWindow, WM_KEYDOWN, VK_SHIFT, MakeLong(0, MapVirtualKey(VK_SHIFT, 0)));
if ssAlt in shift then
begin
PostMessage(hWindow, WM_SYSKEYDOWN, VK_CONTROL, MakeLong(0, MapVirtualKey(VK_CONTROL, 0)));
lParam := lParam or $20000000;
end;
if ssCtrl in shift then
PostMessage(hWindow, WM_KEYDOWN, VK_CONTROL, MakeLong(0, MapVirtualKey(VK_CONTROL, 0)));
if ssLeft in shift then
PostMessage(hWindow, WM_KEYDOWN, VK_LBUTTON, MakeLong(0, MapVirtualKey(VK_LBUTTON, 0)));
if ssRight in shift then
PostMessage(hWindow, WM_KEYDOWN, VK_RBUTTON, MakeLong(0, MapVirtualKey(VK_RBUTTON, 0)));
if ssMiddle in shift then
PostMessage(hWindow, WM_KEYDOWN, VK_MBUTTON, MakeLong(0, MapVirtualKey(VK_MBUTTON, 0)));
(* post the key messages *)
if ssAlt in Shift then
begin
PostMessage(hWindow, WM_SYSKEYDOWN, key, lParam);
PostMessage(hWindow, WM_SYSKEYUP, key, lParam or $C0000000);
end
else
begin
PostMessage(hWindow, WM_KEYDOWN, key, lParam);
PostMessage(hWindow, WM_KEYUP, key, lParam or $C0000000);
end;
Application.ProcessMessages;
if ssMiddle in shift then
PostMessage(hWindow, WM_KEYUP, VK_MBUTTON, MakeLong(0, MapVirtualKey(VK_MBUTTON, 0)));
if ssRight in shift then
PostMessage(hWindow, WM_KEYUP, VK_RBUTTON, MakeLong(0, MapVirtualKey(VK_RBUTTON, 0)));
if ssLeft in shift then
PostMessage(hWindow, WM_KEYUP, VK_LBUTTON, MakeLong(0, MapVirtualKey(VK_LBUTTON, 0)));
if ssCtrl in shift then
PostMessage(hWindow, WM_KEYUP, VK_CONTROL, MakeLong(0, MapVirtualKey(VK_CONTROL, 0)));
if ssAlt in shift then
PostMessage(hWindow, WM_SYSKEYUP, VK_CONTROL, MakeLong(0, MapVirtualKey(VK_CONTROL, 0)));
end; { If }
end; { PostKey }

//Example:
PostKey(HWnd, VK_RETURN, [], FALSE);
//OR:
PostKey(TELL_HWnd, ORD("7"), [], FALSE);
//OR:
PostKey(TELL_HWnd, VK_DOWN, [], TRUE);



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.017 c
4-40733
likeanangel
2003-08-08 11:54
2003.10.13
Вывод наклонного битмэпа


3-40260
ViKS
2003-09-23 09:22
2003.10.13
Как установить путь к базе данных без alias. Все равно непонятно!


14-40654
VictorT
2003-09-23 17:05
2003.10.13
У кого нить под рукой есть


14-40585
Empleado
2003-09-23 11:18
2003.10.13
Вопрос, связанный с деревьями.


4-40735
kirill-nevers
2003-08-07 16:37
2003.10.13
Продолжение выполнения программы при вызове ShowMessage




   Наверх