Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2017.04.02;
Скачать: CL | DM;

Вниз

Нажать Enter   Найти похожие ветки 

 
Pavelnk ©   (2015-07-29 18:11) [0]

Пишу маленькую прожку-помощник для себя. Как выставить мышку в нужное место я разобрался, как заставить её кликнуть, тоже -
mouse_event(MOUSEEVENTF_LEFTDOWN, p.X, p.Y, 0, 0);
Как мне теперь программно нажать Enter?


 
Pavelnk ©   (2015-07-29 18:12) [1]

В смысле вроде как с клавиатуры.


 
Игорь Шевченко ©   (2015-07-29 19:00) [2]

keybd_event(VK_RETURN, 0, KEYEVENTF_EXTENDEDKEY, 0);
 keybd_event(VK_RETURN, 0, KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP, 0);


 
Pavelnk ©   (2015-07-29 19:09) [3]

> Игорь Шевченко ©   (29.07.15 19:00) [2]
Да, спасибо! И ещё вопрос, почему я не могу ввести несколько букв подряд?

> keybd_event(ord("D"), 0, 0, 0);
> keybd_event(ord("D"), 0, KEYEVENTF_KEYUP, 0);

Если одна, то всё нормально. Фокус что ли теряется?


 
Игорь Шевченко ©   (2015-07-29 19:19) [4]


>  И ещё вопрос, почему я не могу ввести несколько букв подряд?


потому что у тебя ошибка в коде


 
Pavelnk ©   (2015-07-29 19:27) [5]

> Игорь Шевченко ©   (29.07.15 19:19) [4]
> потому что у тебя ошибка в коде
Почему ошибка? Всё вместе должно быть примерно так -
SetCursorPos(p.X, p.Y);
mouse_event(MOUSEEVENTF_LEFTDOWN, p.X, p.Y, 0, 0);
keybd_event(ord("D"), 0, 0, 0);  //первая буква
keybd_event(ord("D"), 0, KEYEVENTF_KEYUP, 0);
keybd_event(ord("G"), 0, 0, 0); //вторая буква
keybd_event(ord("G"), 0, KEYEVENTF_KEYUP, 0);
keybd_event(VK_RETURN,0,KEYEVENTF_EXTENDEDKEY,0);
keybd_event(VK_RETURN,0,KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP,0);


 
Игорь Шевченко ©   (2015-07-29 21:21) [6]

попробуй вставить задержку между нажатием клавиш в 100 мс


 
ВладОшин ©   (2015-07-29 21:39) [7]

еще лучше через MapVirtualKey(, а не просто 0

procedure TfrmSnils.PressThisKey(Key: Char);
var
  VK: Byte;
begin
 case  Key of
  "-": VK := $6D;
  #08: VK := VK_BACK;
  else VK := Ord(UpCase(Key));
 end;

   Application.ProcessMessages;
   keybd_event(VK, MapVirtualKey(VK,0), 0, 0);
   Application.ProcessMessages;
   keybd_event(VK, MapVirtualKey(VK,0), KEYEVENTF_KEYUP, 0);
   Application.ProcessMessages;
end;

procedure TfrmSnils.TypeThisStr(S: string);
var
 i: Integer;
begin
 for i := 1 to Length(s) do
 begin
   PressThisKey(s[i]);
   Application.ProcessMessages;
 end;
end;


 
Игорь Шевченко ©   (2015-07-29 22:23) [8]

Я неспециальные кнопки нажимал иначе:

procedure PlayKey(const C: Char);
var
 Inputs: array[0..1] of TInput;
begin
 if C <> "_" then
 begin
   FillChar(Inputs, SizeOf(Inputs), 0);
   Inputs[0].Itype := INPUT_KEYBOARD;
   Inputs[0].ki.wVk := Ord(C);
   Inputs[0].ki.dwFlags := KEYEVENTF_EXTENDEDKEY;
   Inputs[1].Itype := INPUT_KEYBOARD;
   Inputs[1].ki.wVk := Ord(C);
   Inputs[1].ki.dwFlags := KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP;
   SendInput(2, TInput((@Inputs)^), SizeOf(TInput));
 end
 else
 begin
   keybd_event(VK_SHIFT, 0, KEYEVENTF_EXTENDEDKEY, 0);
   keybd_event(VK_OEM_MINUS, 0, KEYEVENTF_EXTENDEDKEY, 0);
   keybd_event(VK_OEM_MINUS, 0, KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP, 0);
   keybd_event(VK_SHIFT, 0, KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP, 0);
 end;
end;


 
Pavelnk ©   (2015-07-29 22:55) [9]

> Игорь Шевченко ©   (29.07.15 22:23) [8]
Да, поставил sleep(170); всё заработало. Вот только один вопрос остался, как точку нажать? Вот так не хочет -
keybd_event(ord("."), 0, 0, 0);
keybd_event(ord("."), 0, KEYEVENTF_KEYUP, 0);
sleep(170);


 
Игорь Шевченко ©   (2015-07-30 10:25) [10]

Pavelnk ©   (29.07.15 22:55) [9]

Это платная услуга



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

Текущий архив: 2017.04.02;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.004 c
2-1438148217
Alex_C
2015-07-29 08:36
2017.04.02
Как правильно "убить" зависший Thread


4-1281349091
PavDimka
2010-08-09 14:18
2017.04.02
Глюк с QueryPerformanceFrequency


2-1438149724
Abcdef123
2015-07-29 09:02
2017.04.02
Компиляция кода D2007 в XE8.


2-1438182677
Pavelnk
2015-07-29 18:11
2017.04.02
Нажать Enter


1-1327322645
Light-blr
2012-01-23 16:44
2017.04.02
Выделенный элемент ListView при потере фокуса становится серым