Главная страница
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.008 c
8-1233922362
DesWind
2009-02-06 15:12
2014.02.09
Выделение полезного сигнала


6-1270818072
Zoom
2010-04-09 17:01
2014.02.09
IGMP компоненты


1-1321429584
Deltas
2011-11-16 11:46
2014.02.09
OleContainer и Excel


2-1365524535
robt
2013-04-09 20:22
2014.02.09
exception


1-1321910834
Mr.Devil
2011-11-22 01:27
2014.02.09
Ошибка при инициализации приложения (0xc0000005)