Форум: "WinAPI";
Текущий архив: 2003.10.13;
Скачать: [xml.tar.bz2];
Внизввод в чужом окне без 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 вся ветка
Форум: "WinAPI";
Текущий архив: 2003.10.13;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.01 c