Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2017.04.02;
Скачать: [xml.tar.bz2];

Вниз

Нажать 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.001 c
15-1459891805
Юрий
2016-04-06 00:30
2017.04.02
С днем рождения ! 6 апреля 2016 среда


2-1438328592
Pavelnk
2015-07-31 10:43
2017.04.02
Перекинуть edit в буфер


1-1350017157
de_guta
2012-10-12 08:45
2017.04.02
ComboBox


3-1313067737
amamed_3071
2011-08-11 17:02
2017.04.02
Upgate SQL 2005 Expression to SQL 2005 Enterprice


2-1438148217
Alex_C
2015-07-29 08:36
2017.04.02
Как правильно "убить" зависший Thread





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский