Форум: "Начинающим";
Текущий архив: 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