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

Вниз

Имитация нажатия клавиш   Найти похожие ветки 

 
Сергей   (2013-04-08 11:43) [0]

Здравствуйте.
Помогите, пожалуйста, написать, маленькую программку, которая бы имитировала нажатие клавиш на клавиатуре.
Т.е. нажимаю кнопку «Старт» и программа каждую секунду имитирует нажатие клавиш «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);
Конец цикла.

Спасибо.


 
brother ©   (2013-04-08 11:47) [1]

> Можно ли создать такой примерно цикл

можно.


 
Дмитрий С ©   (2013-04-08 11:52) [2]


> TForm1.Button1Click

Повесь нажатия и отпускания на таймер


 
Сергей   (2013-04-08 12:35) [3]

Не могли бы выложить маленький пример кода?


 
clickmaker ©   (2013-04-08 12:47) [4]

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-09 10:15) [5]

Спасибо. Получилось что хотел. Помогли ваши советы.


 
Вова   (2013-04-10 23:22) [6]

while True do
begin

if getasynckeystate($1B) <> 0 then
 begin
   ShowMessage("Работа программы завершена пользователем");
   break;
 end;
............................
end;

ток тут эскейп


 
Германн ©   (2013-04-11 02:39) [7]


> Вова   (10.04.13 23:22) [6]

И как "это" отвечает на вопрос автора топика?


 
Вова   (2013-04-11 08:35) [8]


> И как "это" отвечает на вопрос автора топика?


Элементарно, это способ выйти по кнопке с клавы из цикла, а можно и из программы.


 
Вова   (2013-04-11 09:18) [9]

можно еще короче )

while (getasynckeystate($1B) = 0) do
..........



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

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

Наверх




Память: 0.49 MB
Время: 0.005 c
2-1365225447
Windows 8
2013-04-06 09:17
2014.02.09
Access Violation на этой операционной системе


2-1364751359
Вова
2013-03-31 21:35
2014.02.09
Построение Хэша


15-1377376202
Юрий
2013-08-25 00:30
2014.02.09
С днем рождения ! 25 августа 2013 воскресенье


2-1364804378
dmitry87
2013-04-01 12:19
2014.02.09
работа с sqlite в xe3


2-1358728095
ad1951
2013-01-21 04:28
2014.02.09
Тест на Делфи