Форум: "Начинающим";
Текущий архив: 2014.02.09;
Скачать: [xml.tar.bz2];
ВнизИмитация нажатия клавиш Найти похожие ветки
← →
Сергей (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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.004 c