![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Имитация нажатия клавиш [D7, XP]
Сергей © (2013-04-08 11:43:00)Здравствуйте.
Помогите, пожалуйста, написать, маленькую программку, которая бы имитировала нажатие клавиш на клавиатуре.
Т.е. нажимаю кнопку «Старт» и программа каждую секунду имитирует нажатие клавиш «1, 2, 3», и так пока не нажата кнопка «Стоп», или пока я сам на нажал на клавиатуре заранее определенную клавишу остановки (напр. F12).
Я вот пробую использовать такой код
procedure TForm1.Button1Click(Sender: TObject);
var
i: integer;
begin
for i := 1 to 100 do begin
keybd_event(Ord('1'), 0, 0, 0); //Нажатие 1.
keybd_event(Ord('1'), 0, KEYEVENTF_KEYUP, 0); //Отпускание 1.
Application.ProcessMessages;
Sleep(1000);
keybd_event(Ord('2'), 0, 0, 0); //Нажатие 2.
keybd_event(Ord('2'), 0, KEYEVENTF_KEYUP, 0); //Отпускание 2.
Application.ProcessMessages;
Sleep(1000);
keybd_event(Ord('3'), 0, 0, 0); //Нажатие 3.
keybd_event(Ord('3'), 0, KEYEVENTF_KEYUP, 0); //Отпускание 3.
Application.ProcessMessages;
Sleep(1000);
end;
end;
Имитация идет хорошо, но программа пока не отработает цикл от 1 до 100 просто подвисает и ни на что не реагирует.
Можно ли создать такой примерно цикл
Пока не нажата F12 повторять
Начало цикла
keybd_event(Ord('1'), 0, 0, 0); //Нажатие 1.
keybd_event(Ord('1'), 0, KEYEVENTF_KEYUP, 0); //Отпускание 1.
Application.ProcessMessages;
Sleep(1000);
Конец цикла.
Или
Пока не нажата кнопка «Стоп» повторять
Начало цикла
keybd_event(Ord('1'), 0, 0, 0); //Нажатие 1.
keybd_event(Ord('1'), 0, KEYEVENTF_KEYUP, 0); //Отпускание 1.
Application.ProcessMessages;
Sleep(1000);
Конец цикла.
Спасибо.
Вова (2013-04-11 09:18:00) [1]можно еще короче )
while (getasynckeystate($1B) = 0) do
..........
Вова (2013-04-11 08:35:00) [2]
> И как "это" отвечает на вопрос автора топика?
Элементарно, это способ выйти по кнопке с клавы из цикла, а можно и из программы.
Германн (2013-04-11 02:39:00) [3]
> Вова (10.04.13 23:22) [6]
И как "это" отвечает на вопрос автора топика?
Вова (2013-04-10 23:22:00) [4]while True do
begin
if getasynckeystate($1B) <> 0 then
begin
ShowMessage('Работа программы завершена пользователем');
break;
end;
............................
end;
ток тут эскейп
Сергей (2013-04-09 10:15:00) [5]Спасибо. Получилось что хотел. Помогли ваши советы.
clickmaker (2013-04-08 12:47:00) [6]Form1.KeyPreview = true
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (Key = VK_F12) then
FF12Clicked := true;
end;
while not FF12Clicked do begin
...
end;
Сергей (2013-04-08 12:35:00) [7]Не могли бы выложить маленький пример кода?
Дмитрий С (2013-04-08 11:52:00) [8]
> TForm1.Button1Click
Повесь нажатия и отпускания на таймер
brother (2013-04-08 11:47:00) [9]> Можно ли создать такой примерно цикл
можно.